はじめに
本記事は以下のツイートの翻訳転載です。
三項演算子
Goは、a > b ? a : bのような組み込みの三項演算子をサポートしていません。
しかし、Go 1.18からはジェネリックスを使って同じような機能の関数を実装できます。
おわりに
Goを書いていて三項演算子が欲しい場面は多々あるが、
- 三項演算子を使いたいケースは全て
if
で代用可能 - 三項演算子がネストされる場合、可読性がかなり落ちる
ため、Goで採用されていないのも納得できる。
The reason is a simple design choice. The operator although once understood, is an easy one is in fact a complicated construct for someone who is new to code. The Go programming language chose the simple approach of if-else. This is a longer version of the operator, but it is more readable.
それも含めて、
Ter(true, 1, 2)
だと何をしているのかTer
の実装を見るまで(個人的には)本当にわからないので、
三項演算子の代替実装を導入するにしても関数名については要検討かと思う。
(三項演算子イコールTernary Operator
だと言うことに慣れていれば違和感ないのか?ちょっとわからない)
Go1.21でcmp
パッケージが導入され、以下のようにデフォルト値を使用するために三項演算子を使用したい場合、cmp.Or
で代用することができるので、
それで足りるならcmp.Or
を使用するのがいいと思う。
const foo = bar ? bar : "baz";
foo := cmp.Or(bar, "baz")