[AS3] 条件演算子?:はいつ使うとよいか [Edit]

条件演算子?:の処理は、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] 若干の加筆補正と参考ドキュメントのリンクを加えました。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事