AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
Es ist schon ein Unterschied, ob in der Exe das steht :
Delphi-Quellcode:
oder das :
DreckMain.pas.78: Caption := fClass.Foo(S);
004666AD 8D4DF8 lea ecx,[ebp-$08] 004666B0 8B55FC mov edx,[ebp-$04] 004666B3 8B83E0020000 mov eax,[ebx+$000002e0] 004666B9 E81AFFFFFF call TMyClass.Foo 004666BE 8B55F8 mov edx,[ebp-$08] 004666C1 8BC3 mov eax,ebx 004666C3 E8F4CCFBFF call TControl.SetText
Delphi-Quellcode:
Vor allem, weil die Funktionalität gleich ist
DreckMain.pas.77: if fClass <> nil then
004666AE 8BB3E0020000 mov esi,[ebx+$000002e0] 004666B4 85F6 test esi,esi 004666B6 7417 jz TForm1.Button1Click + $47 DreckMain.pas.78: Caption := fClass.Foo(S); 004666B8 8D4DF8 lea ecx,[ebp-$08] 004666BB 8B55FC mov edx,[ebp-$04] 004666BE 8BC6 mov eax,esi 004666C0 E813FFFFFF call TMyClass.Foo 004666C5 8B55F8 mov edx,[ebp-$08] 004666C8 8BC3 mov eax,ebx 004666CA E8EDCCFBFF call TControl.SetText |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
In den Compileroptionen gibt es Bereichsüberprüfung, I/O-Prüfung und Overflow checking.
Was jetzt noch fehlt wäre ein Self-Pointer-Check. Gibt's das eigentlich schon als Feature-Request bei Embacadero? Während der Programmentwicklung würde man die Compileroption setzen und später wenn das Programm seine Quatlität bewiesen hat die Option wieder rücksetzen. (was Speicherplatz und Zeit spart) |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Du könntest ja einfach in alle Methoden dieses Einfügen.
Delphi-Quellcode:
.
Assert(Assigned(Self) and (TObject(Self) is TKlassentyp));
Aber stimmt schon, sowas könnte Emba eigentlich auch intern via Compilerschalter reinbauen. PS: Es wäre auch schonmal schön, wenn z.B. diese Überlauf- und Bereichsprüfung standardmäßig aktiviert wäre. |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
|
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
Ist nun Self = nil oder ein ungültiger Wert, dann geht das natürlich schief. |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
Normalerweise bin ich doch hier der kleinliche Optimierungs-Eumel :) |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
|
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
Zitat:
So ganz verstehe ich die Diskussion nicht. Eine Methode ohne jeglichen Bezug zum Objekt wird über eine ungütlige Instanz aufgerufen und richtet keinen Schaden an. Wo ist der Fehler? Nirgens*. Es funktioniert, es schadet nicht, hat keine Seiteneffekt usw. *Natürlich ist da ein Fehler. Der sitzt vor dem Rechner und bemerkt es nicht einmal: Eine Methode ohne Bezug zum konkreten Objekt ist eine Klassenmethode. Zitat:
Zitat:
Wenn man jeden Deppenfehler (und die Verwendung einer ungültigen Instanz ist so einer) mit Compilerschaltern ausmerzen könnte, wozu dann noch Programmieren lernen? Wieso entwickelt man nicht gleich einen Compiler, der nicht nur einen Syntaxcheck, sondern auch einen Semantikcheck durchführt? Gegen Fehler dieser Art empfehle (nicht nur) ich das Einschalten des Switches "Self.Brain" sowie die Einhaltung elementarer Grundregeln. Dann passiert sowas einfach nicht. |
AW: Klassen-Funktion benutzen, ohne die Klasse zu erstellen
So argumentiert könnte man problemlos die Abschaffung moderner IDEs incl. all der netten Helferlein begründen, und mit Notepad schreiben, und den Compiler alles fressen lassen - egal was an Maschinencode dabei nachher raus kommt. Warum sich nicht helfen lassen, wo es möglich ist? Zumindest zur Entwicklungszeit. Zudem sehe ich wenig Zusammenhang zwischen "Programmieren können", und die richtigen Buchstaben so hinschreiben, dass es kompiliert und zur Runtime nicht knallt. Für gewöhnlich denkt der Informatiker in abstrakteren Ebenen, und ist froh, wenn ihm bei so blöden (gern auch aus Flüchtigkeit entstandenen) Patzern auf die Füße getreten wird.
Ich komme ehrlich gesagt nicht ganz dahinter, warum man sich gegen eine solche Option aussprechen wöllte :gruebel:. Ist Bergsteigen mit Seil jetzt auch uncool? ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 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