- PR -

空のIF文を書きますか?

投票結果総投票数:260
許容できる 85 32.69%
許容できない 148 56.92%
どちらでもよい 27 10.38%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-11-06 13:06
引用:

未記入さんの書き込み (2008-10-31 12:21) より:
IF (条件) Then
Else
・・・処理
End If

IF〜Elseには何も処理を書かず、Else〜EndIfに処理を書きます。
このようなコードは許容できますか?


回答されるかたがたのご意見を拝見していて、許容できない理由としては、つぎのものに分類できるかな、と思いました。

・ソースコード上での見間違い(や見落とし)が怖いから。これはコメントの追加で避けられる?
・リソースが無駄だから。リソースは、コンパイル後のマシンコードの実行コストであったり、ソースコードをテキストエディターで表示する行数であったり。
・気持ち悪いから。読みやすくないから。自分(や自分が想定するグループ)のポリシー・好みに合わないから。

ここまではあまり私の主観は入れていないつもりですが、以下は、私の主観で書きます。

私は、見間違いについては、本来は開発環境のほうで対応すべきものではないかと考えます。空の Then があったらそこを目立つように表示するなどです。開発環境を補うためにコメントを入れることはひとつの良い対処方法だと考えます。日常の文章でも「○○<b>以外</b>は□□です。」のように強調表示したりしますが、これと同じことです。
リソースも、開発環境や実行環境で対応すれば良いと思います。

最後の、気持ち悪い・読みやすくない、などは、これは本当に難しい選択ですね。
Error401
常連さん
会議室デビュー日: 2007/03/12
投稿数: 39
投稿日時: 2008-11-06 13:35
引用:

セラフさんの書き込み (2008-11-05 16:39) より:

(略)
以下の同意のIfに置き換えられます。



意味的には同じなのかもしれませんが、複雑度は後者の方が上がっていますね。

前者はC0カバレッジ100%のためのテストケースが6通りであるのが一目で分かるのに対し、後者は良く考えてみないと(場合によっては各条件の真偽マトリックスを書いてみないと)どれだけのケースがあるのか分かりません。

それと、前者の書き方が「分離性」に乏しく、変更に耐えられないというのも良く分かりません。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2008-11-07 02:44
元の質問を見ますと、Not の代わり(C#なら ! の代わり)として書くのはどうかというものだったと思います。

引用:

個人的にはNotを使うので、上記のようなコードは気持ち悪いと思っています。



Notの代わりとして空のブロックを作るのには反対です。特別な理由がありそれが他人にもわかりやすくされているのならありだと思います。自分はやりませんが「許容」はできます。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2008-11-07 11:04
引用:

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



ご指摘の通りです。なれない人が読むと読みづらく感じると思います。
IFの考え方の違いから来ていると思います。
実はこれ、人間の思考の問題が大きく絡んでいて、今までやってきたIF文の考え方を大きく変えないと慣れることができないIF文だそうで、とある論文を元に発言しています。

通常、日本の一般的な設計書では、「○○となるとき以下の処理を実施する」又は「○○とならないとき以下の処理を実施する」となり、IFの式の種類の数だけ入り口がありますが、わたしのIF文では「○○とならないので、処理を実施しない」という入り口を1つにして、思考を単純化しようという試みの1つなのです。なので、本来は、1つのブロックで1つの処理しか書かないのですが、掲示板上でそのように書くと行数がかさんでしまうので、手抜きしてしまいました・・・。ごめんなさい。
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-11-07 11:52
許容できます。
条件がひとつならNotでもわかりにくくはなりませんが、セラフさんが提示されたような複数条件が入り込んでくると、難しくなります。
いうなれば対偶を使って判定させているわけで、慣れない思考方法だと思います。
複数条件のときはSelect 〜 Case を使うなどで読みやすくする工夫をしますけど。
日本語でも難しいですよね。
例えば、「新規注文では、『ダイヤではない、またはルビーではない』ものを注文する」といったような仕様があったりして。
これはまだ単純ですが、3つ、4つといった条件が重なり合うと、Not や Or が入り組んできてぱっと理解できるようなものでなくなります。

以前、上記のような仕様でSQL文が書かれていて「意味がねぇ!」といったことがありました。

ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2008-11-07 12:51
なんか途中から前提が変わっていて違うパターンを見て許容できるという流れになっているなぁ。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-11-07 21:05
設計書に従うんじゃないですか?
私は、設計書と違うインプリメントは却下です。
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2008-11-08 17:26
ご無沙汰してます。(え?してない?^^;

自分の意見としては「許容しない」ですね。

理由としては
「スマートでない」
「ELSEを見落とし安くバグに繋がる可能性がある」
などがありますが、単純に見てて「気持ちが悪い」というのもあります。

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