コンテンツにスキップ

変数と束縛

Ceruneでは、名前と値を束縛します。宣言時に型を指定し、既定ではその名前へ再代入できません。mutを付けると、同じ型の新しい値を代入できます。

count: i64 = 40;
mut total: i64 = count;
total = total + 2;
print(total); // 42
記法 意味
name: T = value; T型の再代入できない束縛を宣言
mut name: T = value; T型の再代入できる束縛を宣言
name = value; 宣言済みのmutな束縛へ再代入

代入の左側には型を再指定しません。宣言でmutを付けていない名前へ代入すると型検査エラーになります。

inferを指定すると、宣言時の式から型を決定します。inferは実行時に型が変わる仕組みではありません。

mut value: infer = 1; // i64
value = 2; // OK
// value = 0.5; // 型エラー: f64は代入できない

手掛かりのない整数リテラルは通常i64、浮動小数点リテラルは通常f64として扱います。明示された型や周囲の式によって、リテラルの型が決まる場合もあります。

数値型の暗黙変換は行いません。詳しくは型と一次資料の数値リテラルの規則を参照してください。

mutな配列の束縛を通して、要素を更新できます。配列は値としてコピーされるため、コピー元の要素は変更されません。

文字列stringの内容は不変です。mutな文字列の束縛には別の文字列を再代入できますが、文字列内の一部だけを書き換えることはできません。

ifやループの本文など、波括弧で囲まれたブロックは新しいスコープを作ります。

  • ブロック内で宣言した束縛は、そのブロックの外から参照できません。
  • 内側から外側の束縛を参照できます。外側がmutなら再代入できます。
  • 内側のブロックでは、外側と同じ名前の別の束縛を宣言できます(シャドーイング)。
  • forの初期化で宣言した名前は条件・更新・本文で使えますが、ループ終了後は参照できません。

このページは要約です。正確な評価順や代入・スコープの規則は一次資料を参照してください。