Clean Code für Variablennamen WAS:Verchiedene Bücher [...]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Clean Code für Variablennamen WAS:Verchiedene Bücher [...]

Beitrag von Mathias »

Wen schon, ich schreibe so was so:

Code: Alles auswählen

VAR 
  kurs, euro: Real;
  s: Char;


Ich finde zum Beispiel, dass Prozeduren und Funktionen nicht länger als sieben Zeilen sein sollten.

Meine sind meistens länger, aber ich versuche. das sie nicht länger als eine Bildschirmseite werden.

Es gibt viele Code, die es vermeiden, Zeilen länger als 80 Zeichen zu schreiben.
Da bin ich anderer Meinung, für etwas hat man einen grossen Bildschirm, das 80 Zeichen-Zeitalter von DOS ist vorbei.

So etwas sieht nach meiner Meinung beschissen aus. :roll:

Code: Alles auswählen

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

Beitrag von siro »

Ich mag das bei vielen Parametern gern so:

Code: Alles auswählen

procedure TForm1.FormMouseMove(Sender : TObject;      // Der Auslöser der Mausbewegung
                               Shift  : TShiftState;  // aktueller Tastenstatus Shift CTRL usw.
                               X      : Integer;      // Maus Koorinate X in Pixel
                               Y      : Integer);     // Maus Koorinate Y in Pixel
begin
 
Zuletzt geändert von siro am Do 21. Sep 2017, 22:24, insgesamt 3-mal geändert.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

Beitrag von corado »

hmm..ja, auf jedenfall, aber wie ist es besser? so auch nicht....

Code: Alles auswählen

procedure TForm1.FormMouseMove(Sender: TObject;
                                                                  Shift: TShiftState;
                                                                     X, Y: Integer);
begin
end;
 


hmm.super..so zerreißt er es komplett...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von m.fuchs »

Ich habe daraus mal ein eigenes Thema gemacht, sonst wird es zu Off-Topic für den Originalposter.
Mathias hat geschrieben:Wen schon, ich schreibe so was so:

Code: Alles auswählen

VAR 
  kurs, euro: Real;
  s: Char;



Das ist kaum besser. kurs und euro was soll das sein? WechselKurs und WertInEuro wäre vielleicht akzeptabel, je nachdem was drin steht.

Und wer eine Char-Variable s nennt sollte mit schweren Schmerzen bestraft werden. Oder gleich gefeuert, je nach Gehaltsklasse und Visitenkartentitel.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von corado »

eben, für so ein 1000 Seiten Buch finde ich vieles..naja..eher so 9,90€ mäßig....

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

Beitrag von m.fuchs »

corado hat geschrieben:hmm..ja, auf jedenfall, aber wie ist es besser? so auch nicht....


Einfach so:

Code: Alles auswählen

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);


Wie Mathias richtig sagte, das 80-Zeichen-pro-Zeile-Zeitalter ist vorbei. Zu lang (so 300 Zeichen oder so) sollte es natürlich auch nicht werden, das oben ist aber völlig ok.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von Warf »

Mathias hat geschrieben:Es gibt viele Code, die es vermeiden, Zeilen länger als 80 Zeichen zu schreiben.
Da bin ich anderer Meinung, für etwas hat man einen grossen Bildschirm, das 80 Zeichen-Zeitalter von DOS ist vorbei.

So etwas sieht nach meiner Meinung beschissen aus. :roll:

Code: Alles auswählen

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin


Naja Studien haben gezeigt, das bei einer Schriftgröße von 8-11pt 50-70 Zeichen die Optimale Zeilenlänge für hohe (und schnelle) Lesbarkeit ist. Das gilt natürlich für richtige Sprache, und Code muss man da noch etwas anders betrachten. Dein Beispiel ist ja z.B. eine Definition. Die können meines Erachtens nach so lange sein wie sie wollen. Aber der Tatsächlich Programmflow sollte schön kompakt sein. Am schlimmsten ist es wenn ich eine Bedingung mit vielen And oder Or sehe, die in eine Zeile gepackt ist. Oder geschachtelte Funktionsaufrufe.
Für if Abfragen sollte mMn nur zusammengehörige abfragen in eine Zeile (z.B. Assigned(a) And (a.Foo = 1) oder so), ansonsten alle Ands und Ors in neue Zeilen.
Bei geschachtelten Funktionsaufrufen halte ich mich an die 80 Zeichen Regel. Von der ersten Funktion die diese bricht, verteile ich alle Argumente auf je eine neue Zeile:

Code: Alles auswählen

EineFunktionMitEinemLangenNamenDie3ArgumenteNimmt(Argument1NimmtDreiArgumente(Eins,
    Zwei(a),
    Drei(b, c)),
  Argument2Nicht,
  3);

Somit sind alle zusammen gehörigen Argumente auf einer Ebene, und ich halte mich ungefähr an die 50-70 Zeichen die am leserlichsten sind (80 - Tabeinrückung)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von af0815 »

Das Problem ist schon lange nicht mehr der BS, sondern der Drucker. Wenn man Teile des Codes drucken muß und zwar so das er lesbar bleiben soll, so sollte man sich auch schon beim Stil daran halten, weil sonst wird es in der Doku öde. Vielen fällt es gar nicht auf, weil sie auch keine (professionelle) Doku zu ihren Programmen erstellen (müssen).
Aber auch am Bildschirm ist doch der Bereich fürs eigentliche Programm schon relativ klein, man hat die verschiedensten Fenster ja herumgedockt, dann im Quelltext dauernd quer zu scrollen ist auch nicht der Hammer.

