Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi With Class1, Class2 do (https://www.delphipraxis.net/84091-class1-class2-do.html)

smudo 11. Jan 2007 09:08


With Class1, Class2 do
 
Ich hab mal eine Frage...

Ich verwende folgendes (stark reduziert):
Delphi-Quellcode:
With Class1, Class2 do
  DoSomething;
Wenn beide Klassen eine Methode DoSomething haben wird nur die Methode von Class2 ausgeführt.
Kann man Delphi dazu bringen, beide nacheinander auszuführen? Ich meine genau in diesem Konstrukt?

René

Elvis 11. Jan 2007 09:23

Re: With Class1, Class2 do
 
Ich nehme an, er führt die Implementierung von der zuletzt aufgeführten Instanz an.
Sowas überhaupt zu nutzen grenzt schon fast an vorsätzliches Bug-einschleusen. ;)

edit: au mann, jetzt fang ich selbst schon an Klasse und Instanz zu vertauschen :wall:

Robert Marquardt 11. Jan 2007 09:44

Re: With Class1, Class2 do
 
In der Delphi-Hilfe nachschlagen.
Delphi-Quellcode:
with Class1, Class2 do
ist aequivalent zu
Delphi-Quellcode:
with Class1 do
  with Class2 do
Die Bindung ist natuerlich immer zur innersten Klammer.

Bernhard Geyer 11. Jan 2007 09:59

Re: With Class1, Class2 do
 
Zitat:

Zitat von Elvis
Ich nehme an, er führt die Implementierung von der zuletzt aufgeführten Klasse an.
Sowas überhaupt zu nutzen grenzt schon fast an vorsätzliches Bug-einschleusen. ;)

Kann ich nur zustimmen. Überall wo in unserem Code noch with...-Reste sind werden diese bei anstehender Überarbeitung/Erweiterung der Unit entfernt. Spart einige sterbende Gehirnzellen.

Union 11. Jan 2007 10:22

Re: With Class1, Class2 do
 
Ich setze das gerne ein, aber nur einstufig und Lokal begrenzt. Oder will man z.B. so was etwa 10 mal schreiben:
Delphi-Quellcode:
cxGridLsKopfDBTableViewLsKopf.TcxGridDataRow(ViewData.Records[i]).Values[...]

r2c2 11. Jan 2007 10:35

Re: With Class1, Class2 do
 
Zitat:

Zitat von Union
Ich setze das gerne ein, aber nur einstufig und Lokal begrenzt. Oder will man z.B. so was etwa 10 mal schreiben:
Delphi-Quellcode:
cxGridLsKopfDBTableViewLsKopf.TcxGridDataRow(ViewData.Records[i]).Values[...]

Nö, will man nicht. Man muss aber auch hier kein with nehmen. Ein einfacher typisierter Pointer tuts auch...

mfg

Christian

smudo 11. Jan 2007 12:20

Re: With Class1, Class2 do
 
Wow, einfache typisierte Pointer. :roll: Das klingt mir wenig verlockend.
Ich werde natürlich weiterhin wie gewohnt With verwenden, da ich daran interessiert bin, möglichst wenig Code eintippen zu müssen (das Beispiel von Union zeigt den Grund).

Ich sehe meine Frage als mit Nein beantwortet. Muss ich halt eine Proc draus machen, in der ich nur noch eine übergebene Klasse verwende. Natürlich mit "With Class do" :zwinker:

r2c2 11. Jan 2007 12:27

Re: With Class1, Class2 do
 
Zitat:

Zitat von smudo
Wow, einfache typisierte Pointer. :roll: Das klingt mir wenig verlockend.

Warum? Je nachdem, was du machst, kann das IMHO deutlich übersichtlicher sein, als ein with ohne Alias...

Delphi-Quellcode:
var
  value: <TypVonValues>;
begin
  ...
  value := cxGridLsKopfDBTableViewLsKopf.TcxGridDataRow(ViewData.Records[i]).Values[...];
  value.Methode;
  value.Property := test;
  ...
