Entwickler-Ecke
Sonstiges (Delphi) - Result von Funktionen - undefinierter Rückgabewert
galagher - Fr 11.03.11 17:21
Titel: Result von Funktionen - undefinierter Rückgabewert
Hallo zusammen!
Was ich schon immer wissen wollte: Wie macht ihr das mit Delphi's Compiler-Meldung "Rückgabewert von Funktion XY kann undefiniert sein", wenn ihr aber ganz genau wisst, dass das nicht eintreten
kann?
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function TForm1.ElementsToInt(aElement: TElements): Integer; begin case aElement of elPlayer: Result := iPlayer; elBorder: Result := iBorder; end; |
Es
muss definitiv ein Result aus case sein, undefiniert
kann hier
niemals eintreten, da aElement IMMER kompatibel zu TElements sein wird, denn, wenn man voraussestzt, dass das
case alle Möglichkeiten abdeckt, es zwangsläufig zu einem dieser Results kommen muss.
Eine Möglichkeit wäre es, ein "Default" zu definieren, also zB.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| function TForm1.ElementsToInt(aElement: TElements): Integer; begin Result := iBorder; case aElement of elPlayer: Result := iPlayer; elBorder: Result := iBorder; end; |
Ich mag das aber nicht so recht. Dennoch meine Frage: Wie macht man das, was ist sozusagen üblich?
jaenicke - Fr 11.03.11 17:23
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function TForm1.ElementsToInt(aElement: TElements): Integer; begin case aElement of elPlayer: Result := iPlayer; elBorder: Result := iBorder; else Result := iBorder; end; |
galagher - Fr 11.03.11 17:40
jaenicke hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function TForm1.ElementsToInt(aElement: TElements): Integer; begin case aElement of elPlayer: Result := iPlayer; elBorder: Result := iBorder; else Result := iBorder; end; | |
Ok, eine Lösung.
Kompatibilität bei Änderungen des Programmes im Sinne von "wer weiss, was sich noch alles ändert und ich nicht (mehr) bedenke. Dann kracht's hier womöglich, also sicher ist sicher.".
Jetzt knack mal diese Nuss - aBoard ist ein zweidimensionales Array:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function DestField(Key: Word; l, t: Integer): TElements; begin if Key = VK_UP then Result := aBoard[l, t-1]; if Key = VK_DOWN then Result := aBoard[l, t+1]; if Key = VK_LEFT then Result := aBoard[l-1, t]; if Key = VK_RIGHT then Result := aBoard[l+1, t]; end; |
Was soll denn hier sonst kommen, wir wissen doch genau, eines wird, ja
muss zutreffen, weil nämlich DestField immer - und IMMER NUR DANN! - aufgerufen wird, wenn wir eine der Pfeiltasten drücken?
Ist hier die Lösung auch im Sinne von
case Key of ... else ?
bummi - Fr 11.03.11 17:47
Delphi-Quelltext
1:
| else Result := aBoard[l, t]; |
galagher - Fr 11.03.11 17:57
bummi hat folgendes geschrieben : |
Delphi-Quelltext 1:
| else Result := aBoard[l, t]; | |
Hm... das passt für meine Zwecke überhaupt nicht, wäre sogar falsch, eine Unmöglichkeit, da das nicht vorkommen kann, weil l,t einmalig ist.
Ich werde aber meine Funktionen in diesem Sinne überarbeiten! Vielen Dank! :)
jaenicke - Fr 11.03.11 18:07
Wenn der Fall else nie auftreten kann bzw. darf, kannst du dort auch eine Exception werfen. Natürlich mit aussagekräftiger Meldung für dich. Dann kommt auch keine Warnung.
galagher - Fr 11.03.11 18:52
jaenicke hat folgendes geschrieben : |
| Wenn der Fall else nie auftreten kann bzw. darf, kannst du dort auch eine Exception werfen. Natürlich mit aussagekräftiger Meldung für dich. Dann kommt auch keine Warnung. |
Danke, ist besser!
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!