Wie sollte mein Quellcode aussehen?

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Wie sollte mein Quellcode aussehen?

    Hallo Forum,

    nur mal eine Allgemeine Frage..
    Ich wollte mal Fragen wie ihr programmiert. Manchmal habe ich das Gefühl das mein Code ziemlich chaotisch aufgebaut ist.

    VB.NET-Quellcode

    1. 'Manch einer kommentiert so...
    2. Dim sTest1 As String = ""
    3. Dim sTest2 As String = "" 'Manch einer kommentiert so...


    Dann eine Frage zu der Benamung meiner Variablen..
    sollte man immer englische oder deutsche Namen "erstellen"?
    Ich erstelle die Variablennamen wie folgt

    VB.NET-Quellcode

    1. 'Datentyp-Initial + Bezeichnung
    2. Dim bExists as Boolean = False
    3. Dim iCount as Integer = 0
    4. Dim sText as String = ""


    Was macht ihr wenn ihr einen X-Langen Code in einer Sub habt?
    Lagert ihr die Anweisungen in anderen Subs aus?

    ...Wie gesagt, sollte eine allgemeine Frage sein, für eine große Runde :rolleyes:

    Grüße,
    Drahuverar

    Das hat nichts in Tipps & Tricks zu suchen! Verschoben.
    - Solaris
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    @Drahuverar Kommentare machst Du in den Klassen so:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' In der Klasse macht man das so
    3. ''' </summary>
    4. ''' <remarks>Dies und jenes</remarks>
    5. Private sTest1 As String = ""

    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!

    Drahuverar schrieb:

    'Manch einer kommentiert so...
    Dim sTest1 As String = ""
    Dim sTest2 As String = "" 'Manch einer kommentiert so...
    Es gibt Inline-Kommentare, es gibt Block-Kommentare und es gibt globale Kommentar-Blöcke (siehe Vorpost).
    Und alle haben ihre Berechtigung, je nach dem worauf sich der Kommentar bezieht.

    Drahuverar schrieb:

    zu der Benamung meiner Variablen..
    gibt's Style-Guides: msdn.microsoft.com/en-us/libra…o/ms229002(v=vs.100).aspx

    Drahuverar schrieb:

    englische oder deutsche Namen
    Letztendlich kommt es auf die Vorgaben an.
    In internationalen Projektumgebungen wirst du zu englisch verdammt sein.
    Besonders früher war es aber auch bei deutschen Behörden-Projekten üblich, deutsche Nomenklatur als Pflicht vorzugeben.
    Wenn nichts vorgegeben wird: Englisch, das passt sich am besten der Programmiersprache an und macht das Programm lesbarer.

    Wenn du jedoch die Wirklichkeit von deutschen Fachbegriffen in deiner Klasse abbilden musst, sollte man die nicht zwingend ver-englischen.
    Immer so agieren, wie es das Programm am besten lesbar macht.

    Drahuverar schrieb:

    Was macht ihr wenn ihr einen X-Langen Code in einer Sub habt?
    Ein Redesign ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Wenn ich schon damit anfange erklärende Kommentare für Funktionen und Klassen zu schreiben, dann gleich mit XML-Kommentaren:

    C#-Quellcode

    1. /// <summary>
    2. /// Ersetzt in einem String, mit Informationen über ein Dashboard, die Sprachabhängigen Columns entsprechend der Ausgewählten Sprache.
    3. /// </summary>
    4. /// <param name="input">Der String mit den XML-Infos</param>
    5. /// <returns></returns>
    6. public static string ReplaceLanguages(string input)
    7. {
    8. // Code
    9. }

    Rufst du dann diese Funktion auf, wird dir dein Kommentar im intelliSense angezeigt innerhalb von Funktionen sollte es nur seltens Kommentare benötigen.

    Das equivalent für VB.NET sollte mit ''' funktionieren
    [OT]Bei den XML-Kommentaren ist übrigens GhostDoc sehr hilfreich.[/OT]
    Bei der Variablenbenennung verzichte ich grundsätzlich auf Präfixe bzgl. des Typs der Variable. Ich achte eher darauf, dass sie einen aussagekräftigen Namen - oder, bei der 1:1-Implementierung einer Formel in einer eigenen Methode, die Variablen Bezeichnung zu verwenden.
    ein paar nützliche Hinweise - insbes. was Kommentation und Benamung angeht - fand ich neulich hier: Lesbaren Quelltext schreiben

    Generell code ich englisch, nur bei Datenbänkerei bekommt man mit elend vielen Entitäten und Attributen zu tun - da halte ich die Englisch-Linie nicht durch.
    Weiters versuche ich überall mich möglichst kurz zu fassen. Das betrifft Formulierungen, aber geht bis hin zu meinen Benamungs-Gewohnheiten.

    Welcher Benamungs-Gewohnheit man anhängt ist vergleichsweise schnuppe (daher die ganzen Glaubenskriege darum ;) ) - aber man sollte sie konsequent einhalten.
    Und in einem weiteren sind sich alle Benamungs-Glaubens-Krieger glaub einig: sprechend benamen - Nomen est Omen!

    ErfinderDesRades schrieb:

    welcher Benamungs-Gewohnheit man anhängt ist vergleichsweise schnuppe

    oder man orientiert sich etwas an der Microsoft Konvention :D

    >>msdn.microsoft.com/de-de/library/ms229045(VS80).aspx

    aber wie bereits erwähnt jedem das seine...

    Drahuverar schrieb:


    VB.NET-Quellcode

    1. Dim bExists as Boolean = False
    2. Dim iCount as Integer = 0
    3. Dim sText as String = ""
    hier trifft zu, dass Prefixe sinnlos sind, nämlich weil die Namen bereits sprechen

    VB.NET-Quellcode

    1. Dim exists = False 'exists kann nix anners sein als bool
    2. Dim counter = 0 'Count kann nix sein als Integer. Aber iCount spricht auch nicht ganz richtig: Es soll ja wohl ein Zähler sein, nicht die Anzahl von etwas, oder?
    3. Dim txt = "" ' Text kann nix anners sein als String

    Da das aber jeder selbst weiß, was da kommentiert ist, kommen die Kommentare natürlich weg

    VB.NET-Quellcode

    1. Dim exists = False
    2. Dim counter = 0
    3. Dim txt = ""
    So sieht kurzer, eindeutiger, lesbarer Code aus.

    Das ist nun aber schon so trivial, dasses sogar als Einzeiler gut lesbar ist:

    VB.NET-Quellcode

    1. Dim exists = False, counter = 0, txt = ""

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. Dim exists = False, counter = 0, txt = ""
    führt bei mir zu Brechreiz. ;(
    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!

    ErfinderDesRades schrieb:

    verstehen
    keine Frage, nur meinem Ordnungssinn gefällt dieses Merge nicht.
    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!

    ErfinderDesRades schrieb:

    Dim counter = 0

    sieht doch so schon ganz gut aus :D ,
    jedoch bin ich persönlich der Meinung die Deklaration des Datentyp sollte noch hinzugefügt werden damit es eindeutig und klar ist. Ein counter könnte ja z.B. auch vom Typ Long sein und nicht Integer ...

    VB.NET-Quellcode

    1. Dim counter as Integer = 0
    ist auch nur ein Beispiel, ziemlich irrelevant für die Praxis.
    Weil meist kann und sollte man die Deklarationen ja da positionieren, wo die Variablen erstmalig gebraucht werden.
    Also sone Kopfzeile in einer Methode, wo erstmal alle möglichen Variablen definiert werden, das ist ja eher vb6.

    @MrNobody - Geschmacksache. Ich bevorzuge die Typ-Inference ihren Job machen zu lassen, und wenns wirklich mal ein Long-counter sein soll, krieg ich das noch immer hin:

    VB.NET-Quellcode

    1. Dim counter = 0L
    Explizites Hinschreiben der Datentypen ist auch nur ein Bedienen von Redundanzen - der Compiler braucht das nicht.
    Manche Refactorierung ist auch einfacher, wenn man die Datentypen voneinander ableiten lässt:

    VB.NET-Quellcode

    1. Dim counter1 = 0
    2. Dim counter2 = counter1 + 4
    3. Dim counteds = {counter1, counter2}
    Da hab ich den Datentyp aller 3 Variablen geändert, wenn ich nur in zeile#1 ein L anhänge.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    MrNobody schrieb:

    eindeutig und klar
    Machst Du Option Infer Off.
    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!
    Das ist alles auf jeden Fall sehr interessant. Wusste nicht das ich durch

    VB.NET-Quellcode

    1. '''
    auch meine Variablen kommentieren kann. :D
    Danke für eure Kommentare.

    ErfinderDesRades schrieb:

    Dim exists = False, counter = 0, txt = ""


    Führt das nicht dazu das die Variablen zur laufzeit randomized sind?


    petaod schrieb:

    Ein Redesign


    Bekommst du dafür Zeit freigestellt, oder wird das von Anfang an mit einkalkuliert?
    Option Strict On!

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

    Drahuverar schrieb:

    Bekommst du dafür Zeit freigestellt, oder wird das von Anfang an mit einkalkuliert?
    Wenn das mein eigener Code ist, wird das schon gar nicht passieren. ;)

    Und wenn es Fremdcode ist, gibt es zwei Varianten:
    1) Ich muss nur Minimaländerungen machen, dann mache ich nur diese und lasse alles andere wie es ist.
    2) Sobald es größere Änderungen sind, ist bei einem unübersichtlichen Programm ein Redesign meist schneller als sich in die verwirrten Strukturen des Originalprogrammierers einzuarbeiten.
    Zumal solche Spaghetti-Codes meist auch noch recht fehlerbehaftet sind.
    Es muss ja nicht gleich das komplette Projekt neu geschrieben werden.
    Aber die Module, die ich entscheidend anfasse, müssen hinterher sowohl von mir als auch von anderen wartbar sein.


    Es gibt bei mir nicht die Frage, ob ich für etwas Zeit freigestellt bekomme.
    Entweder ich nehme die Aufgabe / den Auftrag an und dann benötigt es die Zeit, die ich brauche, bis es zufriedenstellend läuft (natürlich gebe ich bei komplexen Projekten eine Aufwandschätzung dafür ab).
    Oder ich kriege die Zeit nicht, dann soll das Zeug machen, wer will.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Drahuverar schrieb:

    ErfinderDesRades schrieb:

    Dim exists = False, counter = 0, txt = ""
    Führt das nicht dazu das die Variablen zur laufzeit randomized sind?
    Nein, bestimmt nicht.
    Der Einzeiler ist für den Compiler 100% identisch mit dem DreiZeiler

    Ich weiß auch garnet (sicher), was du unter laufzeit randomized Variablen verstehst, und wieso solch beim Einzeiler dann auftreten sollte, beim 3-zeiler nicht.

    Mach doch einfach paar Experimente damit.

    ErfinderDesRades schrieb:

    Mach doch einfach paar Experimente damit


    Ich dachte halt z.B.

    VB.NET-Quellcode

    1. Dim sTest1, sTest2, sTest3, sTest4 As String

    sollte man meiden, weil die Variablen randomized wären. Da diese Werte ja noch keine Zuweisung haben, auch wenn ich sage "As String" (Kann auch sein, dass ich da etwas durcheinander bringe)

    Aber klar, nach kurzem nachdenken;
    Dein Einzeiler hat ja keine nicht belegten Variablen, diese bekommen ja direkt eine Zuweisung..
    Ich denke, dass habe ich nun verstanden. (Bitte korrigier(t) mich, wenn es nicht so ist)
    Option Strict On!