Du musst ein with weniger, ein do weniger und einen begin..end-Block weniger schreiben. Dafür nur ein Zeilchen mehr und hast dafür auch noch n sprechenden Alias...

mfg

Christian

Elvis 11. Jan 2007 12:32

Re: With Class1, Class2 do
 
Zitat:

Zitat von r2c2
Du musst ein with weniger, ein do weniger und einen begin..end-Block weniger schreiben. Dafür nur ein Zeilchen mehr und hast dafür auch noch n sprechenden Alias...

Und du weißt auch immer was auf wem aufgerufen wird.
Nicht zu vergessen, das Debugging mit with-Gedöns eher einem Selbstmartyrium gleicht als professionellem Entwickeln.

smudo 11. Jan 2007 12:41

Re: With Class1, Class2 do
 
Ich gebe zu, dass r2c2 die elegantere Form verwendet, die noch dazu besser zu debuggen ist. Ich hab das nur nicht mit dem Begriff einfacher typisierter Pointer in Verbindung gebracht.
Ich werd mal meine With-Verwendung überdenken.

Vielen Dank.

hanspeter 11. Jan 2007 12:43

Re: With Class1, Class2 do
 
Zitat:

Zitat von smudo
Ich hab mal eine Frage...

Ich verwende folgendes (stark reduziert):
Delphi-Quellcode:
With Class1, Class2 do
  DoSomething;
Wenn beide Klassen eine Methode DoSomething haben wird nur die Methode von Class2 ausgeführt.
Kann man Delphi dazu bringen, beide nacheinander auszuführen? Ich meine genau in diesem Konstrukt?

René

In keiner anderen Programmiersprache gibt es dieses hochgratig kaputte Konstrukt.
Und das mit gutem Grund.

Gruß Peter

smudo 15. Jan 2007 11:45

Re: With Class1, Class2 do
 
Zitat:

Zitat von hanspeter
In keiner anderen Programmiersprache gibt es dieses hochgratig kaputte Konstrukt.

Ähm, :warn: es heißt übrigens hochgradig.
Außerdem, was angeblich nur eine Programmiersprache kann, muss nicht schlecht sein (Wie viele kennst du denn so :zwinker:)

Was ich auf jeden Fall nützlich finde und auch weiter nutzen werde ist folgende Möglichkeit:
Delphi-Quellcode:
with TMyForm.Create(Nil) do
try
  ...
  ShowModal;
  ...
finally
  Release;
end;
Nur mal ne Frage OT, falls jemand noch diesen Thread verfolgt. Wie verhält sich das denn unter C# mit Using zweier Klassen, welche die gleiche Methode besitzen?

Und hier noch ein Gruß an alle With-Do-Nutzer :cheers:

OregonGhost 15. Jan 2007 12:28

Re: With Class1, Class2 do
 
Zitat:

Wie verhält sich das denn unter C# mit Using zweier Klassen, welche die gleiche Methode besitzen?
In C# gibt es kein dem pascalschen with entsprechendes Konstrukt. Das using dient lediglich dem automatischen Dispose und kann daher auch nur mit Klassen verwendet werden, die die IDisposable-Schnittstelle implementieren. Eine Verkürzung der Aufrufe gibt es innerhalb des using-Blocks nicht. Davon abgesehen können in einer using-Anweisung nur Objekte eines Typs deklariert werden.

Elvis 15. Jan 2007 12:42

Re: With Class1, Class2 do
 
Zitat:

Zitat von smudo
Und hier noch ein Gruß an alle With-Do-Nutzer :cheers:

Benutze ich auch, nur sieht das so aus und ist nicht Delphi ;) :
Delphi-Quellcode:
with miep := someLongIdentifier.Miep do
  miep.DoSomething();

mkinzler 15. Jan 2007 12:47

Re: With Class1, Class2 do
 
Zitat:

Benutze ich auch, nur sieht das so aus und ist nicht Delphi Wink :
Was dann? (Chrome?)

Elvis 15. Jan 2007 12:57

Re: With Class1, Class2 do
 
Zitat:

Zitat von mkinzler
Was dann? (Chrome?)

