三項演算子って嫌われる風潮がありませんか?
なんか特に理由もなく三項演算子は醜い、読みづらい→悪!的な・・・
個人的には使いどころ次第だと思うんですよね。
三項演算子NG!と言ってる人はたぶんこういうのを気にしてるんですよね
確かに三項演算子はつなげたら読みにくいので、良くないと思います。
でも繋げないときはむしろいいことのほうが多いので、個人的には(繋げないという条件付きで)三項演算子は使うのを推奨します。
例えば、初期化するときに
だって、最初のは一度10を入れてるけど、条件によっては20がその後で代入されてて、それって初期化なの?初期化って最初に入れる値が一意に定まってるべきじゃない?って感じですし、2つ目のは初期化するのに5行も使うの????って感じじゃないですか。
まだ、上のは一つしかないから耐えられるかもしれないですけど、2つ以上初期化したかったらどうするんですか?
そう考えると、三項演算子で
あと最近みたんですが、こういうのも良くないと思うので書き直すべきです。
これはただ短くなるからという話ではありません。
functionAは共通して適用したい操作なのにもかかわらず、条件分岐されて、二箇所に書かれているというところがポイントです。
つまり、conditionで分かれているのは引数だけなのに、functionAを適用するという操作まで、条件に入ってしまっているところが問題です。
共通だからくくりだすとはよく言われることなんですが、そもそも、何が条件によって分かれているの?っていうのを考えたらfunctionAは一箇所にしか現れないはずなんですよね。
まぁ、これは三項演算子とは少し違う話ですが。
とりあえず、このブログは三項演算子は結構いけてると思っています
なんか特に理由もなく三項演算子は醜い、読みづらい→悪!的な・・・
個人的には使いどころ次第だと思うんですよね。
三項演算子NG!と言ってる人はたぶんこういうのを気にしてるんですよね
int number = (high > low) ? highNumber : (middle > low) ? middleNumber : lowNumber;三項演算子がひたすらつながっているようなもの
確かに三項演算子はつなげたら読みにくいので、良くないと思います。
でも繋げないときはむしろいいことのほうが多いので、個人的には(繋げないという条件付きで)三項演算子は使うのを推奨します。
例えば、初期化するときに
int number = 10; if (condition) { number = 20; }や
int number; if (condition) { number = 20; } else { number = 10; }より
int number = (condition) ? 20 : 10;のほうが良いと思いませんか?
だって、最初のは一度10を入れてるけど、条件によっては20がその後で代入されてて、それって初期化なの?初期化って最初に入れる値が一意に定まってるべきじゃない?って感じですし、2つ目のは初期化するのに5行も使うの????って感じじゃないですか。
まだ、上のは一つしかないから耐えられるかもしれないですけど、2つ以上初期化したかったらどうするんですか?
int number = 10; if (condition) { number = 20; } int number2 = 20; if (condition2) { number2 = 30; } int number3 = 30; if (condition3) { number3 = 40; } ...みたいに書くんですか???初期化に10行も20行も費やして良いんですか???number5を見る頃にはnumberがいくつに初期化されてるかなんて忘れてます…
そう考えると、三項演算子で
int number = (condition) ? 20 : 10; int number2 = (condition2) ? 30 : 20; int number3 = (condition3) ? 40 : 30;の方が絶対いいですよね。初期化の行数も変数の数分だし。
あと最近みたんですが、こういうのも良くないと思うので書き直すべきです。
if (condition) { functionA(argument1) } else { functionA(argument2) } ...を、
functionA((condition) ? argument1 : argument2) ...のように。
これはただ短くなるからという話ではありません。
functionAは共通して適用したい操作なのにもかかわらず、条件分岐されて、二箇所に書かれているというところがポイントです。
つまり、conditionで分かれているのは引数だけなのに、functionAを適用するという操作まで、条件に入ってしまっているところが問題です。
共通だからくくりだすとはよく言われることなんですが、そもそも、何が条件によって分かれているの?っていうのを考えたらfunctionAは一箇所にしか現れないはずなんですよね。
まぁ、これは三項演算子とは少し違う話ですが。
とりあえず、このブログは三項演算子は結構いけてると思っています
コメント