![]() |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Zitat:
|
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Selbst wenn D7:
- Class-Functions gab es definitiv schon - Class-Var bin ich nicht mehr sicher, aber ich glaub schon und wenn doch nicht, dann kann man das auch anders lösen (z.B. globale Variable in der Implementation) Gab es nicht ein Feature-Request von mir, wo ich mir wünschte, daß dieses standardmäßig mit dem Delphi aus dem Profil gefüllt wird, oder wo standardmäßig "nichts" da ausgewählt ist? |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Weniger zur Technik, sondern zur Philosophie:
Zitat:
Delphi-Quellcode:
!), aber ich finde grade bei Dingen wie etwas, das in seinem Konstruktor und Destruktor aktiv das Gesamtbild des Systems verändert es nicht angebracht, das automatisch ablaufen zu lassen wenn es out of scope geht.
[weak]
Habe ich ein
Delphi-Quellcode:
und jemand spaltet mir das, ohne es besser zu wissen in
procedure aufwändigeAufgabe();
begin // Schritt 1 TWaitCursor.Show(); doStuff(); doEvenMoreStuff(); // Schritt 2 transferMoney(); logStuff(); end;
Delphi-Quellcode:
auf, ist das Stundenglas nur noch für Schritt 1 zu sehen. Ja, hätte Refactor-Man es richtig gemacht, hätte er es in
procedure aufwändigeAufgabe();
begin schritt1(); schritt2(); end; procedure schritt1(); begin TWaitCursor.Show(); doStuff(); doEvenMoreStuff(); end; [...]
Delphi-Quellcode:
gelassen. Aber ich finde den Fehler kann man zu einfach machen.
aufwändigeAufgabe()
Ich packe gerne Dinge wie eine lokale
Delphi-Quellcode:
in eine interface-referenzierte Tonne um mir den try..finally-Block für das Aufräumen zu sparen, aber grade im Fall mit dem Cursor wäre mein persönlicher Geschmack wirklich weiterhin ein waschechter try..finally-Block. Da sieht man auch auf den ersten Blick was man hat- Ohne zu wissen, was sich hinter den
TStringList
Delphi-Quellcode:
-Kulissen abspielt.
TWaitCursor
|
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Unabhängig davon könnte man dem TE -da die Frage schon beantwortet wurde- den Tipp geben, hier keine Klasse zu erzeugen, sondern eher einen kleinen UI-Controller, der das übernimmt. Da Delphi das Paradigma 'Wer Dreck macht, muss aufräumen' vorgibt (Create/Free, Begin/EndUpdate usw.) sollte man das imho hier auch bewusst so umsetzen:
Delphi-Quellcode:
Und wenn Refactor-Man jetzt loslegt, muss er ja die Try-Finally-Blöcke zusammen lassen.
...
UIController.BeginWaitCursor; Try DoFoo(); DoBar(); UIController.BeginSQLWaitCursor; Try DoDatabaseStuff(); Finally UIController.EndWaitCursor; End; DoEvenMoreStuff(); Finally UIController.EndWaitCursor; End; ... Es dürfte in aktuellen Delphis auch mit Lambda-Ausdrücken gehen...
Delphi-Quellcode:
Da jetzt gerade ein Interface zu verwenden, erscheint mir etwas unglücklich.
Procedure WaitCursor (a : Action); // Oder wie das auch immer deklariert wird
begin oldCursor := Screen.Cursor; Screen.Cursor := clWait; try Action(); finally Screen.Cursor := oldCursor; End End; |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
@Dejan Vu
Wenn es danach geht, muss man die gesamte Vorgehensweise in Frage stellen. Denn Sinn macht das hier nur, wenn der echte Code in einem Thread gestartet wird (oder - igitt - mit
Delphi-Quellcode:
rumhantiert wird), ansonsten sieht man davon eher recht wenig (z.B. das Setzen des TrafficLights im Ausgangsbeitrag), da der MainThread blockiert ist.
Application.ProcessMessages
Wenn das aber in einem Thread erfolgt, dann wird der Cursor viel zu früh wieder zurück gesetzt. |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Hallo zusammen,
mir ist schon des öfteren mal eine Konstruktion wie
Delphi-Quellcode:
über den Weg gelaufen.
Myclass.Create;
Myclass.Machwas; Meiner Meinung nach richtig wäre
Delphi-Quellcode:
Da erstere Version auch funktioniert (?) könntet Ihr mich einmal aufklären was dahinter steckt?
Wert:=Myclass.Create;
Wert.Machwas; Wert.Free; Gruß K-H |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Es ist ein Konstruktoraufruf ohne das die zurückgegeben Referenz in einer Variable gespeichert wird
|
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Zitat:
Nja, das ist im Prinzip ein
Delphi-Quellcode:
(ohne Klasse), nur daß man den Code aufgeräumt hat und es in der zugehörigen Klasse positionierte.
procedure ShowWaitCursor;
Und nur weil man es ohne explizite Referenz nutzen kann
Delphi-Quellcode:
verbietet es keiner, wenn man in Sonderfällen dennoch eine Referenz verwendet.
begin
TWaitCursor.Show; // oder als einfache Funktion "ShowWaitCursor;" ... end; z.B.:
Delphi-Quellcode:
begin
X := TWaitCursor.Show; try ... finally X := nil; // oder X.Hide; end; ... end; |
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Falls ohne T, dann wird der Konstruktor einfach als normle Methode auf eine viorhandene Instanz angewendet.
|
AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Wenn
Delphi-Quellcode:
ein Klassentyp ist und dann muss
MyClass
Delphi-Quellcode:
eine
MyClass.MachWas
Delphi-Quellcode:
sein.
class procedure
Daraus folgt weiterhin, dass mit
Delphi-Quellcode:
ein Speicherleck erzeugt wird.
MyClass.Create;
Wenn
Delphi-Quellcode:
ist (Instanz-Variable), dann wird mit
MyClass : TMyClass;
Delphi-Quellcode:
der
MyClass.Create;
Delphi-Quellcode:
nochmals durchlaufen ohne eine weitere Instanz zu erzeugen. Dazu muss aber
constructor
Delphi-Quellcode:
schon mit einer gültigen Instanz belegt sein.
MyClass
So aus dem Kontext herausgerissen, kann man dazu also herzlich wenig sagen, ausser im Nebel herumstochern. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 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