![]() |
Re: guter stil????
Zitat:
|
Re: guter stil????
Zitat:
mein vorschlag:
Delphi-Quellcode:
Allerdings gefällt mir an diesem Code grundsätzlich gesehen die globale variable "m" nicht ...
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } function pruefen(n: int64): boolean; procedure zerlegen(n: Int64); end; var m: int64; Form1: TForm1; implementation {$R *.dfm} function TForm1.pruefen(n: int64): boolean; var x: Int64; begin Result := True; x := Round(n / 2); if(n >= 2)then begin while(x > 1)do begin if((n mod x) = 0)then begin Result := False; Break; end; Dec(x); end; end else Result := False; end; procedure TForm1.zerlegen(n: Int64); var x: int64; begin x := 2; while((n mod x) <> 0)do Inc(x); if(Length(Label2.Caption) > 0)then Label2.Caption := Label2.Caption + '*'; Label2.Caption := Label2.Caption + IntToStr(x); if not(pruefen(n div x))then zerlegen(n div x); m := m * x; end; procedure TForm1.Button1Click(Sender: TObject); begin m := 1; Label2.Caption := ''; if(pruefen(StrToInt(Edit1.Text)))then Label2.Caption := Edit1.Text + ' ist eine Primzahl!' else begin zerlegen(StrToInt(Edit1.Text)); Label2.Caption := Label2.Caption + '*' + IntToStr(StrToInt(Edit1.Text) div m); end; end; end. ciao, Philipp |
Re: guter stil????
Zitat:
Delphi-Quellcode:
pruefen := true;
// ist das Gleiche wie Result := true; // einfacher wäre jedoch pruefen := p; //oder halt P ganz wegzulassen |
Re: guter stil????
Zwei Sachen hab ich neben der Formatierung noch;
- Die Variablennamen sollten aussagekräftiger sein. ( Was zum Beispiel ist Label1 ? ) - Deine beiden selbstgeschriebenen Funktionen würde ich als Methoden deklarieren. Wenn du nicht weißt was ich damit meine, such mal unter Objectorientierter Programmierung (OOP) bzw dem Stichwort "class" nach. Gruß Thomas |
Re: guter stil????
Hallo,
Zitat:
Gruß xaromz |
Re: guter stil????
Moin Zusammen,
dann möchte ich noch einmal meine Formatierung von if-then-else einwerfen.
Delphi-Quellcode:
Das entspricht zwar nicht dem Borland Style-Guide, aber ich finde dieses Auftürmen von Zeilen
// Wenn ich garantiert nur einen Ausdruck benötige, und kein else:
if <Bedingung> then <Ausdruck>; // Wenn mehrere Ausdrücke benötigt werden, und kein else if <Bedingung> then begin <Ausdruck1>; <Ausdruck2>; <...>; end; // Wenn else benötigt wird, unabhängig von der Anzahl der Ausdrücke (also auch bei nur einem) if <Bedingung> then begin <Ausdruck1>; end else begin <Ausdruck1>; end;
Delphi-Quellcode:
ausgesprochen schlecht lesbar. Vor allem wird dadurch auch die jeweilige Routine in der Anzahl der Zeilen sehr aufgebläht, und dadurch, u.U., unübersichtlich (wenn ich da nur an geschachtelte if-then-else-Konstruktionen denke...).
end
else begin |
Re: guter stil????
Hmm, mein Vorschlag für if..then..else-Konstrukte:
Delphi-Quellcode:
bzw.
if a then
begin //Anweisung1 //Anweisung2 end else messageDlg('bla', mtError, [mbOK], 0);
Delphi-Quellcode:
bzw.
if a then
begin //Anweisung1 //Anweisung2 end else begin //Anweisung1 //Amweisung2 end;
Delphi-Quellcode:
Hab zwar bisher nich niemand anders gesehen, der so einrückt, aber beschwert hat sich von den Kollegen auch noch keiner ;-)
if a
then //Anweisung1 else //Anweisung2 //edit Wiederholte Satzzeichen wie "????" oder "!!!!" sind für mich auch nicht gerade guter Stil. Google mal nach "Terry Pratchett" und Ausrufezeichen ;-) |
Re: guter stil????
Delphi-Quellcode:
so würde ich es machen, denn bevor man an der Formatierung arbeitet sollte man den Algorithmus richtig machen.
function TForm1.pruefen(n: int64): boolean;
var x: Int64; begin Result := True; x := Round(n / 2); if(n >= 2)then begin while(x > 1)do begin if((n mod x) = 0)then begin Result := False; Break; end; Dec(x); end; end else Result := False; end;
Delphi-Quellcode:
Man muß für den einfachen Test einer Zahl auf Primzahl nur alle Zahlen kleiner Wurzel(N) die ungerade sind per Trialdivision testen. Desweiteren ist es sinnvoll bei der Trialdivision mit den kleinsten Zahlen beginnend zu testen da es von der Häufigkeitsverteilung der Primzahlfaktoren eher die kleinen Primzahlen sind die am meisten vorkommen. Die meisten zusammengesetzten Zahlen sind also zusammengesetzt aus kleinen Primzahlfaktoren. Die Laufzeit des Algorithmus ist also, wenn man die Trialdivision von unten nach oben laufen lässt, wesentlich besser.
function TForm1.Pruefen(const N: Int64): Boolean;
var Root,Candidate: Int64; begin Result := Odd(N) and (N > 2) if Result then begin Root := Trunc(Sqrt(N)); Candidate := 3; while Result and (Candidate <= Root) do begin Result := N mod Candidate <> 0; Candidate := Candidate +2; end; end else Result := N = 2; end; Und wenn es sich vermeiden lässt dann Break/Continue/Exit auch vermeiden. Desweiteren sollte der Pfad den man einen Source liest bei den Programverzweigungen den am meisten durchlaufenden Pfad folgen. Dh. im obigen Beispiel, das man zuerst im Source den Pfad hat der nun nicht auf 2 als einzigste gerade Primzahl testet. Gruß Hagen PS: sowas
Delphi-Quellcode:
also das begin OHNE Zeilenumbruch empfinde ich als die übelste Mode die sich in den letzten 10 Jahren eingebürgert hat ! Das entspricht dem Stil eines C Programmieres der versucht 7 verschachtelte Schleife mit 10 Abfragen und Schleifenzählern in eine einzigste Zeile zu pressen.if x then begin end; |
Re: guter stil????
Hi,
also ich empfinde das begin ohne Einrücken ganz im Gegenteil sogar als besser (schließlich mach ich's auch so :mrgreen: ). Die Zugehörigkeit des entsprechenden Blocks zur Schleife/if-Abfrage o.ä. wird durch die Einrückung bereits deutlich. Denn auf solche Konstruktionen wie dies
Delphi-Quellcode:
kann ich genau wie Christian Seehase gerne verzichten. Auch den viel gepredigten begin-end Block um einzeilige then/else-Zweige oder Schleifen finde ich überflüssig. Das müllt mir bloß den Code zu.
end
else begin
Delphi-Quellcode:
halte ich denn doch für deutlich übersichtlicher als
while x > 0 do
if x < 5 then inc(x) else dec(x);
Delphi-Quellcode:
Aber da das nur meine persönlichen 2 ct sind und Delphi zum Glück noch keinen zu seinem Glück zwingt kann's ja jeder so machen wie er selbst will.
while x > 0 do
begin if x < 5 then begin inc(x); end else begin dec(x); end; end; Gruß Christian |
Re: guter stil????
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz