Schizofrenia Schizofrenia 2012-12-15 01:49:49

[VB.net] If Falseじゃダメなの? このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

去年いた会社で「VBの専門家」と呼ばれていた人が書いたコード。If文の階層が深いならともかく、たった1個のIf文しかないのにGoTo使われてもなあーと。プログラミングの実務経験が薄くて新規開発を任せてもらえず、保守や運用ばかり任せられていた当時時給1200円の派遣のボクですが、凡そオブジェクト指向(抽象クラスやインターフェイスによる多態性、継承、カプセル化)の概念が皆無なのはまだしも、手続き型言語時代の作法すら守られてなく、一つのテーブルの更新メソッドとして列名の一箇所が違うだけのSQL直書きのコピペプロシージャが20個書かれていたり、とにかく酷いこと尽くしだった。こんな人がボクの2倍以上も給料貰っていて「君も何か分からないことがあったらあの人に聞きなさい」と言われていたので、PGとして大成するするために退社しましたが、未だにこの時のトラウマでVB.NETの案件は避けています。

For i As Integer = 0 To array.Length

      If True Then
         GoTo label1
      End If

      '処理

label1:
Next 

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(12)

#1 kuma056 kuma056 2012-12-15 10:26:31  

初期のVB.NET(VB2003)まではcontinue相当の命令が無い、処理が大きいとIf〜End Ifが長くなって見辛くなる、という事情を考慮すれば、この使い方自体はウンコとは言えないでしょう。 これがcontinueに対応した2005以降のバージョンである、とか、continue使うこと自体がウンコ、とかなら別ですが

#2 InternalServerE InternalServerE 2012-12-15 12:28:03  

Continueがないのなら、割と妥当なコードに見える。
「'処理」の長さ次第のところもあるけど、個人的には「If False 処理」は避けるなぁ。

#4 keiichiroh keiichiroh 2012-12-15 14:20:11  

おととしまでやっていたトコも.net1.1だったりしたからなぁ・・・社内システムだとリプレースするより使い続けるってのはありそう。 ちなみに日本の会社じゃなく外資系。novellのナンチャラ使って自動配備されるjreが1.3で.netが1.1だったといううんこ。 vb.netはやってないからウチじゃないな。

#5 _naruo _naruo 2012-12-16 07:13:35  

Ifで判定するのををFalseにするやり方じゃ駄目なのでしょうか

For i As Integer = 0 To array.Length
      If False Then
         '処理
      End If
Next 
#6 e_buso e_buso 2012-12-17 20:47:10  

なんでそう書いたのか聞けばよかったのに・・・

#8 keiichiroh keiichiroh 2012-12-18 23:13:46  

>Falseにするやり方 大体の場合はそれが正解だけど、プログラムの構成によっては際限なく入れ子の制御ブロックになるような物もある。 そうなるとブロックの繋がりが見えにくくなって、思わぬバグとかに繋がりやすいんで、ネストしないようにすることがある。 性能や保守性といった設計目標をどこに置くかによって、それぞれのメリット・デメリットをトレードオフしていく必要がある。 正解は一つじゃないのが設計ってもんだ。

#9 keiichiroh keiichiroh 2012-12-18 23:21:08  

良い・ダメって視点じゃなくて、どういう意図でそうしようとしたのかという視点で考えたほうがいいよ。その上で設計意図に対して実装方法が上策か下策かって話になるけど、断片コードだけじゃ分からんっていう話。

#10 okadabasso okadabasso 2012-12-19 01:29:39  

vb6で書くならこうする事もあるかな。continueないし。vbsならループする中身を別メソッドにして早期リターンする。あと if false よりif trueの方が読みやすいとか。Gotoそのものが悪なんじゃなくてGotoでどこでもかんでも飛ばすのが悪なんだと思う。

#11 m_shige1979 m_shige1979 2012-12-20 17:01:34  

VBの専門家だからといってコードのアルゴリズムがすぐれているとは限らないよね。

#12 harunoshirayuki harunoshirayuki 2013-12-04 00:59:22  

Gotoは個人的には好かないな…メソッド分けるとかして欲しい

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] 連番

このエントリーをはてなブックマークに追加

もはや人間が読むものではない。

...

package com.renban.erq053.czp008;

/**...

鑑賞する »

[C#] コーディング時最適化

このエントリーをはてなブックマークに追加

最適化の効いた良いコードだと思います。 ...

static void Main() {
    Console.WriteL...

鑑賞する »

[C] NULL と 8 の何故

このエントリーをはてなブックマークに追加

テストは通ってるけど、教科書からやり直し...

#define TO_STRING(n, str) \
  if(n != N...

鑑賞する »