C言語などとほぼ同じだが、式を返せるのが大きな違いか。(三項演算子も兼ねる)
成果物
コード
fn main() { if true { println!("if");} if false { println!("if");} else { println!("else");} if false { println!("if");} else if true { println!("else if 1");} else if true { println!("else if 2");} else if true { println!("else if 3");} else { println!("else");} // if 1 { println!("if 1");} // error[E0308]: mismatched types let v = if true { 5 } else { 6 }; println!("v = {}", v); // let v = if true { 5 } else { "six" }; // error[E0308]: if and else have incompatible types }
三項演算子
let v = if true { 5 } else { 6 };
if式+式は三項演算子とおなじ機能。表記もif式とおなじので読みやすい。Rustは関数の終わりに式を指定することで値を返せる、というルールがあるのでわかりやすい。
それにひきかえ、C言語やPythonの三項演算子は統一されていないので読みにくい。でも、こっちのほうが少しだけ短く書ける。
実行
$ rustc main.rs $ ./main if else else if 1 v = 5
エラー
条件式に整数値を用いる
条件はboolでないとダメ。C言語のように整数値(0=false, 他=true)は使えない。
fn main() { if 1 { println!("if 1");} // error[E0308]: mismatched types }
error[E0308]: mismatched types --> main.rs:12:8 | 12 | if 1 { println!("if 1");} | ^ expected bool, found integer | = note: expected type `bool` found type `{integer}` error: aborting due to previous error For more information about this error, try `rustc --explain E0308`.
let
でif
を使うとき、型が統一されていない
型はif
, else
, else if
で同じでないとダメ。Rustの変数は必ずある特定の型でなければならない。(静的型付け)
fn main() { let v = if true { 5 } else { "six" }; // error[E0308]: if and else have incompatible types }
error[E0308]: if and else have incompatible types --> main.rs:19:34 | 19 | let v = if true { 5 } else { "six" }; | - ^^^^^ expected integer, found &str | | | expected because of this | = note: expected type `{integer}` found type `&str` error: aborting due to previous error For more information about this error, try `rustc --explain E0308`.
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
$ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
前回まで
- Rustを学んでみたい(プログラミング言語)
- Rustの環境構築
- RustでHelloWorld
- Rustの和訳ドキュメント
- Cargoでプロジェクト作成・ビルド・実行
- クレートとは?
- Rustで関数を使ってみる
- Rustでモジュールを使ってみる
- Rustで乱数を生成する(rand)
- Rustで標準入力する(std::io::stdin().read_line())
- RustでMatch判定する(match)
- Rustでprintとread_lineを1行にする方法
- Rustで数当てゲーム
- クレート名にドット.が使えない
- Rustの変数と可変性(let, mut) error[E0384]: cannot assign twice to immutable variable
x
- Rustのimmutable束縛とconst定数の違い
- RustのREPL、evcxrのインストールに失敗した
- Rustでコンパイルするときの変数未使用warningを消す
- Rustの変数(再代入、再宣言(シャドーイング))
- Rustのシャドーイングについて
- イミュータブルについて(副作用)
- Rustの定数(const)
- Rustのデータ型(数値)
- Rustのデータ型(論理)
- Rustのデータ型(文字)
- Rustのデータ型(タプル)
- Rustのデータ型(配列)
- Rustの関数