Angepinnt Beispiele für guten und schlechten Code (Stil)

  • VB.NET

Es gibt 269 Antworten in diesem Thema. Der letzte Beitrag () ist von Hinti.

    Stimmt. Das hatte ich nicht bedacht.
    Aber mit diesem großen Select-Block:
    Das ist doch nicht gerade sonderlich intelligent, da in einem Block mehrere Variablen prüfen zu wollen. Dann kommt man am Ende nur durcheinander. Besser ist, man packt das in einzelne Blöcke.
    Da bin ich ganz deiner Meinung, huttERic.

    Ich wollte nur zeigen, dass "Select Case True" allgemein schlechter Stil ist. "If ... ElseIf ..." sollte man natürlich nur machen, wenn man will das eine zweite (ggf. dritte, vierte usw.) Bedingung nur überprüft werden soll, wenn die erste Bedingung nicht erfüllt ist.

    Dies hier

    VB.NET-Quellcode

    1. If i = 5 Then
    2. 'irgendwas
    3. ElseIf s = "hans" Then
    4. 'irgendwas
    5. ElseIf obj Is Nothing Then
    6. 'irgendwas
    7. Else
    8. 'irgendwas
    9. End If


    entspricht dem hier

    VB.NET-Quellcode

    1. If i = 5 Then
    2. 'irgendwas
    3. Else
    4. If s = "hans" Then
    5. 'irgendwas
    6. Else
    7. If obj Is Nothing Then
    8. 'irgendwas
    9. Else
    10. 'irgendwas
    11. End If
    12. End If
    13. End If


    Und im Vergleich dazu ist die "ElseIf"-Variante besser, finde ich.

    P.S.: Hab grad gemerkt, dass ich in meinem vorherigen Beitrag bei meinem ElseIf-Beispiel "End Select" stehen hab. Ich ändere das gleich um.
    hallo
    ist das auch ein schlechter stil??

    Quellcode

    1. Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As ToolStripItemClickedEventArgs) Handles Menü1.ItemClicked
    2. If Not e.ClickedItem.Name = Nothing Then Process.Start(e.ClickedItem.Name)
    3. End Sub
    ich hätts so gemacht:

    VB.NET-Quellcode

    1. Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As ToolStripItemClickedEventArgs) Handles Menü1.ItemClicked
    2. If e.ClickedItem.Name <> Nothing Then Process.Start(e.ClickedItem.Name)
    3. End Sub


    Außerdem: Du hast das Menü Menü1 genannt. Wie kannst du nur Umlaute verwenden??? :D

    lg seritools
    | Keine Fragen per PN oder Skype.
    Nein. Bei VB macht das nicht soviel aus, aber z.B. bei C++ (wo man den Quellcode auf verschiedenen Plattformen lesen können muss) sind Umlaute ein absolutes Tabu. Deshalb sollte man in VB auch keine verwenden, es ist aber mehr eine Frage des guten Stils, daraus können (soweit ich weiss) keine Fehler entstehen.
    Hab noch etwas gefunden:

    VB.NET-Quellcode

    1. Control.CheckForIllegalCrossThreadCalls


    Dies benutzt man, um aus dem BGW heraus auf die Form zugreifen zu können. Dies ist schlechter Stil.
    Ich bekenne mich dazu, das auch manchmal zu verwenden, da die Methode über ReportProgress viiiiel umständlicher wäre.
    | Keine Fragen per PN oder Skype.
    Statt "ReportProgress" soll man ja auch eigentlich Delegates verwenden.

    VB.NET-Quellcode

    1. Delegate Sub dlgSetAnyTextbox(ByVal tb As TextBox, ByVal s As String)
    2. Private Sub SetAnyTextbox(ByVal tb As TextBox, ByVal s As String)
    3. tb.Text = s
    4. tb.Refresh()
    5. End Sub
    6. Private Sub InTheBackground()
    7. Dim d As New dlgSetAnyTextbox(AddressOf SetAnyTextbox)
    8. Invoke(d, TextBox1, "A")
    9. Invoke(d, TextBox2, "B")
    10. End Sub
    Da "Stil" ja auch was mit guter Lesbarkeit zu tun hat, mein IMHO:

    VB.NET-Quellcode

    1. ' schlechter Stil:
    2. If a Then
    3. End If
    4. ' immer noch schlechter Stil:
    5. If (a = True) Then
    6. End If
    7. ' vermutlich iO:
    8. If DeleteIsAllowed Then
    9. End If
    10. ' kann man unterschiedlich sehen:
    11. If (DeleteIsAllowed = True) Then
    12. End If


    alles andere ist schlechter Stil



    getret'ner Quark wird breit, nicht stark ...



    Erkläre bitte folgende Funktion:

    Private Sub DeleteFile(byval BrochnikosBalmsa As Boolean)

    if (BrochnikosBalmsa) then KillThisDamnedFile

    End Sub

    "BrochnikosBalmsa" bedeutet in der Muttersprache des Programmierers (welche du dummerweise nicht sprichst) entweder

    "Darf loeschen"

    oder

    "Darf nicht loeschen"

    Musst du obige Funktion jetzt mit "true" oder mit "false" aufrufen, um die verdammte Datei zu löschen?
    Doch, natürlich weiss man das. Es wird ja nur mit True ausgeführt, also muss die Variable true sein, damit die Datei gelöscht wird. Daran ändert auch der Unlesbare Name nichts. Würde man die Variable mit True oder False vergleichen würde kein anderes Ergebnis dabei herauskommen, es wäre die genau gleiche Situation, ausser das es schlechter Stil wäre, wie wir oben schon zur Genüge ausdiskutiert haben.

    VB.NET-Quellcode

    1. Private Sub DeleteFile(byval BrochnikosBalmsa As Boolean)
    2. if (BrochnikosBalmsa) then
    3. Drachnik
    4. else
    5. Sputnik
    6. endif
    7. End Sub


    Das ganze soll einfach nur verdeutlichen, dass "DarfDas" ggfs nicht in einer Sprache geschrieben wurde, die man versteht.

    Du denkst aber selbst bestimmt nicht in Russisch?

    Ich nicht, aber zB meine Frau.
    Kannte außerdem auch mal spanisch sprechende Programmierer mit nur rudimentären Englischkenntnissen. Zur Not sollten einfache Codeschnipsel also auch verständlich sein, wenn man die Sprache des Programmierers nicht spricht.
    Als schlechten Stil bezeichne ich alles es erschwert den Code zu verstehen und alles was ein erhöhtes Risiko für mögliche Fehler enthält.

    Die Frage, ob man nun „If move Then“ schreiben sollte oder lieber „If move = True Then“, ist damit doch absolut lächerlich. Beides kann man ohne Probleme verstehen. Keines hat irgend einen Nachteil. Befasst Euch doch lieber mit wirklichschlechtem Code. Ich bin mir sicher, wenn man nur genügend lange in so einem Forum dabei ist, bekommt man allerhand zu sehen.