̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2013/ 6/24 通巻625号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   条件演算子(三項演算子)は使うな - リーダブル・コード(4) 条件演算子(三項演算子)とは、プログラミング言語 C 言語において、 ? と : の2つの演算子を使って、 ReturnValue = Condition ? TrueCaseValue : FalseCaseValue のように並べる演算子です。これは、 if ( Condition ) {   ReturnValue = TrueCaseValue; } else {   ReturnValue = FalseCaseValue; } と同じです。 条件演算子を使えば、ReturnValue = を2回書かなくても 済むので「便利な」演算子ですね。 ちなみに、Python スクリプトでは、if と else を使って、 ReturnValue = TrueCaseValue if Condition else FalseCaseValue のように並べます。 この仕様を、Pyhon では「条件式」と呼んでいます。 Condition が条件式なのに、右辺全体も条件式だなんてややこしいですね。 また、Condition と TrueCaseValue の順番が異なることに注意して ください。 いくら、演算子ではなく if else を使って多少読める ようにしても、まぎらわしいですね。 ちなみに、Python 2.5 で初めて 条件式の仕様が入りました。 読みやすさを犠牲にしても、このような機能が どうしても欲しいという人がいるようです。 また、Visual Basic では、 別の書き方になります。 詳しくは、Wikipedia などを参照してください。 条件演算子は、「便利な」面もあれば、「デメリット」もあります。 それは、条件演算子を使うと短くなるから便利である一方で、(使用頻度が 少ない)条件演算子の仕様を知らない人もいる(読めないコードになってしまう) という欠点があります。 略語と同じ性質ですね。 また、記号に固有の機能を持たせると、グーグル先生でさえ検索することが できなくなります。 たとえば、「C言語 ?:」で検索すると、?:は無視 されます。 「Python if」で検索すると、一般的な条件分岐ばかりが ヒットしてしまいます。 これは読みにくいというより読めない状態です。 if ( Condition ) { r = TrueCaseValue; } else { r = FalseCaseValue; } ReturnValue = r; のようにすれば、だれでも読めて、短くすることができます。 r を経由することになっても、コンパイラーの最適化があるので、 実行速度は遅くなりません。 そのような工夫をするよりも、そのまま書いた方が、代入文がそろうので、 最も分かりやすいですね。 if ( Condition ) {   ReturnValue = TrueCaseValue; } else {   ReturnValue = FalseCaseValue; } 条件演算子が連続して使うケースでは、表形式になるので、条件演算子の 方が読みやすいと思いますが、そのときは、下記のようにコメントを添えて おくと、読みやすいコードになります。 また、C言語では if 文の条件式が ( ) で囲まれていることから、第1項を ( ) で囲むことで、第1項が 条件式であることが推測できます。 また、第2項と第3項にも第1項と 同じように ( ) を付けることで、条件演算子の第1項と対応する何かで あることが、推測できるようになり、三項演算子であることを思い出す ヒントになります。 /* ( Condition ) ? ( TrueCaseValue ) : ( FalseCaseValue ) */ r1 = ( a1 > 0 ) ? ( b1 ) : ( c1 ); r2 = ( a2 > 0 ) ? ( b2 ) : ( c2 ); r3 = ( a3 > 0 ) ? ( b3 ) : ( c3 ); なお、リーダブルコードの本では、「基本的には if/else を遣おう。 三項演算子はそれによって簡潔になるときにだけ使おう」としています。 あくまで、? : の意味は知ってて当然という立場のようです。 参考: リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック オライリージャパン ISBN-13: 978-4873115658 7.3章           注目ニュース 一覧 ◇ 米情報機関、令状なしに米国人の国内通話を傍受か。PRISMの告発者が暴露。 http://japan.cnet.com/news/society/35033518/ … 体制の問題。民間でもクラウドのデータはアクセス制限をかけている。 ◇ スパコン TOP500、中国の 天河2号が首位に。Titan は2位に転落。 http://japan.cnet.com/news/service/35033514/ http://gigazine.net/news/20130618-fastest-supercomputers/ … 電気を大量に消費する。 ただし、日本の「京」も大量に消費する。 ◇ サムスン、PCIeベースの高速SSDを量産開始。 http://japan.cnet.com/news/service/35033522/ … SATA規格に対抗。 ◇ MS、iPhone用 Office Mobile を無償配信開始! http://ascii.jp/elem/000/000/799/799538/ … Office 365利用者限定。しかも、アップルに手数料が入らない。 ◇ Microsoft、TypeScript 0.9 をリリース。発表以来最大のアップデート。 http://www.forest.impress.co.jp/docs/news/20130619_604375.html … Dart との互換も考えてほしい。 ◇ Google、プログラミング言語 Dart 初めてのベータ版をリリース。 http://www.forest.impress.co.jp/docs/news/20130620_604504.html … TypeScript 0.9 の翌日にリリース。 TypeScript との互換も考えてほしい。 ◇ 話題の非破壊型スキャナ、ScanSnap SV600に触れた。 http://ebook.itmedia.co.jp/ebook/articles/1306/14/news111.html … 裁断機が不要。 というより著作者に還元されない古本屋への供給が増える。 ◇ ケンウッドの2DINカーナビ、彩速ナビの内部アーキテクチャについて聞く http://car.watch.impress.co.jp/docs/news/20130614_600526.html … カーナビにも Android OS。        ソフトウェアデザイン館 Sage Plaisir 21  ホームページ  >>> http://www.sage-p.com/  メルマガ    >>> http://www.mag2.com/m/0000083983.html  ブログ     >>> http://blog.livedoor.jp/sage_p/  ツイッター   >>> http://twitter.com/Ts_Neko  ダウンロード  >>> http://www.sage-p.com/freesoft.htm  サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi  東日本大震災  >>> http://www.sage-p.com/saigai.html  メール   >>> ts-neko◇sage-p.com ←◇を@に変えてください           緊急メールは件名に「うどんメール」を付けてください。    このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm