- PR -

If文の表記方法について

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-26 12:02
引用:

Blueさんの書き込み (2007-01-26 11:26) より:

If文で1発でかくとしたら、正規表現しかないですかねぇ。
OrElseでつなげて書くのに比べると、かなり速度的に劣りそう。

引用:

Blueさんの書き込み (2007-01-26 11:55) より:

4個程度ならSwitch関数あたりをつかってSelect文と同じようなことが出来るかな。


問題なのは、そうすることに何ら意味を見出せないことですよね。(パズルみたいなもの?)
パフォーマンスも落ちる上に、可読性も悪くなります... orz

# Java なら if だけで書くでしょうし、VB | C# なら Select Case | switch でしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-26 12:17
引用:

紅しょうがさんの書き込み (2007-01-26 11:18) より:

If文でも簡単な書き方があるんじゃないかーと思って投稿してみたんです。


そこだけならば、

コード:

    If Has (aaa, "01", "11", "21", "23") Then
        MessageBox.Show("aaa は、01, 11, 21, 23 のいずれか")
    End If


このように、別メソッドにしてしまうことも考えられます。
SQL 文の IN 句みたいな使い方ですね。

Has メソッドの種明かし。

コード:

    Public Shared Function Has(ByVal target As String, ParamArray ByVal values As String()) As Boolean
        For Each value As String In Values
            If target = value Then
                Return True
            End If
        Next

        Return False
    End Function


類似スレッド : SQL の IN のような… (forums.microsoft.com)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2007-01-26 12:27
If instr("01|11|21|23", aaa) > 0 Then

ただし、「aaaは2文字で、"|"を含まないこと」が保証されていないとダメです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-01-26 12:50
引用:

びしばしさんの書き込み (2007-01-26 12:27) より:
If instr("01|11|21|23", aaa) > 0 Then



これを出すなら正規表現もw
逆に意図がわかりづらくなってしまった。。。
System.Text.RegularExpressions.Regex.IsMatch(str, "^(01|02|03|04)$")
_________________
かるあ のメモスニペット
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-01-26 12:52
if (Array.Find(new string[] {"01","11","21","31"}, aaa) != null) {

とか。

あ、駄目か。
Predict<T> 定義してたらもっと長くなっちゃいますね。

lamda 式が使えるようになるまで我慢 (^^;



[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-01-26 13:05 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-01-26 13:42
引用:

渋木宏明(ひどり)さんの書き込み (2007-01-26 12:52) より:
if (Array.Find(new string[] {"01","11","21","31"}, aaa) != null) {

とか。

あ、駄目か。
Predict<T> 定義してたらもっと長くなっちゃいますね。


aaa.Equalsでいいような。
まあそもそもIndexOfでとかもあるでしょうけど…
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-01-26 13:43
回答者らはパズル要素で楽しんでいるだけなのはわかるので質問者だけに言う。

>質問者
可読性からしても。言うまでもなくSelect Caseが望ましい。
最適化の邪魔をしてどうする。常識的に考えて・・・
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2007-01-26 15:02
可読性をあげたいのであれば、別メソッドにした方が良いですね。

その条件のTrueの状態を表したメソッド名を作成して、
メソッド内で、If文を分解してあげます。

private function ○○な時(aaa as string) as boolean

If aaa = "01" Then
return True
End If

If aaa = "11" Then
return True
End If

If aaa = "21" Then
return True
End If

If aaa = "31" Then
return True
End If

return false
end function

http://d.hatena.ne.jp/NAL-6295/20061006/p4

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2007-01-26 19:34 ]

スキルアップ/キャリアアップ(JOB@IT)