差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
tutorial:odin:variables_and_constants [2024/08/20 02:02] – ↷ tutorial:odin:variables から tutorial:odin:variables_and_constants へページを名称変更しました。 freemikantutorial:odin:variables_and_constants [2025/05/20 02:04] (現在) – 削除 freemikan
行 1: 行 1:
-====== 変数と定数 ====== 
  
-数値や文字列といった値に名前を付けるには、変数、あるいは定数を利用します。変数はミュータブルで、後で変更することができます。イミュータブルな変数はサポートされていません。定数はコンパイル時に評価される値であるという点で、変数とは異なります。定数は後から変更することはできません。 
- 
-====== 変数 ====== 
- 
-変数を使用するには、まずその変数を宣言する必要があります。 
- 
-<file odin> 
-x: int 
-</file> 
- 
-これでint型の値を保持することが出来る''x''という名前の変数が使えるようになります。上のように初期値を指定しなかった場合、0で初期化されます。 
- 
-<file odin> 
-x: int 
-assert(x == 0) 
-</file> 
- 
-宣言と同時に初期値を与えることもできます。 
- 
-<file odin> 
-x: int = 99 
-assert(x == 99) 
-</file> 
- 
-このようなパターンは頻出するので、簡潔な書き方が用意されています。次のコードは上のコードと同等です。 
- 
-<file odin> 
-x := 99 
-assert(x == 99) 
-</file> 
- 
-''x''の型は明示されていませんが、右辺の値の型から導出されます。 
- 
-'':''と''=''は個別のトークンであり、くっついていなくてもほぼ同じ意味になります。 
- 
-<file odin> 
-x1 :     = 99 
-x2 : int = 99 
-assert(x1 == 99) 
-assert(x2 == 99) 
-</file> 
- 
-同じ型の複数の変数をまとめて宣言することができます。 
- 
-<file odin> 
-x1, x2: int 
-assert(x1 == 0) 
-assert(x2 == 0) 
-</file> 
- 
-初期値を与えることもできます。 
- 
-<file odin> 
-x1, x2: int = 100, 200 
-assert(x1 == 100) 
-assert(x2 == 200) 
-</file> 
- 
-一つの変数を宣言する場合と同様に、型名は省略できます。 
- 
-<file odin> 
-x1, x2 := 100, 200 
-assert(x1 == 100) 
-assert(x2 == 200) 
-</file> 
- 
-型名を省略する場合は、異なる型の変数を宣言できます。 
- 
-<file odin> 
-x1, x2 := 100, "hello" 
-assert(x1 == 100) 
-assert(x2 == "hello") 
-</file> 
- 
-型を明示する場合は、異なる型の変数をまとめて宣言することができません。次のように書くことはできません。 
- 
-<file odin> 
-x1, x2 : int, string = 100, "hello" // コンパイルエラー! 
-</file> 
- 
-この点において、型名を省略した書き方のほうが明示的に書くよりも柔軟性があると言えます。 
- 
-変数の宣言と同時に初期値を与えるケースは多くあり、また、その変数の型は初期値から明らかな場合が多いです。そのため、型名を省略した書き方を用いる場合のほうが多くなることが多くなります。明示的に型名を書くのは、そうすることによって意図が明らかになり、コードが読みやすくなる場合に限られてくることになります。 
- 
-====== 定数 ====== 
- 
-プログラム全体を通して変わらない値に名前を付ける場合は、変数よりも定数とする方が適しています。定数は宣言時に値を設定する必要があり、設定された値を後で変更することができません。 
- 
-定数の宣言は次のようになります。 
- 
-<file odin> 
-THE_ANSWER : int : 42 
-</file> 
- 
-変数の場合と同じように、型名は省略することができます。 
- 
-<file odin> 
-THE_ANSWER :: 42 
-</file> 
- 
-定数の値はコンパイル時に評価できる値でなければなりません。したがって、次のコードはコンパイルされません。 
- 
-<file odin> 
-circumference := 6.28318530717958647692 
-radius := 1.0 
-PI :: circumference / (2.0 * radius) // コンパイルエラー! 
-</file> 
- 
-PIの値に計算が含まれていることが原因ではありません。''circumference''と''radius''は変数であり、コンパイル時には値が定まらないため、それに依存して定数を宣言することはできないからです。 
- 
-一方、次のコードは正しいです。 
- 
-<file odin> 
-TAU :: 6.28318530717958647692 
-PI :: TAU / 2.0 
-</file> 
- 
-先の例と同様にPIの値に計算が含まれていますが、そこに含まれるすべての値(''TAU''と''2.0'')がコンパイル時に評価可能であるため、PIの値もコンパイル時に評価可能です。よって、正しくコンパイルされます。 
文書の先頭へ