![]() |
Parameterauswahl als "set of" oder Constante
Hallo zusammen,
ich möchte einer Procedure in einer Variablen verschiedene Parameter übergeben. In den Sourcen habe ich zwei Möglichkeiten gefunden. Zum einen, dass ich eine Menge definiere oder indem ich Constanten deklariere.
Delphi-Quellcode:
Welche Methode hat welche Vor- und Nachteile bzw. ist zu bevorzugen. Oder gibt es sogar noch eine optimalere Variante. In meiner Anwendung sind es bis zu 6 verschiedene Parameter.
procedure TForm1.Button1Click(Sender: TObject);
type // Möglichkeit 1 TMode = (scmOverwrite, scmCheck); TModes = set of TMode; const // Möglichkeit 2 ccmOverwrite = $0001; ccmCheck = $0002; procedure AnalyceSet(mode:TModes); // Möglichkeit 1 begin label1.Caption:=''; if scmOverwrite in mode then label1.Caption:='OverWrite '; if scmCheck in mode then label1.Caption:=label1.Caption + 'Check'; end; procedure AnalyceConst(mode:Word); // Möglichkeit 2 begin label2.Caption:=''; if mode = mode or ccmOverwrite then label2.Caption:='OverWrite '; if mode = mode or ccmCheck then label2.Caption:=label2.Caption + 'Check'; end; begin AnalyceSet([scmOverwrite, scmCheck]); AnalyceConst(ccmOverwrite + ccmCheck); end; Vielen Dank für eure Tips Gerd |
Re: Parameterauswahl als "set of" oder Constante
eigentlich funktioniert Beides gleich gut,
bis auf:
Code:
AnalyceConst(ccmOverwrite [b]or[/b] ccmCheck);
Bei der Menge hat du allerdings den Vorteil, daß Typ und Werte fest verbunden sind, allerdings kannst du die werte nur einer Variable oder einem Parameter von genau diesem Typ übergeben. Bei der Konstantenversion kannst du die Werte auch mal schön z.B. in einem Integer unterbringen. Auch ist es möglich (solange sich die enthaltenen Werte nicht kreuzen) verschiedene Typen zu kreuzen PS: hier bietet einem sogar die Codeverständigung nur die "zugelassenen" Werte, wenn man z.B. grad dabei ist einen entsprechenden Parameter auszufüllen. Mit Konstanten würde die Codevervolständigung alle untypisierten Konstanten auflisten, welche es gibt (incl. Integerkonstanten und Co.)
Delphi-Quellcode:
const X1 = $0001;
X2 = $0002; X3 = $0010; Y1 = $0100; Y2 = $1000; prozedure XProc(X: Word); prozedure YProc(X: Word); prozedure ZProc(XX: Word); XProc(X1); XProc(X2 or X3); YProc(Y2); ZProc(X1 or Y2); |
Re: Parameterauswahl als "set of" oder Constante
1. Ein Set ist nur eine sprachliche definierte Bitmaske mit Typprüfung.
2. Beachte bei den Konstanten, dass du immer nur einzelne Bits definierst (also 1, 2, 4, 8, 16, etc als Werte) 3. Dein Code von oben ist falsch: Die Bitkonstanten sollten mit ODER verknüpft werden, weil du sonst leicht (ein Wert zweimal hinzugefügt) auf falsche Werte kommst. 4. Eine Abfrage der einzelnen Konstanten kannst du natürlich wie in deinem Beispiel machen mit hinzu-odern eines Wertes und dann auf Veränderung zu prüfen. Wenn du dort aber die Prüfung auf die Konstante mit dem MSB machst, dann erhälst du falsche Ergebnisse. Von daher wäre ein ausmaskieren mit AND eine bessere Alternative (also niemals einen grösseren Wert bilden sondern immer den übergebenen Wert verkleinern und vergleichen). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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-2025 by Thomas Breitkreuz