三項演算子の正しい書き方ってあるのだろうか

最近は、三項演算子を多用しているのだけれど、やっぱり人が使ってるのを見ると気持ち悪い。

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はセミコロンが省略されてると見なしてうまくいかない。


WriteBacks

JavaScriptの演算子(2)

  今回は、前回の記事「JavaScriptの演算子」の続きです。
今回はプログラム初心者の方には理解しにくい部分が多く、きっと一度読んだだけでは理解できないと思うので、何回か読んでいただくか、もっと進んでいけばだんだんわかってくると思うので、なんとなくでも頭に入れておいてください。
それでは、JavaScriptの演算子を一つ一つみていきましょう。
  1. ビット演算子
ビット単位での処理を行う演算子です。
早速わからない言葉が出てきましたね。
ここであれこれ説明するよりも、直接例を見ていただいたほうが理解しやすいと思うので、いくつか例を書きます。

Posted by ネットビジネス用CGI Perl HTML Javascriptの情報サイト at 2006/03/22 (Wed) 08:06:38

annuncio lavoro

Blog Records:le tireur isol辿 de psg1 airsoft fusillentComments...

Posted by annuncio lavoro at 2006/11/27 (Mon) 19:43:12

annuncio lavoro

Blog Records:le tireur isol辿 de psg1 airsoft fusillentComments...

Posted by annuncio lavoro at 2006/11/27 (Mon) 19:43:19

[Ruby]RubyでFizzBuzzかけたよ!+いろいろ考えてみた

404 Blog Not Found:やる気ってどこでやる気? 経由で見つけた↓の記事。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

Posted by バイオ研究者見習い生活 with IT at 2008/03/15 (Sat) 18:30:21

Posted by ピュアアイ at 2010/05/19 (Wed) 18:11:56

Posted by ピュアアイ at 2010/05/19 (Wed) 18:12:08

Posted by ピュアアイ at 2010/05/19 (Wed) 18:12:14

Posted by ピュアアイ at 2010/05/19 (Wed) 18:12:20

Posted by ピュアアイ at 2010/05/19 (Wed) 18:12:26

Posted by ピュアアイ at 2010/05/19 (Wed) 18:12:34

Posted by ピュアアイ at 2010/05/19 (Wed) 18:13:53

Posted by ピュアアイ at 2010/05/19 (Wed) 18:13:59

Posted by ピュアアイ at 2010/05/19 (Wed) 18:14:18

Posted by ピュアアイ at 2010/05/19 (Wed) 18:21:23

Posted by ピュアアイ at 2010/05/19 (Wed) 18:22:04

Posted by ピュアアイ at 2010/05/19 (Wed) 18:22:52

Posted by ピュアアイ at 2010/05/19 (Wed) 18:22:59

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:09

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:17

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:23

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:29

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:36

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:42

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:47

Posted by ピュアアイ at 2010/05/19 (Wed) 18:23:54

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:02

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:08

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:17

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:23

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:29

Posted by ピュアアイ at 2010/05/19 (Wed) 18:24:35

Posted by ピュアアイ at 2010/05/19 (Wed) 18:25:37

Posted by ピュアアイ at 2010/05/19 (Wed) 18:25:43

Posted by ピュアアイ at 2010/05/19 (Wed) 18:25:48

Posted by ピュアアイ at 2010/05/19 (Wed) 18:25:54

Posted by ピュアアイ at 2010/05/19 (Wed) 18:25:59

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:05

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:11

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:16

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:21

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:26

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:32

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:39

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:45

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:51

Posted by ピュアアイ at 2010/05/19 (Wed) 18:26:57

Posted by ピュアアイ at 2010/05/19 (Wed) 18:27:02

Posted by ピュアアイ at 2010/05/19 (Wed) 18:27:10

Posted by ピュアアイ at 2010/05/19 (Wed) 18:27:17

Posted by ピュアアイ at 2010/05/19 (Wed) 18:27:22

Posted by ピュアアイ at 2010/05/19 (Wed) 18:27:27
TrackBack ping me at
http://la.ma.la/blog/diary_200509220220.trackback
Post a comment

writeback message: Ready to post a comment.







spam yoke. nanimo ireruna.