TFile, TDirectory vs. alte Funktionen
Ich habe es nun endlich geschafft. Bin von Delphi 2007 auf XE8 umgestiegen. Man schaut dann natürlich nach neuen Klassen, Datenstrukturen etc.
Beim Stöbern durch das Emba-Wiki habe ich folgende Typen gefunden TFile, TPath, TDirectory. Darunter sind etliche nützliche Klassenmethoden vorhanden. Vieles gibt es natürlich schon in der RTL. Z.B. ersetzt Tfile.exists die Funktion fileexists. Ich finde die neue Schreibweise sehr angenehm. So muss ich nur "TFile." eingeben und die Codevervollständigung gibt mir alle Funktionen, die ich mit Dateien machen kann. Seit wann gibt es diese Typen? Ich denke ich werde die neue Schreibweise übernehmen. Wie findet Ihr diese Schreibweise? |
AW: TFile, TDirectory vs. alte Funktionen
Natürlich nur das. Ist ja nicht nur eine andere (ordentliche) "Schreibweise", sondern viel Neues: Dinge wie TDirectory.GetFiles(..) machen das Leben doch gleich unheimlich viel angenehmer 8-)
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Viele von diesen Strukturen sind von .net inspiriert (was es ja nicht schlecht macht)Wenn man sich die .net Struturen allerdings so anschaut, dann fragt man sich, wann das denn kommt, oder ob man das besser selber implementiert.
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Warum ist "Interfaced" = "richtig"? Warum sollte ich erst etwas instanzieren müssen, wenn es auch so geht. Aber ich lerne gerne. Gib mal ein Beispiel, wie ein einfaches
Delphi-Quellcode:
bei dir aussieht.
TFile.exists(aFilePath)
|
AW: TFile, TDirectory vs. alte Funktionen
Es geht hier nicht um das einfache
Delphi-Quellcode:
. Diese Methoden sind im Übrigen in .net analog umgesetzt (mit einer statischen Klasse).
TFile.Exists
Aber man hat dort eben nicht aufgehört und auch noch so nette Dinge wie DirectoryInfo, DriveInfo, FileInfo dort implementiert, die das Leben einfacher machen. |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Der Zugriff auf ein Dateisystem ist eigentlich dafür prädestiniert mit Abstraktionen/Schnittstellen zu arbeiten. So hat man dann nicht innerhalb seiner TFile.Exists(path) Methode seine 300 Zeilen Code (übertrieben) mit 40 IFDEFs (auch übetrieben :-)), sondern eine einheitliche, vollständige und korrekt benannte API für den Entwickler und dahinter die verschiedenen Implementierungen für OSX, Android, Windows, eben abhängig von der Plattform. Außerdem hast Du mit so statischen vorgehensweisen wie "TFile.Do*(Pfad)" auch immer das Problem, dass Du durch dein Programm hinweg einen String mit Dir rumschleppst, den Du (wenn Du nicht gerade alleine arbeitest) zur Sicherheit vor jeder Verarbeitung überprüfst/auseinander nimmst -> ExtractFileExt, ExtractFilePath, ExtractFileName etc pp. Einfacher wäre auch hier eine IFile Schnittstelle die eine Datei repräsentiert und auf der ich ein IFile.Exists, IFile.FileExt, IFile.Location etc aufrufen kann - nie wieder unnötige String/Pfad Verarbeitungen. Und wenn ich 1000-5000€ für die IDE/Sprache bezahle, dann erwarte ich auch dass ich für mein Geld was geboten bekomme - das ist zumindest meine Meinung ;-) |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
In den letzten 2-3 Jahren hat Delphi mehr zugelegt, als in den 10 Jahren davor (gefühlt). Daher bin ich sehr optimistisch, daß die Erweiterung der RTL hier nicht stehen bleibt und wir noch einiges erwarten können. |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Ich will nicht bestreiten, daß es noch besser geht. Aber dennoch kann ich den ersten Schritt positiv sehen und mich darüber freuen, daß die RTL erweitert wird und nicht nur ein paar Komponenten zugekauft werden, damit eine neue Delphi-Version erscheinen kann. |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Der Grund dafür sind allerdings die zusätzlichen Plattformen und das Bestreben Entwickler auch von anderen Sprachen zu bekommen. Und die sind meistens OOP gewohnt und keinen prozeduralen Stil. Ja, ich liebe es auch, wenn ich etwas mit einem Directory veranstalten möchte, dass ich
Delphi-Quellcode:
eintippe und alle Möglichkeiten per Codevervollständigung aufgelistet werden. Denn genau das bringt Geschwindigkeit beim Programmieren.
TDirectory
Ich ärgere mich aber immer dann, wenn bei so einer Bibliothek auf der halben Strecke aufgehört wurde ... :roll: Irgendwie beschleicht mich dann immer das Gefühl, die haben es zwar gesehen, aber sich dann gedacht "Ach, ist doch nur für Oma, das reicht jetzt so! Ich brauch das nicht!" |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Über die RTL will ich nicht meckern. Ich ärgere mich da auch nicht so sehr wenn es nur "halbfertig" ist. Lieber halb als gar nicht. Bin wohl wirklich Optimist :-) |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
...
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Wir sollten uns echt langsam mal zusammentun und Quellcode sammeln
http://www.delphipraxis.net/182276-d...-projekte.html Ich habe auch mittlerweile eine Menge an Klassen die bestimmt auch andere mal brauchen könnten. Wir sollten wirklich mal ein bisschen Gehirmsturm für eine halbwegs einheitliche Strukturierung und Philosophie (z.B. Teeren und Federn bei "with", ...) und eine gemeinsame Library aufbauen. |
AW: TFile, TDirectory vs. alte Funktionen
@rd3: Nenn mich altmodisch, aber bei einer Klassenfunktion, die sich FileInfo nennt, erwarte ich nicht die eigene Klasse instanziert zurück, sondern etwas was mir Informationen zu einer bestimmten Datei liefert.
Übrigens: with ist bäh ;-) Bin echt überrascht, was Ihr so alles mit Dateifunktionen macht. In der Regel prüfe ich mit TFile.exists, ob eine Datei vorhanden ist. Meist wird dann eine andere Klasse (Z.b.TStringlist oder TMeinWuppdiObjekt )verwendet und dort gibt es die Funktion LoadFromFile. Muss also den Dateinamen sowiso übergeben. Mir fällt auf die schnelle nicht wirklich etwas ein, bei dem ich mehr als drei Funktionen von TFile hintereinander aufrufen würde. Einzig die Implementation von TIniFile finde ich unglücklich, weil es als record deklariert ist. Eine Custom-Erweiterung mit eigenen Funktionen ist somit nicht wirklich praktikabel. Eine Klasse wäre da besser gewesen. |
AW: TFile, TDirectory vs. alte Funktionen
'with' ist nicht bä, sondern nur unpraktisch.
Nur um es noch einmal festzuhalten: TFile.Exists hat nichts, aber auch gar nichts mit OOP zu tun. TFile ist eine statische Klasse und das ist nichts anderes als eine Unit. Der von alda skizzierte Ansatz wäre wirklich sehr angenehm, zumal ich dann auch auf der Ebene ordentliche (bzw. überhaupt) Unittests schreiben kann. Ansonsten ist das Mocken von 'TFile.Exists' auch nicht so einfach. |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
Delphi-Quellcode:
fände ich persönlich ne Super-Idee.
with X = TMySpecialType.Create(12, 'hallo', Self) do
ShowMessage(X.AsString); (ist aus Modula-3) |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
1. In Delphi müssen Variablen vordefiniert werden, es spart mir also nichtmal sonderlich viel Tiparbeit 2. In Delphi gibt es keinen kleineren Scope als eine Routine. Solch ein with sollte aber einen bilden, siehe using. |
AW: TFile, TDirectory vs. alte Funktionen
Dann müsste man halt mit compiler magic arbeiten.
Delphi-Quellcode:
->
with x = aClass.aSubClass.AnotherOne do
x.Attribut := <IrgendWas>;
Delphi-Quellcode:
Oder noch besser den Scope verfeinern.
aClass.aSubClass.AnotherOne.Attribut := <IrgendWas>;
|
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
siehe
Delphi-Quellcode:
entspricht in etwa
try
except on E: Exception do ShowMessage(E.Message); end;
Delphi-Quellcode:
und Self ist auch sowas.
var
E: Exception; try except if ExceptObject is Exception then begin E := Exception(ExceptObject); ShowMessage(E.Message); end; end; PS:
Delphi-Quellcode:
ginge doch?
with X = TMySpecialType.Create(12, 'hallo', Self) do
oder meint ihr
Delphi-Quellcode:
:zwinker:
with X := TMySpecialType.Create(12, 'hallo', Self) do
Und sowas wie "Self" für die temporäre "Variable" des WITH wäre auch schön, wenn man schon das X:= nicht selber angeben darf.
Delphi-Quellcode:
:roll::roll::roll:
with Memo1, Memo1.Lines, Memo1.irgendwasanderes do
Text := Value[1] + sonstwas; |
AW: TFile, TDirectory vs. alte Funktionen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 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