【MacでRust入門】Rust日本語版チュートリアルの要点まとめ ~ 第7回 関数

2022-09-03
Main Image

目次

こんにちは。

最近流行りのRustを初めてみよう!ということでチュートリアルを読み始めました。

内容を忘れないように & チュートリアルがTL;DRな方向けにブログ記事に要点をまとめていこうと思います。

前回はRustの変数がとりうるデータ型についてまとめました。

今回は第7回です。Rustの関数について要点をまとめます。

Rustの関数

第2回からお馴染みのfn main(){}のような奴が関数です。

以下のような特徴があり、命名や呼び出し方はPythonと結構似てますね。

  • fnで宣言開始する
  • 命名は小文字スネークケース(単語区切り_)が通例
  • ()内に引数
  • {}内に実行するプログラム
  • 呼び出しは名前に()をつける
  • main関数はエントリーポイントになる(プログラムの最初に実行される)
  • 関数はソースコードのどこで定義されていても呼び出せる (mainより前でもOK)

Rustの関数の引数

()に引数を定義でき、実際の値を与えたときの値を実引数(argument)、そうでないものは仮引数(parameter)と言います。

Rustの関数宣言では、仮引数に型宣言が必須です。

複数の仮引数をもたせたい場合は,で区切ります。

Rustの関数の本体

Rustの関数の本体は文と式です。

  • 文とは、値を返さない命令のこと
    • たとえば、変数宣言して値の代入するコードのこと
    • 最後に;がつく
  • 式とは、値を返す命令のこと
    • たとえば、x + 1
    • 最後に;がつかない

この「文」で終わらせるか「式」で終わらせるかが、戻り値の有無に関わります。

戻り値のある関数

式で終わると戻り値がある関数になります。

fn five() -> i32 {
    5
}
  • ->で戻り値の型を宣言します

逆に、このように文で終わっていると関数に戻り値はありません。(文字を出力する動作はありますが。)

fn main() {
    let x = five();

    println!("The value of x is: {}", x);
}
  • five()という戻り値のある関数で変数を初期化しています

戻り値のある関数を作りたいところで、このように文;で終わらせるとコンパイルエラーになります。

fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1; // ここが式ではなく文になっていることに注目
}

エラーが出るのは戻り値がi32型であると宣言したにも関わらず、戻り値そのものがなく型不一致が起きているためです。ミスりそ〜。

まとめ

というわけで今回はRustの関数について要点をまとめました。

  • fn function_name(引数1:型,引数2:型)->戻り値の型 { 式 or 文 }で書く
  • 関数は呼び出し順に関わらず、プログラムのどこに書いてもいい
  • {}内を式で終わらせると戻り値あり、文;で終わらせると戻り値なし
  • 引数と戻り値には型注釈をつける

戻り値の有無と型注釈はコンパイルエラーを引き起こしやすそうですが、それだけRustは安全にコンパイルできるということかもです。

次回はRustの制御フロー、if式とループについてまとめます。

それでは〜

Rust オススメの参考書籍

▼ 入門者向け。Pythonとの比較あり。Kindleでも読める。

手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた

▼ 中級者向け。オライリーならではの詳解。硬派な方向け。

プログラミングRust 第2版

参考リンク

Rustチュートリアル (日本語版 非公式) https://doc.rust-jp.rs/book-ja/

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord