{}これは評価可能な関数定義の最も単純なものです。「これは関数です」ということを示します。この関数には引数がないので、名前と丸括弧が続きます。その本文を表す波括弧が続きます。{}それでは、引数を取る場合はどうでしょうか。これが数値を表示する関数です。使う完全なプログラムです。宣言と非常によく似た動きをします。引数の名前にコロンに続けて型を追加します。これが2つの数値を足して結果を表示する完全なプログラムです。y);}関数を呼び出すときも、それを宣言したときと同様に、引数をコンマで区切ります。しなければなりません。y);}このエラーが発生します。{これはよく考えられた設計上の決断です。プログラムのすべての箇所で型推論をするという設計も可能ですが、一方で、そのように型推論を行なうHaskellのような言語でも、ドキュメント目的で型を明示するのはよい習慣だと言われています。私たちの意見は、関数の型を明示することは強制しつつ、関数本体では型を推論するようにすることが、すべての箇所で型推論をするのとまったく型推論をしないことの間のすばらしいスイートスポットである、というところで一致しています。戻り値についてはどうでしょうか。これが整数に1を加える関数です。1}Rustの関数は値を1つだけ返します。)を続けた「矢印」の後にその型を宣言します。関数の最後の行が何を返すのかを決定します。ここにセミコロンがないことに気が付くでしょう。それを追加すると、こうなります。1;}エラーが発生するでしょう。^これはRustについて2つの興味深いことを明らかにします。それが式ベースの言語であること、そしてセミコロンが他の「波括弧とセミコロン」ベースの言語でのセミコロンとは違っているということです。これら2つのことは関連します。式と文Rustは主として式ベースの言語です。文には2種類しかなく、その他の全ては式です。その違いは何でしょうか。式は値を返しますが、文は返しません。value」で終わった理由です。値を返さないからです。Rustには2種類の文があります。「宣言文」と「式文」です。その他の全ては式です。宣言文について話しましょう。いくつかの言語では、変数束縛を文としてだけではなく、式としても書けます。Rubyではこうなります。次の例はコンパイルエラーを起こします。式ではなく、文の先頭にしかなれませんよ、ということです。次のことに注意しましょう。)は、その値が特に役に立つものではありませんが、やはり式です。)が返されるものもあります。おらず、他のどんな値を返したとしても予想外の出来事になってしまうからです。これの目的は式を文に変換することです。実際にはRustの文法は文の後には他の文が続くことが期待されています。これはそれぞれの式を区切るためにセミコロンを使うということを意味します。これはRustが全ての行末にセミコロンを使うことを要求する他の言語のほとんどとよく似ていること、そして見られるRustのコードのほとんど全ての行末で、セミコロンが見られるということを意味します。「ほとんど」と言ったところの例外は何でしょうか。この例で既に見ています。Rustはこの挙動がおそらく求めているものではないということを理解するので、前に見たエラーの中で、セミコロンを削除することを提案するのです。早期リターンしかし、早期リターンについてはどうでしょうか。関数の最後の行で使っても動きますが、それはよろしくないスタイルだと考えられています。ない前の定義の方がちょっと変に見えるかもしれません。それは時間とともに直観的に感じられるようになります。発散する関数Rustには「発散する関数」、すなわち値を返さない関数のための特別な構文がいくつかあります。実行中の現在のスレッドを与えられたメッセージとともにクラッシュさせます。この関数はクラッシュを引き起こすので、決して値を返しません。」は「発散する(diverges)」と読みます。呼び出すメイン関数を追加してそれを実行するならば、次のようなものが出力されるでしょう。環境変数をセットすることでバックトレースが得られます。セットすればバックトレースが取得されなくなります。それ以外の全ての値では(環境変数はあるが値がない場合も含め)バックトレースがオンになります。コマンドでも使えます。<unknown>発散する関数は任意の型としても使えます。diverges();関数ポインタ関数を指す(ポイントする)変数束縛も作れます。返す関数へのポインタになります。使って関数を呼び出せます。