プログラミング言語において、式(expression)は値を返すコードの単位です。Moveでは、ほとんどすべてが式であり、唯一の例外は宣言であるlet
ステートメントです。このセクションでは、式の種類を取り上げ、スコープの概念を紹介します。
式はセミコロン
;
で区切られます。セミコロンの後に「式がない」場合、コンパイラは単位()
(空の式)を挿入します。
プリミティブ型のセクションで、Moveの基本的な型を紹介しました。そしてそれらを示すためにリテラルを使用しました。リテラルは、ソースコード内で固定値を表すための表記法です。リテラルは変数を初期化したり、関数に引数を渡すために使用されます。Moveには次のリテラルがあります:
true
と false
はブール値用0
, 1
, 123123
などの数字は整数値用0x0
, 0x1
, 0x123
などの16進数は整数値用b"bytes_vector"
はバイトベクトル値用x"0A"
はバイト値用のHEXリテラルlet b = true; // trueはリテラルです
let n = 1000; // 1000はリテラルです
let h = 0x0A; // 0x0Aはリテラルです
let v = b"hello"; // b'hello'はバイトベクトルリテラルです
let x = x"0A"; // x'0A'はバイトベクトルリテラルです
let c = vector[1, 2, 3]; // vector[]はベクトルリテラルです
算術、論理、ビット単位の演算子は、値に対して操作を行うために使用されます。操作の結果は値であるため、演算子も式です。
let sum = 1 + 2; // 1 + 2は式です
let sum = (1 + 2); // 括弧を使用した同じ式
let is_true = true && false; // true && falseは式です
let is_true = (true && false); // 括弧を使用した同じ式
ブロックは、ステートメントと式のシーケンスであり、ブロックの最後の式の値を返します。ブロックは波括弧 {}
のペアで書かれ、式であるため、式が期待されるどこでも使用できます。
// 空の式を含むブロックですが、コンパイラは
// 自動的に空の式 `()` を挿入します:`let none = { () }`
// let none = {};
// letステートメントと式を含むブロック。
let sum = {
let a = 1;
let b = 2;
a + b // ブロックの値は最後の式です
};
// ブロックは式なので、式の中で使用できますし、
// 変数に割り当てる必要はありません。
{
let a = 1;
let b = 2;
a + b; // 返されません - セミコロン。
// コンパイラが自動的に空の式 `()` を挿入します
};
関数については関数 セクションで詳しく説明します。しかし、すでに前のセクションで関数呼び出しを使用しているため、ここでそれについて触れます。関数呼び出しは関数を呼び出す式であり、関数本体の最後の式の値を返します。
fun add(a: u8, b: u8): u8 {
a + b
}
#[test]
fun some_other() {
let sum = add(1, 2); // add(1, 2)はu8型の式です
}