条件演算子?:の処理は、ifステートメントで書くこともできます。それぞれどのように使い分けたらよいでしょうか。本稿では、処理の速さを比べてみます。
*なお、この記事の英語版はJActionScriptersに載せています。
The English version of this article is posted to JActionScripters.
条件演算子?:は、ふたつの式(オペランド)から条件に合った値を返します。したがって、値を選択して代入できます。ifステートメントと比べて処理の仕方が限定されている分、内部的に最適化されやすいと考えられます[*1]。
[条件演算子の例]myVariable = (condition) ? valueA : valueB;[ifステートメントの例]
if (condition) { myVariable = valueA; } else { myVariable = valueB; }
以下にwonderflのテスト用スクリプトを掲げました。実際の処理の速さは、オペーレーティングシステム(OS)やブラウザなどの環境によって差が出るようです。
Comparing if statement with ?: operator - wonderfl build flash online
ところが、条件演算子?:から返された値を、加算後代入演算子+=で代入しようとすると、明らかに処理が遅くなります[*2]。
myVariable += (condition) ? valueA : valueB;
このようなとき、加算する式をオペランドに加え、代入演算子=に置換えることで速められます。
myVariable = (condition) ? myVariable + valueA : myVariable + valueB;
しかし、ifステートメントを用いた方が、勝るようです。この場合は、加算後代入演算子+=を使っても問題ありません。
if (condition) { myVariable += valueA; } else { myVariable += valueB; }
Comparing if statement with ?: operator on addition - wonderfl build flash online
[*1] JavaScriptについて考察したblog記事Pa works very hard「if文と三項演算子」が参考になるでしょう。
[*2] blog記事ゆの from scratch「三項演算子が遅い?」は、バイトコードの違いを分析しています。
[改訂2011/02/11] 若干の加筆補正と参考ドキュメントのリンクを加えました。