01_Cairo 中の変数#
この記事で使用されている Cairo コンパイラのバージョンは 2.0.0-rc0 です。Cairo は急速に更新されているため、異なるバージョンでは文法が若干異なる場合がありますが、将来的には安定したバージョンに記事の内容を更新する予定です。
変数はプログラミング言語で最も基本的な要素です。
基本的な使用法#
変数の作成
use debug::PrintTrait;
fn main() {
let x = 5;
let y:u8 = 6;
x.print();
}
変数を作成するには、let キーワードを使用します。PrintTrait は公式のライブラリで提供される印刷ツールライブラリです。
変数の可変性#
Cairo は不変なメモリモデルを使用しており、メモリ領域に値が割り当てられた後は上書きすることはできず、読み取ることしかできません。
これは、Cairo ではすべての変数がデフォルトで不変であることを意味します(少し直感に反しているかもしれません🙃️)。
次のコードを実行してみてください(コマンド:cairo-run --path $FILE_CAIRO
を使用)。
use debug::PrintTrait;
fn main() {
let x = 5;
x.print();
x = 6;
x.print();
}
次のエラーが表示されます。
error: Cannot assign to an immutable variable.
--> c01_var.cairo:5:5
x = 6;
^***^
Error: failed to compile: src/c01_var.cairo
したがって、変数を変更可能にするには、mut キーワードを使用する必要があります。
use debug::PrintTrait;
fn main() {
let mut x = 5;
x.print();
x = 6;
x.print();
}
上記の例では、x 変数の前に mut キーワードが追加されており、これにより正常に実行できます。
不変な変数と🔗定数はいくらか似ていますが、定数として使用することはできますか?
シャドウイング#
Cairo のシャドウイングは Rust と似ており、異なる変数が同じ変数名を使用する効果を実現できます。具体的な例を見てみましょう:
use debug::PrintTrait;
fn main() {
let mut x = 5_u32;
let x: felt252 = 10;
{
// 中括弧内の変数にのみ影響を与え、外側の括弧には影響を与えません
let x = x * 2;
'Inner scope x value is:'.print();
x.print()
}
'Outer scope x value is:'.print();
x.print();
}
上記の例では、let x: felt252 = 10;
で定義された x 変数は、前の行の x を完全に上書きします。これがシャドウイングという名前の由来です。次の特徴があります:
- let キーワードを使用して再定義します。
- 再定義では、以前の型とは関係なく、異なるデータ型を使用できます。
- シャドウイングは同じ名前空間内の変数にのみ影響します。
- 変数が不変であろうと可変であろうと、シャドウイングできます。
注意⚠️:シャドウイングを使用する際には、異なる名前空間で同じ変数名を使用することを避けるようにしてください。これにより、バグの特定が困難になる可能性があります。