Bereichspruefung property index

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Bereichspruefung property index

Beitrag von Eclipticon »

Hi,

ich verwende in einem Objekt mehrere Properties nach dem Schema

Code: Alles auswählen

TThing =  class(TObject)
protected
function GetSomething(Index: integer): integer;
procedure SetSomething(Index: integer; Value: integer);
published
property AlphaSomething: integer index 1 Read GetSomething Write SetSomething;
property BetaSomething: integer index 2 Read GetSomething Write SetSomething;
end;
Ich wuesste gerne, wie ihr die Bereichspruefung von Index im Getter und Setter realisieren wuerdet.

Gar nicht, weil der Parameter ohnehin nicht vom Nutzer abhaengig ist? Nur zur Testzeit ueber Assertions? Eine echte Bereichspruefung auch in der finalen Version, trotz kleinem Performanceverlust?

Danke :-)

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bereichspruefung property index

Beitrag von Scotty »

Nur aus Interesse: Wozu braucht man so etwas? Richtig überladen (property Value:string index 1... property Value:byte index 2...) kann man die Eigenschaften damit wohl auch nicht, oder?

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Bereichspruefung property index

Beitrag von Eclipticon »

Scotty hat geschrieben:Nur aus Interesse: Wozu braucht man so etwas?
Ich verwend es zu Beispiel in einem Objekt, das mit Koordinaten umgeht. Eine separate Implementierung von GetX, GetY, GetZ wuerde extrem viel Code duplizieren, obwohl es nur eine Zeile Unterschied gibt. Daher GetSomeCoordinate - und in dieser einen Zeile werte ich jetzt Index aus.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bereichspruefung property index

Beitrag von Scotty »

Also ähnlich wie das hier?

Code: Alles auswählen

type
  TDimension=(dx,dy,dz);
function GetCoordinate(aIndex:TDimension):float;
property Coordinate[index:TDimension]:float read GetCoordinate;

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bereichspruefung property index

Beitrag von Scotty »

Ich hab es gerade hier gelesen: http://www.freepascal.org/docs-html/ref/refsu31.html" onclick="window.open(this.href);return false;. Wobei mir der Nutzen nicht wirklich klar ist.
Vielleicht hilft dir ja meine Fragerei zum Thema bei deinem Problem. Ich benutze jedenfalls array properties, bevorzugt mit Sets - da dann braucht es auch keine Bereichsprüfung.

Ansonsten mag ich exit nicht besonders und schreibe lieber

Code: Alles auswählen

if (aIndex>...) and (aIndex<...) then
begin
end;
statt

Code: Alles auswählen

if (aIndex<=...) or (aIndex>=...) then
  exit;
...

Antworten