Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - try finally - Prüfung in Ordnung?
D. Annies - So 23.01.11 22:06
Titel: try finally - Prüfung in Ordnung?
Hi, Delpher,
wer macht sich mal die Mühe, und kontrolliert die folgenden Schnipsel auf Richtigkeit?
Vielen Dank!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function isCellSelected(stringgrid: tstringgrid; x,y: longint): boolean; begin result := false; try if (x >= stringgrid.selection.left) and (x <= stringgrid.selection.right) and (y >= stringgrid.selection.top) and (y <= stringgrid.selection.bottom) then result := true; except end end;
function TBuchMain.ConnectOpOff:boolean; var rueckgabe : boolean; begin try Server := CreateOleObject('com.sun.star.ServiceManager'); Desktop := Server.createInstance('com.sun.star.frame.Desktop'); rueckgabe := true; showmessage('OpenOffice ist verfügbar (ConnectOpOff) '); except rueckgabe := false; end; result := rueckgabe; end; |
Es geht mir darum, ob der Code so in Ordnung ist oder verbessert werden sollte.
Gruß, Detlef
jaenicke - So 23.01.11 22:20
Wozu das try..except in der ersten Funktion? Da kann doch eine Exception allenfalls auftreten, wenn das StringGrid nicht existiert, und das kannst du ja abfangen.
D. Annies - So 23.01.11 22:27
Genau um solche Unnötigkeiten geht es mir, aber auch, wenn erwas noch fehlt!
Danke! :)
delfiphan - So 23.01.11 22:56
- Ich würde Server und Desktop als lokale Referenzen halten bis klar ist, dass nichts schiefgelaufen ist. Erst dann den Klassenfeldern zuordnen.
Dann spiele ich mal FxCop/StyleCop für Delphi: ;)
- Top-Level Exceptions sollte man nicht fangen, ausser man re-raised.
- Die Codeformatierung entspricht keiner gängigen Richtlinie.
- Hardcodierte Strings.
- isCellSelected Funktion in globalem Scope; Könnte man als Class-Helper gestalten oder sonst in eine Hilfsklasse tun.
- isCellSelected: Du weist dem Resultat mehrfach etwas zu. Du könntet das if weglassen und eine direkte Zuweisung machen.
- ConnectOpOff: Du weist dem Resultat mehrfach etwas zu.
- (angenommen ConnectOpOff ist nicht private): Du validierst stringgrid als Referenz nicht, bevor du sie verwendest.
D. Annies - So 23.01.11 23:22
Schade, dass ich (fast) nicht ein einziges Wort verstanden habe.
delfiphan - So 23.01.11 23:35
Irgendwie so, natürlich nicht alles direkt nacheinander; und alles, was public ist noch ein bisschen kommentieren.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| const ServiceManagerClassName = 'com.sun.star.ServiceManager'; DesktopClassName = 'com.sun.star.frame.Desktop';
type TStringGridHelper = class helper for TStringGrid public function IsCellSelected(X, Y: Integer): Boolean; end;
function TStringGridHelper.IsCellSelected(X, Y: Integer): Boolean; var Selection: TGridRect; begin Selection := Self.Selection; Result := (X >= Selection.Left) and (X <= Selection.Right) and (Y >= Selection.Top) and (Y <= Selection.Bottom); end;
function TBuchMain.Connect: Boolean; var Server, Desktop: Variant; begin try Server := CreateOleObject(ServiceManagerClassName); Desktop := Server.CreateInstance(DesktopClassName); except on E: EOleError do Exit(False); end; FServer := Server; FDesktop := Desktop; Result := True; end; |
jaenicke - So 23.01.11 23:58
Wobei class helper erst ab Delphi 2006 funktionieren und die parametrisierte Exit-Funktion ab Delphi 2009 oder so. ;-)
delfiphan - Mo 24.01.11 00:03
Naja, war auch nur ein Vorschlag. Vielleicht driftet meine Denkweise langsam Richtung C# ab...
D. Annies - Mo 24.01.11 09:07
Trotzdem danke für deine Idee!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!