Sep 22, 2005
三項演算子の正しい書き方ってあるのだろうか
最近は、三項演算子を多用しているのだけれど、やっぱり人が使ってるのを見ると気持ち悪い。http://d.hatena.ne.jp/brazil/20050921/1127314004
Test.Builder.globalScope = typeof JSAN != 'undefined'
? JSAN.globalScope
: typeof window != 'undefined'
? window
: typeof _global != 'undefined'
? _global
: null;
これは解読するのにやたら時間がかかる気がする。コロンの後が値なのか条件なのかわからないからだ。
俺ならこう書く。
Test.Builder.globalScope = (typeof JSAN != 'undefined') ? JSAN.globalScope : (typeof window != 'undefined') ? window : (typeof _global != 'undefined') ? _global : null;
三項演算子を使うときは、条件はどんなに短くても必ずカッコで囲って、先頭に持ってくるようにしている。
条件をカッコで囲うだけでも、かなり読みやすくなる気がする。
このコードはこういう風に読み替えることができる。
if (typeof JSAN != 'undefined') { JSAN.globalScope }
else if (typeof window != 'undefined') { window }
else if (typeof _global != 'undefined') { _global }
else { null };
あるいはこういう風に。
switch(true){
case (typeof JSAN != 'undefined') : JSAN.globalScope
case (typeof window != 'undefined') : window
case (typeof _global != 'undefined') : _global
default : null ;
}
脳内補完されるコードと近いので、動作が想像しやすいんじゃないかと思う。
実際はif else使う場合はTest.Builder.globalScope = windowみたいに全部代入文にしないといけないしswitch文の場合はbreakも必要になるので、三項演算子を使ったほうが、はるかに短く書ける。
しかし、三項演算子でif elseを全部置き換えられるかというとそうでもなくて、returnとかcontinueとかbreakとか、値を返さない制御文の類を使うことはできない。
あと、イコールの後に改行はOKなんだけどreturnの後に改行するとJavaScriptはセミコロンが省略されてると見なしてうまくいかない。
Edit this entry...
wikieditish message: Ready to edit this entry.
A quick preview will be rendered here when you click "Preview" button.