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

Für Fragen von Einsteigern und Programmieranfängern...

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

Beitragvon Mathias » 21. Sep 2017, 21:05 Clean Code für Variablennamen WAS:Verchiedene Bücher [...]

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3189
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon siro » 21. Sep 2017, 21:10 Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

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 21. Sep 2017, 21:24, insgesamt 3-mal geändert.
Grüße von Siro
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 222
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon corado » 21. Sep 2017, 21:12 Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

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...
corado
 
Beiträge: 43
Registriert: 7. Aug 2013, 16:00

Beitragvon m.fuchs » 21. Sep 2017, 21:15 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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
m.fuchs
 
Beiträge: 1670
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon corado » 21. Sep 2017, 21:19 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

eben, für so ein 1000 Seiten Buch finde ich vieles..naja..eher so 9,90€ mäßig....
corado
 
Beiträge: 43
Registriert: 7. Aug 2013, 16:00

Beitragvon m.fuchs » 21. Sep 2017, 21:19 Re: Verchiedene Bücher, GRUNDLEGEND andere Aussagen

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
m.fuchs
 
Beiträge: 1670
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Warf » 21. Sep 2017, 21:33 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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)
Warf
 
Beiträge: 615
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon af0815 » 22. Sep 2017, 13:51 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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).
af0815
 
Beiträge: 3257
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Timm Thaler » 22. Sep 2017, 14:58 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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. ;-)
Timm Thaler
 
Beiträge: 430
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon af0815 » 22. Sep 2017, 15:32 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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).
af0815
 
Beiträge: 3257
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Mathias » 22. Sep 2017, 16:19 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3189
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon corado » 22. Sep 2017, 16:54 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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;
 
corado
 
Beiträge: 43
Registriert: 7. Aug 2013, 16:00

Beitragvon Mathias » 22. Sep 2017, 17:12 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3189
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 22. Sep 2017, 22:26 Re: Clean Code für Variablennamen WAS:Verchiedene Bücher [..

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.
Warf
 
Beiträge: 615
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried