AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Thema durchsuchen
Ansicht
Themen-Optionen

Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

Ein Thema von Gloegg_FHBI · begonnen am 2. Jun 2014 · letzter Beitrag vom 4. Jun 2014
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:52
Im OP steht doch was von Delphi 7. Gab's da schon class vars, functions und properties?
Im Profil des TE steht was von XE2 (dafür habe ich mich entschieden )
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:56
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?
$2B or not $2B
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 11:08
Weniger zur Technik, sondern zur Philosophie:

Hier eine Variante ohne diese Abhängigkeiten und Überflüssiges (z.B. IWaitCursor ) und vor allem auch kaskadierbar
Kritik soll es nicht sein (ist ja technisch einwandfrei, Daumen hoch auf für das [weak] !), 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.

Habe ich ein
Delphi-Quellcode:
procedure aufwändigeAufgabe();
begin
   // Schritt 1
   TWaitCursor.Show();
   doStuff();
   doEvenMoreStuff();
   
   // Schritt 2
   transferMoney();
   logStuff();
end;
und jemand spaltet mir das, ohne es besser zu wissen in
Delphi-Quellcode:
procedure aufwändigeAufgabe();
begin
   schritt1();
   schritt2();
end;

procedure schritt1();
begin
   TWaitCursor.Show();
   doStuff();
   doEvenMoreStuff();
end;

[...]
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 aufwändigeAufgabe() gelassen. Aber ich finde den Fehler kann man zu einfach machen.


Ich packe gerne Dinge wie eine lokale TStringList 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 TWaitCursor -Kulissen abspielt.

Geändert von Der schöne Günther ( 2. Jun 2014 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#14

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 11:14
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:
...
  UIController.BeginWaitCursor;
  Try
    DoFoo();
    DoBar();
    UIController.BeginSQLWaitCursor;
    Try
      DoDatabaseStuff();
    Finally
      UIController.EndWaitCursor;
    End;
    DoEvenMoreStuff();
  Finally
    UIController.EndWaitCursor;
  End;
...
Und wenn Refactor-Man jetzt loslegt, muss er ja die Try-Finally-Blöcke zusammen lassen.

Es dürfte in aktuellen Delphis auch mit Lambda-Ausdrücken gehen...

Delphi-Quellcode:
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;
Da jetzt gerade ein Interface zu verwenden, erscheint mir etwas unglücklich.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 11:25
@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 Application.ProcessMessages rumhantiert wird), ansonsten sieht man davon eher recht wenig (z.B. das Setzen des TrafficLights im Ausgangsbeitrag), da der MainThread blockiert ist.

Wenn das aber in einem Thread erfolgt, dann wird der Cursor viel zu früh wieder zurück gesetzt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 12:11
Hallo zusammen,

mir ist schon des öfteren mal eine Konstruktion wie

Delphi-Quellcode:
Myclass.Create;
Myclass.Machwas;
über den Weg gelaufen.

Meiner Meinung nach richtig wäre
Delphi-Quellcode:
Wert:=Myclass.Create;
Wert.Machwas;
Wert.Free;
Da erstere Version auch funktioniert (?) könntet Ihr mich einmal aufklären was dahinter steckt?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 12:20
Es ist ein Konstruktoraufruf ohne das die zurückgegeben Referenz in einer Variable gespeichert wird
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 12:27
Zitat:
Myclass.xxx
Du meinst doch bestimmt TMyClass?

Nja, das ist im Prinzip ein procedure ShowWaitCursor; (ohne Klasse), nur daß man den Code aufgeräumt hat und es in der zugehörigen Klasse positionierte.


Und nur weil man es ohne explizite Referenz nutzen kann
Delphi-Quellcode:
begin
  TWaitCursor.Show; // oder als einfache Funktion "ShowWaitCursor;"
  ...
end;
verbietet es keiner, wenn man in Sonderfällen dennoch eine Referenz verwendet.

z.B.:
Delphi-Quellcode:
begin
  X := TWaitCursor.Show;
  try
    ...
  finally
    X := nil; // oder X.Hide;
  end;
  ...
end;
$2B or not $2B

Geändert von himitsu ( 2. Jun 2014 um 12:31 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 12:30
Falls ohne T, dann wird der Konstruktor einfach als normle Methode auf eine viorhandene Instanz angewendet.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 12:33
Wenn MyClass ein Klassentyp ist und dann muss MyClass.MachWas eine class procedure sein.

Daraus folgt weiterhin, dass mit MyClass.Create; ein Speicherleck erzeugt wird.

Wenn MyClass : TMyClass; ist (Instanz-Variable), dann wird mit MyClass.Create; der constructor nochmals durchlaufen ohne eine weitere Instanz zu erzeugen. Dazu muss aber MyClass schon mit einer gültigen Instanz belegt sein.

So aus dem Kontext herausgerissen, kann man dazu also herzlich wenig sagen, ausser im Nebel herumstochern.
Falls ohne T, dann wird der Konstruktor einfach als normle Methode auf eine viorhandene Instanz angewendet.
Das T ist nicht zwingend vorgeschrieben, aber sehr empfehlenswert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 00: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