AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Static?

Ein Thema von Fridolin Walther · begonnen am 25. Jun 2009 · letzter Beitrag vom 25. Jun 2009
Antwort Antwort
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#1

Static?

  Alt 25. Jun 2009, 12:28
Hallo,

gibt es im Delphi Sprachumfang ein Äquivalent zu static in C? Derzeit behelfe ich mir so:

Delphi-Quellcode:
{$WRITEABLECONST ON}
function doSomeTests(stringToTest : WideString) : Boolean;
const
  lastStringTested : WideString = '';
begin
  Result := TRUE;
  if WideLowerCase(stringToTest) = WideLowerCase(lastStringTested) then
    exit;
  {Was auch immer ich dort teste ...}
  lastStringTested := stringToTest;
end;
{$WRITEABLECONST OFF}
Das find ich in gewisser Weise unschön. Allerdings möchte ich den primitiven "Cache" der hier gebaut wird, ungern ausserhalb der Funktion realisieren. Auch eine globale Variable möchte ich vermeiden. In C könnte ich lastStringTested einfach als static definieren und der Wert dieser Variable bleibt über weitere Aufrufe bestehen. In Delphi scheint diese Möglichkeit nicht zu existieren, oder?

Um Hinweise auf die Suche zu vermeiden:
Ja, das Thema wurde bereits diskutiert, vor einigen Jahren. Nur entwickelt sich Delphi als Sprache ja durchaus weiter. Könnte ja sein, daß static mittlerweile zum Sprachumfang gehört oder aber es mittlerweile eine Möglichkeit gibt, es eleganter zu implementieren, als ich es tat .
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Static?

  Alt 25. Jun 2009, 12:51
Zitat von Fridolin Walther:
Auch eine globale Variable möchte ich vermeiden.
Klar, das ist die Dunkle Seite der Macht

Man könnte eine Klasse verwenden, die den Testcode enthält, und auf (strict) private Instanz- oder Klassenvariablen zugreifen kann.

Aufruf wäre dann

  if TStringTest.DoSomeTests(SomeWideString) then ... static class methods werden unter anderem hier beschrieben:

New Delphi language features since Delphi 7
http://edn.embarcadero.com/article/34324


Die Deklaration sollte dann etwa so aussehen:

Delphi-Quellcode:
  
TStringTest = class
  strict private
     class var
     LastStringTested: WideString;
  public
    function DoSomeTests(AString: WideString);
end;
Vorteile: auf WRITEABLECONST kann man verzichten, durch Verwendung von OOP ist die Testfunktionalität sehr leicht und konsistent erweiterbar, Testklassen können auch einfach ausgetauscht werden (z.B. bei Verwendung des Visitor-Patterns), Vererbung kann benutzt werden.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Static?

  Alt 25. Jun 2009, 13:04
Im Endeffekt würde ich eine globale Variable gegen ein globales, statisches Objekt tauschen. Ich seh da nicht den Vorteil .
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Static?

  Alt 25. Jun 2009, 13:07
Zitat von Fridolin Walther:
Im Endeffekt würde ich eine globale Variable gegen ein Globales statisches Objekt tauschen. Ich seh da nicht den Vorteil .
Eine "Globale Variable" ist IMHO etwas anderes, sie muss dazu ja von überall zuweisbar sein. Und du kannst die Klasse ja auch in den implementation Teil verlagern und für die DoSomeTests Funktion eine Weiterleitung ins interface, dann sieht man noch weniger von der OOP - Implementierung.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

Re: Static?

  Alt 25. Jun 2009, 14:48
Wenn man eine class function draus macht, spart man sich das Instanzieren einer Klasse:

Delphi-Quellcode:
TStringTest = class
  strict private
     class var
     LastStringTested: WideString;
  public
    class function DoSomeTests(AString: WideString): Boolean;
end;
Der Aufruf erfordert dann allerdings den Klassentyp:

TStringTest.DoSomeTests
Uwe Raabe
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.003 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Static?

  Alt 25. Jun 2009, 14:57
Zitat von Uwe Raabe:
Wenn man eine class function draus macht, spart man sich das Instanzieren einer Klasse
Ups, das class hatte ich auch schreiben wollen, in meinem esten Posting war das Beispiel daher ja auch:

if TStringTest.DoSomeTests(SomeWideString) Warum hat der Editor hier eigentlich keinen Syntaxchecker ?
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Static?

  Alt 25. Jun 2009, 15:16
Link aus einem anderen Thread entnommen: http://edn.embarcadero.com/article/34324 (da steht auch das Wörtchen static).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:27 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