Ja, Chrome erlaubt per default keine with clause ohne Alias.

hanspeter 15. Jan 2007 19:16

Re: With Class1, Class2 do
 
Zitat:

Zitat von smudo
Außerdem, was angeblich nur eine Programmiersprache kann, muss nicht schlecht sein (Wie viele kennst du denn so :zwinker:)

Willst du das wirklich wissen?
Na lass mich mal rechnen.

Angefangen habe ich mit reinem Assembler. Mein damals größtes Programm waren so etwa 18.000 Lochkarten.
Später kam dann Makroassembler dazu. Da habe ich ein Betriebssystem für einen Magnettrommel-Rechner geschrieben.
Meine erste Hochsprache war Algol, dann kam Stepp dazu. Step war ein Vorläufer von Basic.
Als Diplomarbeit in Informatik habe ich für die IBM360 das Simulationssystem Spass weiterentwickelt.
Die Logikodule selbst habe ich in Fortran geschrieben.
Dann kam auch auf dem Nachfolger der IBM 360 PL/1 von IBM dazu.
In PL/1 habe ich das Sortierprogramm für die Inventur eines Großlagers geschrieben.
So ein Sortierlauf dauerte etwa 5 bis 6 Stunden, wenn ich alle Magnetbänder der Maschine (8 Stück) nutzen konnte.
Das Programm war etwa 4 20cm Lochbandrollen groß.
Dann später im Prozessrechner Bereich kam PL/M als Vorläufer und später C dazu.
Die Steuerung für eine Produktionsstraße in der Textilindustrie habe ich auf der PDP11 mit einem Gemisch von Assembler und Basic geschrieben.
Nach einer Vielzahl von Basic Dialekten und einem Ausflug zu Ada im quasi militärischen Bereich, dann wieder zurück zu Assembler
für Mikroprozessoren. Intel 8008, Intel 8080 und Zilog Z80 wieder in Assembler.
Längere Zeit mit Forth und einem selbstentwickelten Interpreter für Versuche mit Robotern.
In Forth habe ich damals intensiv an der Echtzeitfähigkeit mitgearbeitet.
Dann Pascal seit Turbopascal 1.0, damals noch unter CP/M.
Eine Revolution in der Programmierung.
Hier habe ich einige große Programme für die landwirtschaftliche Forschung geschrieben.
C++ ausprobiert aber schnell gelassen.
Dann seit Delphi 1.0 nur noch in Delphi.
Jetzt z.B. gerade fertig geworden, die komplette Leitwartensteuerung Klima für einen Reinstraumbetrieb. Übrigens komplett in Delphi.
Step5, Step7 und structurierter Text im SPS Bereich. Hier laufen noch einige Steuerungen bei der BASF.

Ich habe halt eine Menge Programmiersprachen kommen und gehen gesehen.
Man konnte jeder mehr oder weniger Charm abgewinnen und wenn etwas besseres kam, dann habe ich halt gewechselt.

Jetzt zum Beispiel geht Delphi und C# und Net kommen.


Gruß
Peter

mkinzler 15. Jan 2007 19:21

Re: With Class1, Class2 do
 
@Peter: Irgendwie finde ich es befremdlich, daß jeder Thread in dem du schreibst am Ende in einen Anti-Delphi "Hoche-Lebe" c# Thread wird. Es ging hier um die Frage, ob man with verwenden solle. Vor kurzem ging es um die Sprache D und immer wird dann eine Delphi-Besser-Nicht-Diskussion

smudo 16. Jan 2007 11:19

Re: With Class1, Class2 do
 
Zitat:

Zitat von hanspeter
Willst du das wirklich wissen?

:? eigentlich nicht, aber jetzt: Respekt :thumb: (und das meine ich wirklich ernst)

Nur hat die Formulierung deiner Aussage, du weißt schon, die mit dem "hochgrat(d)ig kaputten Konstrukt" nicht auf jemanden mit solchem Wissen schließen lassen. Also sorry für die etwas ironische Fragestellung meinerseits.

Edit: Quote vergessen :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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