IIfって知ってると便利。でも…
If と IIf ってどっちが速いのか前から気になっていたので、ちと調べてみましょう。
調べ方は簡単。それぞれ、結果が同じになる処理をそれぞれループで回し、ループ開始時間と終了時間の差を求めれば良い。その差の取得には、GetTickCount API 関数を使用する。コード的にはこんな感じ(差の取得方法は面倒なので載せない)。
'Ifの場合
'IIfの場合
10000という所は1000、5000、10000、15000 … 50000と変え、それぞれの速さを求めたらそれは以下の通りだった。
意外であった、実際。IIfってとてもとても遅い。とは言っても、大規模なループ処理でがっつり使うようなことをしなければ大丈夫かと。ループ処理でないコードで数回くらい使ったとしても、If との差はどうせナノ秒単位なので気にしない、気にしない。こんな便利なもの使わない手はない、1行でまとまるので見た目もスマートになるし。私はこれからもこの素晴らしい IIf をどんどん使うことでしょう。あしからず。 そう言えば、C言語でも IIf のようなものがある。(ret = 0 ? 1 : 0) てな感じのやつ。3項演算子と呼ばれているようであるが、これも同じ事が言えるのかな?ちょっと素朴な疑問が浮かんでしまった私であった。 |