6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シンプルな条件分岐であればifを使える

真偽値に応じて処理を分岐させたい場合はifを使用します。TypeScriptと違い、条件は()で囲みません。
他の言語と同様にelseも使用できます。

fn main() {
    let number = 7;

    if number < 10 {
        println!("Number is less than 10");
    } else {
        println!("Number is 10 or greater");
    }
}

ifブロックは値を返すことができる

ifブロックは値を返すことができるので、いわゆる三項演算子(TypeScriptでいうconst a = b ? c + d;のようなもの)は不要です。

fn main() {
    let condition = true;
    let number = if condition { 5 } else { 10 };

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

ifブロックの最後の式で値を返すことができるのは新鮮で、単純に便利だと思いました。三項演算子より直感的ですよね。

const condition = true;
const number = condition ? 5 : 10;
console.log(`The value of number is: ${number}`);

ある値に対してパターンマッチングしたい場合はmatchを使う

いわゆる、TypeScriptでいうswitch文に相当しますが、よくあるswitch文とは若干記法が異なります(明示的なbreakが不要)。
複数の値を一つのパターンにまとめる場合は|で繋げます。評価対象が数値で、パターンとして範囲を指定したい場合はRange構造体を使います。シンプルなやり方は..を使う方法です。p..qと書くと、p以上q未満を表現するRangeを作成できます。
どれにも当てはまらない場合は_で受け取ります。

fn main() {
    let number = 5;

    match number {
        1 => println!("One"),
        2 | 3 | 5 => println!("Prime number"),
        4..=10 => println!("Number is between 4 and 10"),
        _ => println!("Other number"),
    }
}

TypeScriptのswitch文はcase:とセットで使い、インデントで処理を分けるので、Rustのmatchの記述量の少なさに驚きます。
上記の例と同等のTypeScriptのコードは以下のようになります。

const number = 5;

switch (number) {
    case 1:
        console.log("One");
        break;
    case 2:
    case 3:
    case 5:
        console.log("Prime number");
        break;
    case 4:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
        console.log("Number is between 4 and 10");
        break;
    default:
        console.log("Other number");
}
``

ifと同様、matchも値を返すことができます。

fn main() {
    let number = 3;
    let message = match number {
        1 => "One",
        2 | 3 | 5 => "Prime number",
        4..=10 => "Number is between 4 and 10",
        _ => "Other number",
    };

    println!("{}", message);
}

matchは後日解説するEnumOptionを組み合わせることで強力な処理フローを実現します。

注意点として、Rustのmatch包括的(公式ドキュメントより)です。すなわち、比較対象がEnumのように有限個の値を取る場合、そのすべてを拾えるようなパターンマッチングでなければコンパイラはエラーを出力します。もし特定のパターンだけ処理を実行し、それ以外は無視したい場合は、前述のように_を利用しましょう。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?