変数
Julia において、変数 (variable) とは値に関連付いた (束縛された) 名前のことです。計算結果などの値を後で使うために保存したい場合に変数が利用できます。変数の使用例を示します:
# 変数 x に値 10 を代入する
julia> x = 10
10
# x の値を使って計算をする
julia> x + 1
11
# もう一度 x に値を代入する
julia> x = 1 + 1
2
# 文字列のように型の異なる値も代入できる
julia> x = "Hello World!"
"Hello World!"
Julia は非常に柔軟な変数の命名規則を持ちます。変数の名前では大文字と小文字が区別され、変数の名前は意味論的な意味を持ちません (つまり、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 = "人人生而自由,在尊严和权利上一律平等。"
"人人生而自由,在尊严和权利上一律平等。"
Unicode (UTF-8 エンコーディング) の名前も許されています:
julia> δ = 0.00001
1.0e-5
julia> 안녕하세요 = "Hello"
"Hello"
Julia REPL および一部の Julia の編集環境では、バックスラッシュの後に LaTeX 風のシンボル名を入力して TAB
を押すと Unicode の数学記号を入力できます。例えば δ
という変数名は \delta
-TAB
とタイプすれば入力できます。また \alpha
-TAB
-\hat
-TAB
-\_2
-TAB
とタイプすれば α̂₂
が入力されます。他の人が書いたコードに含まれる記号の入力方法が分からないときは、REPL で ?
とタイプした後にその記号をペーストすれば調べることができます。
Julia では組み込みの定数や関数さえ再定義が可能です (やろうと思えばできるというだけです。混乱の元になるので再定義は推奨されません):
julia> pi = 3
3
julia> pi
3
julia> sqrt = 4
4
ただし一度使用した組み込みの定数や関数を再定義しようとすると、julia
はエラーを発生させます:
julia> pi
π = 3.1415926535897...
julia> pi = 3
ERROR: cannot assign a value to variable MathConstants.pi from module Main
julia> sqrt(100)
10.0
julia> sqrt = 4
ERROR: cannot assign a value to variable Base.sqrt from module Main
変数名に使える文字
変数名の最初の文字として許されているのはアルファベット (A-Z と a-z) とアンダースコア、そして 00A0 より大きい Unicode 符号位置の一部です。具体的には Unicode 文字カテゴリの Lu/Ll/Lt/Lm/Lo/Nl (文字) と Sc/So (通貨およびその他の記号)、そしていくつかの文字様記号 (数学記号 Sm の一部など) が許されています。二文字目以降の文字にはこれに加えて ! と数字 (0-9 およびカテゴリ Nd/No に含まれる文字) およびその他の Unicode 符号位置の一部が利用可能です。具体的には発音区別符号 (diacritics) などの修飾記号 (カテゴリ Mn/Mc/Me/Sk)・接続用の約物 (カテゴリ Pc)・プライム・その他のいくつかの文字が利用できます。
演算子を表す +
のような文字は正当な識別子ですが、特別な方法でパースされます。演算子を変数と同じように使える状況もあります: 例えば (+)
は加算関数を参照し、(+) = f
とすれば再代入が行われます。Unicode のカテゴリ Sm に含まれる ⊕
のような中値演算子の多くは中置演算子としてパースされ、ユーザー定義のメソッドとして利用できます (つまり const ⊗ = kron
とすれば ⊕
を中置のクロネッカー積にできます)。演算子には修飾記号や上付き/下付き文字を付けることもでき、例えば +̂ₐ″
は +
と同じ優先順位を持つ中置演算子としてパースされます。
変数名として唯一明示的に禁止されているのは、組み込みのキーワードです:
julia> else = false
ERROR: syntax: unexpected "else"
julia> try = "No"
ERROR: syntax: unexpected "="
一部の Unicode 文字は識別子として同じとみなされます。また Unicode 結合文字 (アクセントなど) の比較はどのように入力されたかを考慮しません (具体的には、Julia の識別子は NFC 正規化されます)。例えば Unicode 文字 ɛ
(U+025B: Latin small letter open e) と µ
(U+00B5: micro sign) はそれぞれ対応するギリシャ文字と同じとみなされます。こうなっているのは、入力方法によっては ɛ
と µ
の方が簡単に入力できるためです。
Julia のスタイル
Julia には正当な名前に関する制限がほとんどありませんが、これから書くコードでは次の慣習に従うとよいでしょう:
- 変数名は小文字とする。
- 単語の区切りにはアンダースコア (
'_'
) を使ってよい。ただしアンダースコアを使わなくても簡単に読めるなら使わない。 - 型とモジュールの名前は大文字で始め、単語の区切りはアンダースコアではなく大文字で表す。
- 関数とマクロの名前は小文字として、アンダースコアは使わない。
- 引数を改変する関数の名前には最後に
!
を付ける。こういった関数は値を返すのに加えて引数に受け取った値を変更するので、「改変を行う (mutating) 関数」あるいは「インプレース (in-place) の関数」と呼ばれる。
コードスタイルの慣習についてさらに詳しくはスタイルガイドの章を参照してください。