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

  • VB.NET

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

    1.: Wenn du schon C: erzwingst, brauchst du auch nicht mehr überprüfen, ob der Ordner C: existiert. Wenn nicht, wirst du ihn auch sicherlich nicht erstellen können. :D
    2.: "Programms" wird "Programs" geschrieben.
    3.: Du kannst deinen ganzen gesamten Code durch folgendes ersetzen:

    VB.NET-Quellcode

    1. Directory.CreateDirectory("C:\Installer\Programs")
    2. ProgressBar3InitialisierenFinished.Start() ' Ich hoffe, dass das kein Timer ist, der für einen Splashscreen o.ä. verantwortlich ist...

    20 Zeilen --> 2 Zeilen
    CreateDirectory erstellt nämlich automatisch alle Ordner im Pfad. Außerdem ist eine ProgressBar für solch einen sehr kurzen Prozess unnötig.
    4.: Du solltest Fehler, die bei der Erstellung des/der Ordner entstehen könnten, abfangen.

    EDIT: Directory.Exists ist nicht einmal nötig, da CreateDirectory keinen Fehler wirft, wenn der zu erstellende Pfad schon vorhanden ist.
    | Keine Fragen per PN oder Skype.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „SeriTools“ ()

    @felix Ohne jetzt den Sinn zu erraten: So ein "Problem" würde ich so lösen:

    VB.NET-Quellcode

    1. Private Sub DoSomething()
    2. Dim Pairs As New Dictionary(Of String, Integer)
    3. Pairs.Add("C:\", 5)
    4. Pairs.Add("C:\Installer", 2)
    5. Pairs.Add("C:\Installer\Programms", 3)
    6. Pairs.ToList.ForEach(Sub(x) PrintStep(x.Key, x.Value))
    7. InitializationFinished.Start()
    8. End Sub
    9. Private Sub PrintStep(path$, increment%)
    10. Directory.CreateDirectory(path)
    11. ProgBar.Value += increment
    12. End Sub

    felix schrieb:

    Gibt es hierfür auch eine Codeoptimierung?
    Klar.

    VB.NET-Quellcode

    1. Directory.CreateDirectory("C:\Installer\Programms")
    2. ProgressBar3.Increment(3)
    3. ProgressBar3InitialisierenFinished.Start()

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe das erste hineingekritzelt, das mir einfiel. ?( "Drucke Schritt" erschien mir gerade passend, also habe ich es genommen. :saint:
    @sonne75 Also ich mach es immer so. Der Compiler hat es bis jetzt noch immer geschluckt und ich sehe keinen Grund, mir das abzugewöhnen(bei den "bösen Funktionen" waren die Kürzel glaube ich auch nicht aufgeführt).
    Schon hübsch:

    Higlav schrieb:

    VB.NET-Quellcode

    1. Dim Pairs As New Dictionary(Of String, Integer)
    2. Pairs.Add("C:\", 5)
    3. Pairs.Add("C:\Installer", 2)
    4. Pairs.Add("C:\Installer\Programms", 3)
    5. Pairs.ToList.ForEach(Sub(x) PrintStep(x.Key, x.Value))

    Tät ich noch eins drauf setzen

    VB.NET-Quellcode

    1. Call New Dictionary(Of String, Integer)() From {{"C:", 5}, {"C:\Installer", 2}, {"C:\Installer\Programms", 3}}.ToList.ForEach(Sub(kvp) PrintStep(kvp.Key, kvp.Value))

    Für grad so Kram hab ich mir eine Extra TupleList gebastelt, mit der kann man so formulieren:

    VB.NET-Quellcode

    1. TupleList.From("C:", 5)("C:\Installer", 2)("C:\Installer\Programms", 3).ForEach(Sub(tpl) PrintStep(tpl.Item1, tpl.Item2))
    :D
    Und die offensichtliche einfache Lösung übersehen viele :/

    RodFromGermany schrieb:

    Klar.

    VB.NET-Quellcode

    1. Directory.CreateDirectory("C:\Installer\Programms")
    2. '' [...]

    ja, das mit dem Dictionary ist immer noch umständlich, und ich sehe das prob vor allem in der Superlangen Zeile. machemer halt einen 2-Zeiler draus:

    VB.NET-Quellcode

    1. Dim pairs = New Dictionary(Of String, Integer)() From {{"C:", 5}, {"C:\Installer", 2}, {"C:\Installer\Programms", 3}}
    2. pairs.ToList.ForEach(Sub(kvp) PrintStep(kvp.Key, kvp.Value))
    :D

    Ist halt auch eine Zweckentfremdung von Dictionary, weils nur gebraucht wird, um die Datenpärchen anzulegen, und dann wirds in eine List(Of KeyValuePair(Of STring, INteger)) umgewandelt, und als Dictionary ühaupt nicht genutzt.


    @slice : ja, ich focussiere nur aufs Initialisieren einer Liste von Wertepaaren, und folge ansonsten @higlav:s "ohne jetzt den Sinn vons ganze zu verstehen..."

    ErfinderDesRades schrieb:

    Ist halt auch eine Zweckentfremdung von Dictionary, weils nur gebraucht wird, um die Datenpärchen anzulegen, und dann wirds in eine List(Of KeyValuePair(Of STring, INteger)) umgewandelt, und als Dictionary ühaupt nicht genutzt.

    Genau das habe ich mir auch überlegt. Das Unangenehme wäre bei der List(Of KeyValuePair(Of String, Integer)) aber, dass man jedesmal ein Pairs.Add(New KeyValuePair(Of String, Integer)("String", 0)) schreiben müsste.

    @slice Keine Angst, wir habe diese Lösung nicht übersehen, aber was der Kunde wünscht... ;) Halt auch, wenn es noch so unsinnig ist :rolleyes: - in meinem Fall(Konstrukteur) habe ich wiedermal ein paar Anforderungen von Nestlé, die im technischen Blickwinkel betrachtet völlig daneben sind(da blutet mir das Konstrukteur-Herz), aber ich mach's trotzdem, da sie das wünschten. :D
    Ich weiss gar nicht, was ihr daran auszusetzen habt. :saint: Warum soll man denn die Kürzel nicht verwenden? Muss As Integer oder As String denn unbedingt immer ausgeschrieben werden? ?(

    EDIT: Nicht mal ReSharper meckert, wenn ich meine Variablen so deklariere...

    Higlav schrieb:

    Warum soll man denn die Kürzel nicht verwenden?


    Wie ich schon geschrieben habe:

    sonne75 schrieb:

    Ich finde es ziemlich unlesbar, gerade weil es häufig Mischungen in den Signaturen gibt, weil diese Typzeichen nur für wenige Datentypen existieren...


    Dann hast du sowas wie Public Sub Bla(step%, ByVal mc As MyClass, str$)

    Ich finde es ästhetisch total unschön, wenn es so einen Mischmasch gibt.

    Manawyrm schrieb:

    Soo hab ich das letzte mal unter QuickBasic auf DOS 6.22 Funktionen deklariert

    Ich glaube, da warst du noch nicht mal flüssig. :P Ich hatte 1994 Windows 3.11 ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sonne75“ ()

    SeriTools schrieb:

    1.: Wenn du schon C: erzwingst, brauchst du auch nicht mehr überprüfen, ob der Ordner C: existiert. Wenn nicht, wirst du ihn auch sicherlich nicht erstellen können. :D
    2.: "Programms" wird "Programs" geschrieben.
    3.: Du kannst deinen ganzen gesamten Code durch folgendes ersetzen:

    VB.NET-Quellcode

    1. Directory.CreateDirectory("C:\Installer\Programs")
    2. ProgressBar3InitialisierenFinished.Start() ' Ich hoffe, dass das kein Timer ist, der für einen Splashscreen o.ä. verantwortlich ist...

    20 Zeilen --> 2 Zeilen
    CreateDirectory erstellt nämlich automatisch alle Ordner im Pfad. Außerdem ist eine ProgressBar für solch einen sehr kurzen Prozess unnötig.
    4.: Du solltest Fehler, die bei der Erstellung des/der Ordner entstehen könnten, abfangen.

    EDIT: Directory.Exists ist nicht einmal nötig, da CreateDirectory keinen Fehler wirft, wenn der zu erstellende Pfad schon vorhanden ist.


    Stimmt! DANKE!
    C: war nur der Vollständigkeit halber

    SeriTools schrieb:

    CreateDirectory erstellt nämlich automatisch alle Ordner im Pfad.


    Danke, wusste ich gar nicht.