- PR -

空のIF文を書きますか?

投票結果総投票数:260
許容できる 85 32.69%
許容できない 148 56.92%
どちらでもよい 27 10.38%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2008-11-05 10:55
引用:

rainさんの書き込み (2008-11-05 10:32) より:
そういう場合、コメントとして
コード:
' ToDo: ここに確認処理を追加!(VB)
// ToDo: ここに確認処理を追加!(C#)


というふうに書いておけば、VisualStudio のタスク一覧ウィンドウに載るので、それで把握できそうです。


はぅ!
それは便利ですね。

色々便利になるのはいいけど、全機能を把握出来無くなりそうだ・・・

# って、VisualStudio使ってないけど
# 脱線失礼
sasagaki
常連さん
会議室デビュー日: 2008/03/10
投稿数: 20
投稿日時: 2008-11-05 11:18
条件が整えば許容できる派です。

許容できる条件はまりもさん、およびにーさんと同様です。
で、処理の無いブロックに「この場合は何もしない」とかコメントを入れておくのを必須とします。

何も処理の無いIFブロックを書かないようにしたいがために
条件がわかりづらくなったり複雑になったりするくらいなら
処理の無いブロック作ってもいいから、わかりやすく書いてよ、
と思うことは、たまにあります。

(そういう意味では、IF文をむりやり1文で書かないで
ネストしてくれよと思う時のほうが多いかも)
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2008-11-05 12:50
書くことありますよ、 質問とはちょっち意味が違いそうだけど。

if(条件)
{
//処理
}
else
{
dummy(); //リリースビルドでは何もしないメソッドの呼び出し
}

dummy() の中身は、 実質的にカラッポで、 デバッグビルドではテスト実行時に通過したことがチェックできるようなコード ( Console.WriteLine() とか ) だけ。
なので、 この else 句はプログラムとしては不要なもの。 ということで、 お題の 「空の if 文」 と同じようなものかと。 f(^^;

リリースビルドでは、 最適化されて else 以降はコンパイルされない。 (ハズ)
デバッグビルドでは、 C0 カバレッジしか取れない Visual Studio でも、 これで C1 カバレッジが押さえられる。
_________________
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-11-05 13:36
三値論理の世界の言語の
コード:
if 論理式 then

else
何かする
end if

は許してほしい。

Cの
コード:
if (result==True) {


はそもそも
コード:
if (result) {


と意味が違うので許せない

[ メッセージ編集済み 編集者: ひろ@ya 編集日時 2008-11-05 13:37 ]
johnes
ベテラン
会議室デビュー日: 2007/11/21
投稿数: 50
投稿日時: 2008-11-05 14:33
僕も
コード:
if (条件式) {
    // ToDo: ***
} else {
    処理
}

時のみ許容ですかね。

因みに.NetではありませんがPerlじゃ
コード:
if (条件式) {
} else {
    処理
}

だとコンパイルエラーになりませんでしたっけ。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2008-11-05 16:39
引用:

IF (条件) Then
Else
・・・処理
End If


は特定の条件下では許容できますが、部下にはこのようなコードは書かないように指導するでしょうね・・・。
処理の無いIFは許容というか、使い方しだいでは奨励してます。

例えば、

コード:

If (条件1) Then
  If (条件2) Then
    処理1
  Else
    処理2
  End If
ElseIf (条件3) Then
  If (条件4) Then
    処理3
  Else
    処理4
  End If
Else
  If (条件5) Then
    処理5
  Else
    処理6
  End If
End If



このコードはIfがネストしていて、分離性が乏しく、変更には耐えられませんが
以下の同意のIfに置き換えられます。

コード:

If Not(条件1) Then
  'Ifのブロック化のため
ElseIf (条件2) Then
  処理1
Else
  処理2
End If

If Not(条件3) Then
  'Ifのブロック化のため
ElseIf (条件4) Then
  処理3
Else
  処理4
End If

If (条件1) Then
  'Ifのブロック化のため
ElseIf (条件2) Then
  'Ifのブロック化のため
ElseIf (条件5) Then
  処理3
Else
  処理4
End If



これはブロックごとに分離させていますので、各々条件が変わっても、他の条件には影響を与えません。
もちろんブロックごとにメソッドに分けることも可能になってくるでしょう。

また、

コード:

If (条件1) AND (条件2) AND (条件3) Then
    処理1
ElseIf Not(条件1) AND (条件3) Then
    処理2
End If



これも

コード:

If Not(条件1) Then
  'Ifのブロック化のため
ElseIf Not(条件2) Then
  'Ifのブロック化のため
ElseIf Not(条件3) Then
  'Ifのブロック化のため
Else
    処理1
End If

If (条件1) Then
  'Ifのブロック化のため
ElseIf Not (条件3) Then
  'Ifのブロック化のため
Else
    処理2
End If



っと言うのもありかなっと。

もちろん、コード量を減らす必要のあるプロジェクトではNGとなるでしょうが、この程度のコード量ならまぁいいかと思ってしまいます。

対比のIF文は同意のつもりですが、間違ってたらごめんなさい・・・。
しかもだいぶ脱線気味ですね。失礼いたしました。
にゃー
常連さん
会議室デビュー日: 2008/06/26
投稿数: 32
投稿日時: 2008-11-06 12:22
許容できるに投票しました。

可読性を損なわずコード規約に違反してなければ、
どちらでもよいと思ったためです。
ただ、皆さんがかかれているように、
コメント一行を書いていることが条件です。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-11-06 12:49
引用:

セラフさんの書き込み (2008-11-05 16:39) より:
このコードはIfがネストしていて、分離性が乏しく、変更には耐えられませんが
以下の同意のIfに置き換えられます。

コード:

If Not(条件1) Then
  'Ifのブロック化のため
ElseIf (条件2) Then
  処理1
Else
  処理2
End If

If Not(条件3) Then
  'Ifのブロック化のため
ElseIf (条件4) Then
  処理3
Else
  処理4
End If

If (条件1) Then
  'Ifのブロック化のため
ElseIf (条件2) Then
  'Ifのブロック化のため
ElseIf (条件5) Then
  処理3
Else
  処理4
End If



これはブロックごとに分離させていますので、各々条件が変わっても、他の条件には影響を与えません。
もちろんブロックごとにメソッドに分けることも可能になってくるでしょう。


私は、むしろこっちのほうがトリッキーすぎて、とても読みづらいと感じます。深くてもネストしているほうが単純で好きです。主観もあるとは思いますが。ただ、ネストを避けないといけない理由が分かりませんでした。

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