DOBON.NET DOBON.NETプログラミング掲示板過去ログ

IIFってどうなの??

環境/言語:[VB.NET]
分類:[.NET]

VB6 の時はIIFは使わない方がいいということがいわれていましたが
VB.netの場合はどうでしょうか。
ykさん
> VB6 の時はIIFは使わない方がいいということがいわれていましたが
> VB.netの場合はどうでしょうか。

VB6のときどういう意味で使わない方がいいと言われましたでしょうか?
処理速度か何か?
  • 題名: Re[2]: IIFってどうなの??
  • 著者: 太郎冠者
  • 日時: 2009/02/12 23:31:19
  • ID: 23995
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2009/02/12(Thu) 23:32:51 編集(投稿者)

VB.NETのIIFってC#の三項演算子と違って、戻り値がObject型のただの関数なんですよね。
しかも条件が真だろうが偽だろうが、Trueパート・Falseパートの両方の式を評価しちゃうんですよね。

ぶっちゃけ要らないんじゃないでしょうか。
IIF使うぐらいならIf〜Else使います。

#と言いつつチンケなツール作る時とかに面倒臭くなって使っちゃったりはします^^
■No23992に返信(ykさんの記事)
> VB6 の時はIIFは使わない方がいいということがいわれていましたが
> VB.netの場合はどうでしょうか。

現在は、「If 演算子」が登場したため、
事実上、「IIf 関数」を使う必要は無くなっているかと。

http://msdn.microsoft.com/ja-jp/library/bb513985.aspx

>現在は、「If 演算子」が登場したため、
>事実上、「IIf 関数」を使う必要は無くなっているかと。

http://msdn.microsoft.com/ja-jp/library/bb513985.aspx

 なるほど、If演算子を使えばいいのですね!! ガッテンです。
■No23997に返信(ykさんの記事)
>
> >現在は、「If 演算子」が登場したため、
> >事実上、「IIf 関数」を使う必要は無くなっているかと。
>
> http://msdn.microsoft.com/ja-jp/library/bb513985.aspx
>
>  なるほど、If演算子を使えばいいのですね!! ガッテンです。
>
横やりで申し訳ありません。
ちなみにIIFの処理速度ですが普通のIF分の最大で200〜300倍と
言われておりました。(情報源は忘れましたが。。)
If演算子の速度も気になりますね。。。
計測しました
if..else
  156
if演算子
   78
iif
1015
if演算子ちょうど半分です。
ただし
a = a + 1
a += 1
は後者が速いが(if演算子よりも)、if演算子ではつかえないのでケースに寄ります。
iifは単純な代入で7倍程度でした。300倍にもなるiif文は少ないと思いますよ。

---------------------------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As Integer, a As Integer
Dim ti As Integer

Label1.Text = "計測中"
ti = System.Environment.TickCount
x = 20000000
Do Until x = 0
If x = 1 Then
a = 9
Else
a = 1
End If
x -= 1
Loop

ti = System.Environment.TickCount - ti
Label1.Text = ti & "所要時間"


End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim x As Integer, a As Integer
Dim ti As Integer

Label2.Text = "計測中"
ti = System.Environment.TickCount
x = 20000000
Do Until x = 0
a = If(x = 1, 9, 1)
x -= 1
Loop

ti = System.Environment.TickCount - ti
Label2.Text = ti & "所要時間"


End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim x As Integer, a As Integer
Dim ti As Integer

Label3.Text = "計測中"
ti = System.Environment.TickCount
x = 20000000
Do Until x = 0
a = IIf(x = 1, 9, 1)
x -= 1
Loop

ti = System.Environment.TickCount - ti
Label3.Text = ti & "所要時間"


End Sub
解決済み!
  • 題名: Re[5]: if演算子の速度測定
  • 著者: 三三No9
  • 日時: 2009/03/06 9:52:25
  • ID: 24147
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No24104に返信(ykさんの記事)
> 計測しました
> if..else
>   156
> if演算子
>    78
> iif
> 1015
> if演算子ちょうど半分です。
> ただし
> a = a + 1
> a += 1
> は後者が速いが(if演算子よりも)、if演算子ではつかえないのでケースに寄ります。
> iifは単純な代入で7倍程度でした。300倍にもなるiif文は少ないと思いますよ。
>
> ---------------------------------------------------------------------------------------
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> Dim x As Integer, a As Integer
> Dim ti As Integer
>
> Label1.Text = "計測中"
> ti = System.Environment.TickCount
> x = 20000000
> Do Until x = 0
> If x = 1 Then
> a = 9
> Else
> a = 1
> End If
> x -= 1
> Loop
>
> ti = System.Environment.TickCount - ti
> Label1.Text = ti & "所要時間"
>
>
> End Sub
>
> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> Dim x As Integer, a As Integer
> Dim ti As Integer
>
> Label2.Text = "計測中"
> ti = System.Environment.TickCount
> x = 20000000
> Do Until x = 0
> a = If(x = 1, 9, 1)
> x -= 1
> Loop
>
> ti = System.Environment.TickCount - ti
> Label2.Text = ti & "所要時間"
>
>
> End Sub
>
> Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
> Dim x As Integer, a As Integer
> Dim ti As Integer
>
> Label3.Text = "計測中"
> ti = System.Environment.TickCount
> x = 20000000
> Do Until x = 0
> a = IIf(x = 1, 9, 1)
> x -= 1
> Loop
>
> ti = System.Environment.TickCount - ti
> Label3.Text = ti & "所要時間"
>
>
> End Sub
>
計測有難う御座います。。。
200〜300倍というのは僕の方でも再現ができませんでした。。
ただ、総じてIIFはちょっと遅いですね。。

有難うございます

DOBON.NET | プログラミング道 | プログラミング掲示板