string delphi delphi-7 filenames

¿Debo usar String en lugar de TFilename?



delphi delphi-7 (4)

Al pasar parámetros de nombre de archivo a procedimientos / funciones, debo usar TFilename o String .

Si hay una diferencia, ¿qué es y cuáles son las posibles ramificaciones si se utiliza una String ?

p.ej

procedure TForm1.OpenFile(const AFilename : String); begin //Open the file if it exists ... end;


Creo que TFilename debe usarse al desarrollar componentes porque de esa manera el IDE puede mostrar su editor de propiedades (TOpenDialog se mostrará cuando se haga clic en puntos suspensivos en el inspector de propiedades).

Aparte de esto, básicamente no hay diferencia de cuál usar. Recuerde que si usa TFilename , debe agregar SysUtils a su cláusula de usos.


Hmm, mi fuerte preferencia es por const AFilename: String; Por la razón que especialmente para proyectos más grandes, si alguna vez necesita agregar código fuente de otro codificador, si han usado muchos tipos personalizados como TCustomerID, THashValue, TInterestRate, en lugar de Integer, Cardinal, Double, entonces tiene muchos E2033 mencionado anteriormente para resolver.

Incluso un montón de delphi incorporado en el código fuente no usa TFileName, como:

function MatchesMask(const Filename, Mask: string): Boolean;

Además si tengo una variable definida como AFileName: TFileName; entonces es obvio que es un nombre de archivo y el tipo nombrado no agrega ninguna legibilidad para mí, si es que en algunos casos hace que el código sea menos legible, ya que tiene que hacer clic para verificar de qué variable real se deriva.


La única diferencia práctica entre string tipos de string y TFileName en un código simple es que pasa un argumento por referencia; el siguiente código

procedure GetFileName(var FileName: TFileName); begin FileName:= ''abcd.abc''; end; procedure TForm1.Button2Click(Sender: TObject); var S: string; begin GetFileName(S); end;

no compila con error

[DCC Error] E2033 Types of actual and formal var parameters must be identical


Tal vez esto sea demasiado obvio, pero el uso del tipo de string no comunica nada sobre el uso previsto de una variable. Pero cuando encuentras una variable declarada como un TFileName , hay muchos más detalles comunicados allí.

El mismo principio se aplica a otros tipos básicos como Integer , Cardinal , Double , etc. En su lugar, THashValue considerar el uso de alias para estos como TCustomerID , THashValue , TInterestRate , etc., ya que estos comunican mucho más TInterestRate cuál es el uso previsto de estas variables.

Esto mejora la capacidad de lectura, y también permite cambiar el tipo base cuando sea necesario, sin tener que tocar ningún código usando el tipo ... solo una recompilación y ya está listo (pero tenga cuidado con la compatibilidad binaria del curso).