変数
Juliaでは、変数とは値に関連付け(または束縛)した名前のことです。 これは(例えば計算結果などの)値を保存してあとで使う場合に便利です。 例を挙げると
# Assign the value 10 to the variable x
julia> x = 10
10
# Doing math with x's value
julia> x + 1
11
# Reassign x's value
julia> x = 1 + 1
2
# You can assign values of other types, like strings of text
julia> x = "Hello World!"
"Hello World!"
Juliaの変数の命名システムは非常に柔軟です。 大文字と小文字が違うと別の変数とみなされますが、意味論的には変わりません。(つまり名前の文字種によって変数の解釈が変わることはありません。)
julia> x = 1.0
1.0
julia> y = -3
-3
julia> Z = "My string"
"My string"
julia> customary_phrase = "Hello world!"
"Hello world!"
julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。"
"人人生而自由,在尊严和权利上一律平等。"
(UTF-8エンコードを使った)ユニコードの名前も利用できます。
julia> δ = 0.00001
1.0e-5
julia> 안녕하세요 = "Hello"
"Hello"
REPLやいくつかの編集環境では、バックスラッシュの後にLaTeXのシンボル名とタブキーを入力すると、 多数のユニコードの数学記号を入力できます。 例えば、 δ
という変数名は、 \delta
-tab と打てばいいですし、α̂₂
でさえ \alpha
-tab-\hat
- tab-\_2
-tab とすれば入力できます。(例えば、他人のコードで入力の仕方がわからないような記号に出くわしたときは、 REPLが役立ちます。 ?
を入力した後に、記号を貼り付ければいいのです)
Juliaでは、組み込みの定数や関数でさえも、必要なら再定義することができます。 (しかし、混乱の元とならないよう、推奨はされません)
julia> pi = 3
3
julia> pi
3
julia> sqrt = 4
4
しかし、組み込みの定数や関数をすでに利用している場合は、再定義しようとするとエラーが起こります。
julia> pi
π = 3.1415926535897...
julia> pi = 3
ERROR: cannot assign variable MathConstants.pi from module Main
julia> sqrt(100)
10.0
julia> sqrt = 4
ERROR: cannot assign variable Base.sqrt from module Main
利用可能な変数名
変数名は、アルファベット(A-Z または a-z)、アンダースコア、ユニコードの一部で、符号位置が00A0よりも大きいもの、 のいずれかで始めなければなりません。 特にユニコードの文字カテゴリー では、Lu/Ll/Lt/Lm/Lo/Nl (文字), Sc/So (通貨その他の記号),その他、アルファベットのような文字のいくつか (例:数学記号Smの一部) が利用可能です。 二文字目以降は、!
や数字(0-9やカテゴリーNd/Noの文字)が混在可能で、 他の符号位置のユニコードでは、発音区別記号などの修飾記号(カテゴリーMn/Mc/Me/Sk)、接続用の約物のいくつか(カテゴリーPc)、 プライムやその他いくつかの文字が利用可能です。
+
のような演算子は有効な識別子ですが、構文解析のされ方が特殊です。 演算子が単なる変数のように扱われることもあります。例えば、(+)
は加法の関数を表しますが、 (+) = f
のように再代入することができます。 ⊕
のような(カテゴリーSmに属する)ユニコードの中置演算子のほとんどは、中置演算子として解析されて、ユーザー定義のメソッドを 利用できます。(例えば、const ⊗ = kron
とすると⊗
に中置記法のクロネッカ積を定義できます)。 また演算子の後に修飾記号、プライム、下付・上付文字をつけることもできます。 例えば、+̂ₐ″
は前述の+
と同じく、中置演算子として解析されます。
明示的に禁止されている変数名は唯一、組み込みの予約語のみです。
julia> else = false
ERROR: syntax: unexpected "else"
julia> try = "No"
ERROR: syntax: unexpected "="
ユニコード文字のなかには識別子として同等に考えられるものがあります。 ユニコードの結合文字(アクセントなど)に対する異なる入力方法は同一視されます。 (具体的にはJuliaの識別子はNFC正規化されます) ユニコード文字の ɛ
(U+025B: Latin small letter open e) and µ
(U+00B5: micro sign) は対応するギリシャ文字と同一視されます。 というのも、入力法の中には前者のほうが簡単なものもあるからです。
文体上の慣習
Juliaの妥当な名前にはほとんど制限がありませんが、以下のような慣習に従うと役立つでしょう。
- 変数名を小文字にする
- 語句の区切るときに、アンダースコア(
'_'
)を利用できる。
しかし他の方法では読みづらい時以外は、使わないほうがいい。
型
やモジュール
の名前は大文字ではじめ、語句の区切りにはアンダースコアを使わずに、アッパーキャメルケースを使う。関数
やマクロ
の名前は小文字にして、アンダースコアを使わない- 引数に対して書き込みを行う関数は名前の最後に
!
をつける。
こういった関数は時折、「変異(mutating)」「上書き(in-place)」関数とよばれます。 これは,関数が呼び出された後、単に値を返すだけでなく、引数に対して変化を起こそうとするからです。
文体上の慣習に関するさらなる情報は Style Guideを参照してください。