AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Parameterauswahl als "set of" oder Constante
Thema durchsuchen
Ansicht
Themen-Optionen

Parameterauswahl als "set of" oder Constante

Ein Thema von norwegen60 · begonnen am 13. Feb 2009 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Parameterauswahl als "set of" oder Constante

  Alt 13. Feb 2009, 20:01
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:
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;
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.

Vielen Dank für eure Tips
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#2

Re: Parameterauswahl als "set of" oder Constante

  Alt 13. Feb 2009, 20:12
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Parameterauswahl als "set of" oder Constante

  Alt 13. Feb 2009, 20:35
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).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz