Prompt

けっこうどうでもいい話だけど、Rustのソースコード内にcondition?true:falseの三項演算子を書いたら名指しで”Rustにそれはありません”ってコンパイラに言われてちょっとおもしろかったんだよね。

あはは、それ最高だね!Rustのコンパイラ(rustc)って、単に「エラーだ!」って突き放すんじゃなくて、**「君がやりたいのはこれだろ?でもRustではこう書くんだぜ」**って親切に教えてくれる、お節介焼きな先輩みたいなところがあるよね(笑)。

情報工学徒の君なら、なぜRustが三項演算子(?:)を不採用にして、あえてコンパイラにそのエラーメッセージを仕込んだのか、その**「言語デザインの哲学」**を考察するとさらに面白くなるはずだぜ!


1. 「すべてが式(Expression)」であるという美学

多くの言語(JavaやC#、C++)では、if「文(Statement)」 だから値を返せない。だからこそ、値を返すための専用ツールとして condition ? a : b という三項演算子が必要だったんだ。

でも Rust では、**if 自体が「式」**なんだよね。

Rust

// これがそのまま三項演算子の代わりになる!
let result = if condition { true } else { false };

「同じことができる構文が2つあるのは無駄だし、読みにくくなる」という、Rustの**直交性(Orthogonality)**へのこだわりが三項演算子をクビにした理由なんだ。


2. 名指しで怒られる理由:親切心の塊

コンパイラが「三項演算子はありません」と名指しで言ってくるのは、Rustのエラーメッセージの設計指針が「ユーザーの意図を汲み取る」ことにあるからなんだ。

開発チームは、「他の言語から来た人は絶対にこれを書くだろう」と予測して、専用のエラーハンドラを書いているんだよ。情報工学的にも、こういう**「ヒューマンエラーを想定したツールデザイン」**は、UX(開発体験)を爆速にする素晴らしい設計だよね。


3. 💡 見落とされがちな視点:ブロックの力

Rustの if 式が三項演算子より優れているのは、**「ブロックを書ける」**点にあるんだ。

Rust

let result = if condition {
    println!("成功ルート!");
    do_something();
    10 // 最後の行が戻り値になる
} else {
    0
};

三項演算子でこれをやろうとすると、カンマ演算子を駆使したりして一気に可読性が死ぬけど、Rustの if 式なら「ロジックを書きつつ値を返す」のが自然にできる。これは一度慣れると戻れない快感だぜ!


🏁 まとめ

  • 三項演算子がない理由: if 式で代用できるから(構文のシンプル化)。

  • エラーメッセージ: 他言語ユーザーの挫折を防ぐための、Rust開発チームの「愛」。

  • 哲学: 「同じことをするやり方は一つの方がいい」というミニマリズム。

コンパイラに「お前、三項演算子使おうとしただろ?」って見抜かれる瞬間、なんだかコンパイラと対話してるみたいで楽しくなるよね。

次は、他にもある「Rustコンパイラの神対応(スペルミス修正や所有権の提案)」をわざと引き出して遊んでみる?それとも、この if 式を活用したもっと変態的な(?)記法を攻めてみる?😊✨

Would you like to see more examples of “human-friendly” error messages that the Rust compiler provides?