web-dev-qa-db-ja.com

コロンを使用してVisual Basicで2つのステートメントを同じ行に配置する

コロンを使用して2つのステートメントをVisual Basicの同じ行に配置することは悪い習慣と考えられていますか?

21
Kyle

コロンを使用してステートメントを組み合わせることに本質的に問題はありません。これは実際にはコンテキストに依存しますが、読みやすさを低下させない限り、問題はありません。

原則として、この目的でコロンを使用することは避けます。 1行に1つのステートメントを記述した方が読みやすいと思います。ただし、これは結腸固有の問題ではありません。 C#またはC++でセミコロンを使用して同じことを行うのは避けます。それは単なる個人的な好みです。

22
JaredPar

2行を連結することで読みやすさが向上する場合があるため、これは適度な練習としてお勧めします。

  • 行が短く、密接に関連している場合
  • 線が短くて取るに足らないとき

    Option Compare Database:  Option Explicit   ''My favorite!
    rsDataSet.Close:          Set rsDataSet= Nothing
    

以下の場合は行わないでください

  • 読みやすさが損なわれます。
  • デバッグが複雑になります。 If...Thenなどの制御構造は、クリーンな状態を保つ必要があります。ブレークポイントを設定するときは、シンプルにしておいてください。
  • それは将来の編集を危険にさらします。多くの場合、セクションの移植性を維持する必要があります。コードのブロックを移動または再構築することは、コードを最小限にしようとする試みによって簡単に妨げられます。
20
Smandoli

一般的には、コードがビジーになるため、この方法はお勧めしません。

ただし、単純なタスクの場合、問題はありません。例えば:

for i = 1 to 10: ProcessFoo(i): next

このような行は、混乱を招かないように十分に短いと思います。

11
AngryHacker

反対側に行きます。コードの密な行が好きではありません。行が結合されていない場合は、コードをスキミングする方が簡単です。

ステートメントを組み合わせると、1つの画面に収まる長い関数を簡単に作成できます。

それは大きな罪ではありません、私はそれが好きではありません。

また、1行Ifステートメントは好きではありません。

9
jrcs3

私にとっては、「決してこうしてはいけない」と言うべきではなく、単に「これを行うと、起こり得る問題はそのようなものです」と言うべきです。次に、自分の長所と短所を比較検討します。プロはコードの簡潔さ/数行です。時々これは読みやすさを助けることができます。たとえば、一部の人々はこれを使用してvb.Net宣言を行います。

Dim x As Long: x = 1

または待機ループ:

Do Until IE.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

しかし、明らかにあなたも誰かにそれを荒くすることができます:

Public Sub DoYouKnowWhatThisDoes()
    MsgBox Example
End Sub

Private Function Example()
    Const s$ = "078243185105164060193114247147243200250160004134202029132090174000215255134164128142"
    Const w% = 3: Const l% = 42: Dim i%, r$: For i = 1 To l Step w: r = r & ChrW$(Mid$(s, i, w) Xor Mid$(s, i + l, w)): Next: Example = r
End Function

このアプローチを使用したくないもう1つの実用的な理由は、ブレークポイントです。ブレークポイントは行でのみ設定できます。したがって、同じ行で複数の処理を実行している場合、2番目のものを分離することはできません。最初のステートメントで停止します。 (これは、一部の人が単一行のifを好まない理由の1つでもあります。)デバッグを少し複雑にするだけです。

このため、通常、量産コードではコロンを使用しません。しかし、私はそれらを使用して、フォーラムや他の場所に投稿する「コピー/貼り付け」コードの簡潔さを向上させています。 YMMV :)

8
Oorang

これは非常に古い質問であることに気づきましたが、これは私のGoogle検索での最初の結果だったので、ここで鳴き声が許されることを願っています。

このアプローチが実際に役立つ1つの状況(実際に私をここに導いた原因)があり、それが目的の結果を達成する唯一の方法である場合:イミディエイトウィンドウ。イミディエイトウィンドウで実行するコードはすべて1行に収める必要があります。したがって、イミディエイトウィンドウでDo、Case、For、While、またはWithのいずれかの形式を使用するには、コロンを使用する必要があります。

5
Dan Henderson

レコードセットを整理して変数を何も設定しない場合にのみ使用しました。 2行ではなく1行で画面に表示されるコード行が増えるため、読みやすさが損なわれることはありません。

以下のような単純な選択ケースで使用されるのを見てきましたが、それは私が行く限りです。

 Select Case success
      Case ERROR_FILE_NO_ASSOCIATION: msg = "no association"
      Case ERROR_FILE_NOT_FOUND: msg = "file not found"
      Case ERROR_PATH_NOT_FOUND: msg = "path not found"
      Case ERROR_BAD_FORMAT:     msg = "bad format"

http://vbnet.mvps.org/index.html?code/system/findexecutable.htm から

それでも、「msg = "の部分を並べました。

4
Tony Toews

それはis私が働いているほとんどのサイトで悪い習慣と考えられています。そして、VB私が一緒に働いた開発者のほとんどによって。そして私の頭の中で。それを見れば、私はほぼ間違いなくそれを変更することを認めるでしょう。そのように見栄えの良いコードを見つけた可能性があることは認めますが、私の生涯でそれが見られるとは思っていません。

また、1行の** If ** sも本当に好きではありません。

どちらも、VGA(640x480)モニターの時代からの二日酔いの可能性が高いです。最近は言い訳になりません。

4
Mike Woodhouse

私がこれまでに取り組んだどの会社でも、これが公式の立場で言及されているのを見たことがありません。しかし、コロンを過度に使用すると、コードが読みにくくなり、維持するのが難しくなると思います。

私は時々自分でこれらを使用する傾向があります。たとえば、最近のプロジェクトの1つでキャンセルを確認するときなどです。

If _bCancel Then Status = CancelProcess() : Return Status

これを配置すると、代替のIFブロックよりもコードが読みやすくなります。

しかし、それは長すぎるかもしれません、私は最近、コロンの使用法を長すぎるようにする例が豊富なプロジェクトを継承しました:

    Select Case GetStringValue(Index).Trim.ToLower
        Case "yes", "y" : GetBooleanValue = True
        Case "no", "n" : GetBooleanValue = False
        Case Else : GetBooleanValue = Nothing
    End Select

個人的に私は上記が少し多いと思います。

3

私はこれが好き

Using pro As New Process() : With pro

        ...

    End With
End Using
1
DontPanic345

継承を使用するとき、またはインターフェースを実装するときに、クラス宣言で使用されるのを見てきました。

Public Class DerivedClass : Inherits BaseClass
   ...
End Class

しかし、他の人のように、私もその使用を思いとどまらせます。

クリス

0
Chris Dunaway