質問: 3; int add(int x, int y) { return x + y; } ``` しかしながら、TypeScript, Rust, Goなどのモダンな言語では後置を採用していることが多いです。 これだけ揃っていると偶然とは思い難く、何かしらのメリットがあるのだろうと想像します。 一体どんなメリットがあるのか、ご存知でしたらご教示頂けたら幸いです。 ``` function add(left: number, right: number): number { return left + right; } ``` ``` type Circle struct { radius float64 } ``` ``` fn factorial(i: u64) -> u64 { (1..=i).product() } ``` よろしくお願い致します。
回答: これらの言語では型が省略可能だからではないでしょうか。 私はTypeScriptやGoはよく知らないので間違っているかもしれませんが、TypeScriptでは関数の引数の型注釈を省略して以下のように書けたと思います。 ``` function add(left, right) { .. } ``` Rustは関数の引数と戻り値については型を省略できない仕様になっていますが、クロージャなら省略可能です。 ``` // クロージャで型を省略した場合 let factorial = |i| (1..=i).product(); // クロージャで型を明示した場合 let factorial = |i: u64| -> u64 { (1..=i).product() }; ``` また変数を導入する`let`文でも上の`factorial`変数のように通常は型注釈は省略されます。しかし明示もできます。 ``` // factorial変数の型を明示 let factorial: fn(u64) -> u64 = |i| (1..=i).product(); ``` 型注釈が省略できる言語では、後置にすれば、省略してもしなくても引数名や変数名の位置は同じになります。文法に統一感が出るので人間にとって読みやすくなりますし、言語処理系にとっても構文解析がしやすくなるというメリットがあると思います。