- PR -

C#の?演算子 VB.NETでは

1
投稿者投稿内容
Ts-Factory
常連さん
会議室デビュー日: 2006/08/08
投稿数: 42
投稿日時: 2007-09-23 00:43
SQL2005 + VB.NET2005で開発を行っております。

ストアドのFILLにNULLを渡す方法を調べており
こちらの掲示板で
command.Parameters.Add("@param", param != null ? DateTime.Parse(param) : System.Data.SqlTypes.SqlDateTime.Null);
を見つけました。

これと同じことをVB.NETで行いたいのですが
C#の構文がわからず苦戦しております。

たぶんVB.NETではIIFだろうと思うのですが、
VB.NETではどのようなコーディングになるのでしょうか?

またIIFを使用すると場合、Microsoft.VisualBasicを使用することになると思うのですが
できれば使用したくないので
使用しない場合のコーディングをご伝授願えればと思います。

よろしくお願いいたします。


otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2007-09-23 01:28
Moduleを作成して

Public Function IIf(Of T)(ByVal expression As Boolean, ByVal truePart As T, ByVal falsePart As T) As T
If expression Then
Return truePart
Else
Return falsePart
End If
End Function

ってメソッドを作っておくっていうのはどうですか?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-09-23 03:34
引用:

otfさんの書き込み (2007-09-23 01:28) より:
Moduleを作成して

Public Function IIf(Of T)(ByVal expression As Boolean, ByVal truePart As T, ByVal falsePart As T) As T
If expression Then
Return truePart
Else
Return falsePart
End If
End Function

ってメソッドを作っておくっていうのはどうですか?


残念ながらそれでは駄目ですね。
VBのIIfでも駄目です。
Ifでやるしかありません、多分。
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2007-09-23 12:38
>なちゃ さん
すいません。
仰る通り間違いでした。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2007-09-24 09:24
えと、掲題の記述は三項演算子というものです。
(expression1)?(expression2):(expression3)
という形で、expression1の内容が真であればexpression2の値を返し、
偽ならばexpression3の値を返します。
C#特有のものではなく、Cから派生した多くの言語でサポートされてます。
C,C++,C#,JavaScript,PHPとか。
入れ子にすることもできますが、さすがに可読性が下がってしまうので
まああんまりやらないかなあ。

お悩みの部分:
param != null ? DateTime.Parse(param) : System.Data.SqlTypes.SqlDateTime.Null

paramがnullじゃないならDateTime.Parse(param)を、
nullならSystem.Data.SqlTypes.SqlDateTime.Nullを返してるだけです。
C#の書き方よく知りませんが、

if(param != null)
{
   command.Parameters.Add("@param", DateTime.Parse(param));
}
else
{
   command.Parameters.Add("@param", System.Data.SqlTypes.SqlDateTime.Null);
}

ってのと変わんないと思います。
あるいは@param用の変数を宣言して上のような条件分岐で値を代入するかですね。
VBって三項演算子使えるかどうか私は知らないのですが、上のような条件分岐に
してしまえば解決するんじゃないでしょうか。
別に無理に一行にしなくても。

三項演算子は1行にすっきりまとまるので、開発者によっては多用します。
が、可読性が下がるという意見もあり、コーディング規約で禁止されていたり
使った方がいいVS使っちゃいけないの論争に発展することがあります。
私は好きなんでよく使いますが。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-09-25 09:46
引用:

Ts-Factoryさんの書き込み (2007-09-23 00:43) より:

たぶんVB.NETではIIFだろうと思うのですが、
VB.NETではどのようなコーディングになるのでしょうか?


VB の IIF は 両方の式を評価してしまうのでダメですね。

引用:

またIIFを使用すると場合、Microsoft.VisualBasicを使用することになると思うのですが
できれば使用したくないので
使用しない場合のコーディングをご伝授願えればと思います。


VB を使っておいて Microsoft.VisualBasic 名前空間を使いたくないというのも変な話ですね。
VB9 からは 三項演算子のような新しい If が登場するのですが、VB8 にはそういったステートメントがないので If で条件分岐させる必要があります。

_________________
かるあ のメモ
http://karua.at.webry.info/

[ メッセージ編集済み 編集者: かるあ 編集日時 2007-09-25 09:46 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2007-09-25 20:15
引用:

command.Parameters.Add("@param", param != null ? DateTime.Parse(param) : System.Data.SqlTypes.SqlDateTime.Null);

これと同じことをVB.NETで行いたいのですが



とのこと、
つまり、3項演算子を使いたいのではなく、
 Parameters.Addをすっきり書きたい
または、
 データ修正の呼び出しをすっきり書きたい
ということですよね。

ということでしたら、このメソッドを呼び出すためのメソッドか、
クラスか、インナークラスを書く、というのも手段の一つです。

提供されたクラスを素のまま使うと、どうしても読みにくくなる
ことがあります。そうなっているとき、たいてい、要件の意図が
読み取りづらくなっています。

より意図通りにかけるように、クラスやメソッドの呼び出し方法
などを書き換えることができるのも、最近の言語のよいところな
のですから、活用しないてはないと思いますよ。

_________________
たつごろー
codeseek
こみゅぷらす
Ts-Factory
常連さん
会議室デビュー日: 2006/08/08
投稿数: 42
投稿日時: 2007-09-28 18:26
[/quote]

とのこと、
つまり、3項演算子を使いたいのではなく、
 Parameters.Addをすっきり書きたい

皆様、ご回答ありがとうございました。

結論としては たつごろーさん のおっしゃるとおり
引用:

 つまり、3項演算子を使いたいのではなく、
 Parameters.Addをすっきり書きたい


が目的ですのでメソッドを作成してみようと思います。

勉強になりました。ありがとうございました。
1

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