Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem in function: Result doppelt deklariert
firefuzy - Sa 14.03.09 16:44
Titel: Problem in function: Result doppelt deklariert
Hallo
Mich würde interessieren ob es eine Möglichkeit gibt dem Compiler mitzuteilen, dass man der Variable Result einen Wert zuweisen will und nicht einer anderen Property die auch Result heißt.
z.B.: System.Exit statt Exit, nur eben für Result
In meinem konkreten Fall sieht das so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TKundenList.SameKundeExists(Kunde: TKunde): TKundenStatus; ... with Datenbank do begin Lock; ... UnLock; if Results[0][0] > 0 then Result := (KS_ExistsInDB); end; ... end; |
In der Delphihilfe habe ich leider nichts gefunden. Wenn man normalerweise Rechtsklick->"Find declaration" auf Result macht springt der Cursor nur zum Anfang der Funktion, so komme ich also auch nicht weiter.
Vielen Dank für eure Hilfe
firefuzy
Delete - Sa 14.03.09 16:51
Was spricht dagegen die erste Result Variable sinnvoll und aussagekräftig zu bennnen?
Gausi - Sa 14.03.09 16:51
Lass das with Datenbank do begin weg und arbeite stattdessen mit Datenbank..
Soweit ich weiß, ist so etwas einer der Gründe, weswegen einige Leute der Meinung sind, dass dieses with schlechter Stil ist. ;-)
Regan - Sa 14.03.09 16:51
Ich würde Funktionen nur für Integer oder String nehmen. Du gibst hier ja eine etwas komplexere Einheit zurück. Dafür schlage ich eine Prozedur mit Out-Parameter vor:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TKundenList.SameKundeExists(Kunde: TKunde; out AKundenStatus: TKundenStatus); ... with Datenbank do begin Lock; ... UnLock; if Results[0][0] > 0 then AResult := (KS_ExistsInDB); end; ... end; |
Edit: Oder so wie Luckie.
Edit: Oder wie Gausi
:wink:
firefuzy - Sa 14.03.09 17:43
@Luckie: Datenbank ist eine 3rd Party Komponente, an der ich im Sinne von "Never touch a running system" lieber nicht herumfummle. ;)
@Gausi: ich persönlich finde, dass with sehr hilfreich für die Übersichtlichkeit ist, weshalb ich es nur ungern weglassen würde.
Ich werde das Problem dann so lösen wie Regan es vorgeschlagen hat.
Vielen Dank an euch Drei :D
firefuzy
Dunkel - Sa 14.03.09 18:07
Alternativ könnte man auch den Namen der Funktion als Rückgabe-Variable verwenden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TKundenList.SameKundeExists(Kunde: TKunde): TKundenStatus; ... with Datenbank do begin Lock; ... UnLock; if Results[0][0] > 0 then SameKundeExists:= (KS_ExistsInDB); end; ... end; |
Aber ich (bestimmt auch andere) würde(n) davon abraten. Es ist schlechter Lesbar, wenn man den Namen der Funktion ändert, muss man auch im Code rumfummeln, ...
Die out-Variable ist definitiv die bessere Alternative.
alzaimar - Sa 14.03.09 18:14
What I eigentlich not verstehen do, is the fact, das you deutsche and englishe words in dein Code mishst. Whyso? Dat sieht doch blöd aus. Have you Angst vor your own Sprache? :wink:
Ansonsten schließe ich mich Gausi an: Lass das 'With' weg. Wie Du siehst, sorgt es für Probleme. Hier hast Du Glück, weil der Fehler vom Compiler erkannt wird. Aber was, wenn nicht?
Gegen die Verwendung des Funktionsnamens anstelle von 'Result' ist an sich nichts einzuwenden, nur sollte man das dann konsistent durchziehen.
jaenicke - Sa 14.03.09 18:34
firefuzy hat folgendes geschrieben : |
| @Gausi: ich persönlich finde, dass with sehr hilfreich für die Übersichtlichkeit ist, weshalb ich es nur ungern weglassen würde. |
Ich selbst nutze with wenn, dann nur an Stellen wo absolut klar ist was gemeint ist und nur für wenige Zeilen. Ein Beispiel wäre das Hinzufügen eines Eintrags in eine ListView.
Delphi-Quelltext
1: 2: 3: 4: 5:
| with ListViewX.Items.Add do begin Caption := Subitems.Add() end; |
Aber mehr als so wenige Zeilen oder mit weiterer Verschachtelung würde ich es niemals verwenden. Und wenn ich selbst Code schreibe verwende ich es normalerweise selbst dort nicht.
Gerade bei Datenstrukturen, die nicht bei Delphi dabei sind, erschwert es nicht nur die Lesbarkeit, wenn man erst raten muss was wozu gehört, sondern verhindert auch ein einfaches Debugging. Maus drüberhalten zum Auswerten ist da nämlich nicht zum Beispiel. Das kann man dann alles in Strg + F7 schön manuell reintippen... :puke:
Hier in diesem Fall ist aber offensichtlich
nicht klar was gemeint ist, und also ist das with absolut fehl am Platze.
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!