VariablenNamen, das ist so eine Sache mit der ich auch hin und wieder auf Kriegsfuß stehe :-) Die Einbuchstabenvariablen sind für mich immer lokale Variablen für Schleifen (i,j,k,...), temporäre wie s, s1,s2,str,t,tmp für Zwischenergebnisse und sollten für mich auch nicht länger als max 5 Zeilen halten. Ich brauche sie auch oft nur um Ausgaben im Debugger zu haben. Ich lege sie zuerst meist mit einem Buchstaben an und versuche innerhalb einer Routine sie nicht mit unterschiedlichen Zweck zu verwenden. Wenn ja, dann ist es meist an der Zeit ein refactoring auf einen richtigen, sinnvollen Namen zu machen, weil dann macht es Sinn.

Aber man entwickerlt mit den Jahren halt so seine Eigenheiten. Damit muss man sich halt auseinandersetzen wenn wer Styleguides vorschreibt.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von Timm Thaler »

af0815 hat geschrieben:Aber auch am Bildschirm ist doch der Bereich fürs eigentliche Programm schon relativ klein, man hat die verschiedensten Fenster ja herumgedockt, dann im Quelltext dauernd quer zu scrollen ist auch nicht der Hammer.


Auf zwei 24ern nebeneinander bekommt man schon eine Menge Zeichen unter. ;-)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von af0815 »

Timm Thaler hat geschrieben:
af0815 hat geschrieben:Aber auch am Bildschirm ist doch der Bereich fürs eigentliche Programm schon relativ klein, man hat die verschiedensten Fenster ja herumgedockt, dann im Quelltext dauernd quer zu scrollen ist auch nicht der Hammer.


Auf zwei 24ern nebeneinander bekommt man schon eine Menge Zeichen unter. ;-)

Aber ich will nicht für Parkinson trainieren, ich bin da eher der Ja-Sager.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von Mathias »

Bei geschachtelten Funktionsaufrufen halte ich mich an die 80 Zeichen Regel. Von der ersten Funktion die diese bricht, verteile ich alle Argumente auf je eine neue Zeile:

Noch ein gutes Beispiel dazu. der ganze Code ist nur ein Befehl, aber trotzdem gut leserlich.

Code: Alles auswählen

    MenuBar := New(PMenuBar, Init(Rect, NewMenu(
      NewSubMenu('~D~atei', hcNoContext, NewMenu(
        NewItem('~B~eenden', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil)),
 
      NewSubMenu('Dem~o~', hcNoContext, NewMenu(
        NewItem('Einfach ~1~', '', kbNoKey, cmAbout, hcNoContext,
        NewSubMenu('~V~erschachtelt', hcNoContext, NewMenu(
          NewItem('Menu ~0~', '', kbNoKey, cmAbout, hcNoContext,
          NewItem('Menu ~1~', '', kbNoKey, cmAbout, hcNoContext,
          NewItem('Menu ~2~', '', kbNoKey, cmAbout, hcNoContext, nil)))),
        NewItem('Einfach ~2~', '', kbNoKey, cmAbout, hcNoContext, nil)))),
 
      NewSubMenu('~H~ilfe', hcNoContext, NewMenu(
        NewItem('~A~bout...', '', kbNoKey, cmAbout, hcNoContext, nil)), nil))))));


Das Problem ist schon lange nicht mehr der BS, sondern der Drucker. Wenn man Teile des Codes drucken muß und zwar so das er lesbar bleiben soll, so sollte man sich auch schon beim Stil daran halten, weil sonst wird es in der Doku öde.

Wieviel mal habe ihr schon Code ausgedruckt, bei mir ist dies schon viele Jahre her. Aus diesem Grund ist die Leserlichkeit auf dem BS für mich wichtiger.
Ich denke mal, wen man mal was für eine Schularbeit ausdrucken muss, kann man vorher den Code noch ein wenig anpassen. :wink:

Bei folgen Code bevorzuge ich die erste Variante, ansonsten gehen 5 sichtbare Zeilen verloren, auch finde ich sie leserlicher.

Code: Alles auswählen

// Variante 1
  if i = 1 then begin
    a := 2;
  end else begin
    a := 3;
  end;
 
// Variante 2 
  if i = 1 then
  begin
    a := 2;
  end
  else
  begin
    a := 3;
  end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von corado »

wäre in diesem Fall nicht sowieso möglich

Code: Alles auswählen

// Variante 1
  if i = 1 then
    a := 2
  else
    a := 3
  end;
 


etwas schade finde ich das nicht möglich ist

var a, i : Byte = 0;
sondern nur

Code: Alles auswählen

 
var a : Byte = 0;
    i : Byte = 0;
 

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von Mathias »

wäre in diesem Fall nicht sowieso möglich

Bei diesem Einzeiler natürlich schon.So nebenbei hast du ein end zu viel. :wink:
Das könnte man noch einfacher machen.

Code: Alles auswählen

  if i = 1 then a := 2 else a := 3;

Bei mir ging es um das begin und else, welches in eine neue Zeile bekommt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

Beitrag von Warf »

Code: Alles auswählen

  if i = 1 then begin
    a := 2;
  end else begin
    a := 3;
  end;


das verwechsele ich zu leicht mit

Code: Alles auswählen

  if i = 1 then
    a := 2
  else
    a := 3;


Und das übersehen ob es mit begin oder ohne ist, hat schon zu vielen schönen bugs bei mir geführt, sodass ich die niemals mit in eine Zeile schreibe wo man sie übersehen kann

corado hat geschrieben:etwas schade finde ich das nicht möglich ist

var a, i : Byte = 0;
sondern nur

Code: Alles auswählen

 
var a : Byte = 0;
    i : Byte = 0;
 


Kann ich nur zustimmen, obwohl ich fast nie Variablen bei der definition Werte zuweise, ich mache das fast immer im Code.

Antworten