2012-01-03 41 views
13

Declarar variables en Delphi me llevó a considerar algo que no puedo entender.palabras e identificadores reservados de Delphi

La pregunta es la siguiente: declarar cuerdas, se puede observar que string es una palabra reservada, mientras declarando otros tipos de datos, según los números enteros, el tipo de datos de clasificación no es una palabra reservada, pero un identificador (es decir Integer, la capital I así lo dice).

De hecho, Delphi le permite ir a la definición de Integer, que descubre que está dentro de la unidad del sistema, pero es solo representativa, porque hay un comentario que indica que algunas constantes (como True), identificadores (como Integer), las funciones y procedimientos se integran directamente en el compilador.

No puedo entender las razones de esta elección.

¿Alguien podría ayudar?


Una pequeña explicación de la diferencia entre string y Integer tipos. El siguiente código

type 
    Integer = Char; 

var 
    I: Integer; 

begin 
    I:= 'A'; 
    ShowMessage(I); 
end; 

es correcta y funciona como se esperaba, mientras que la siguiente línea

type 
    string = Integer; 

da tiempo de compilación de error.

+4

Delphi es * no * distingue entre mayúsculas y minúsculas. –

+2

Sí, lo sabía. Aunque Delphi no distingue entre mayúsculas y minúsculas, se considera una buena práctica de programación capitalizar de acuerdo con la convención de InfixCaps. Yo también. –

+5

+1, ya que es una pregunta interesante, aunque puede que no haya una respuesta "definitiva". Mi suposición personal, sin embargo, es que el tipo 'string' está rodeado de tanta magia de cómputo que se ha promocionado a una 'palabra reservada' en lugar de a 'Ctrl + tipo incorporado incorporado' ... –

Respuesta

7

Hasta donde sé string es una palabra reservada desde los tiempos de Turbo Pascal. Entonces la razón para mantenerlo de esta manera debe ser por compatibilidad.

Pascal -> Turbo Pascal -> Objeto Pascal -> Delphi.

Verifique estos recursos.

+2

Inicialmente, creo que 'string 'fue clasificado por Borland como uno de los tipos llamados' estructurados ', junto con' array' y 'record', porque tenía elementos sintácticos adicionales (corchetes, el especificador de longitud máxima)) Por lo tanto, tenía que convertirse en una palabra reservada, para ser analizada de una manera especial, a diferencia de los tipos simples, que eran solo identificadores, como 'Integer' o' Real'. –

+0

@AndriyM Todavía tiene elementos sintácticos adicionales –

+1

@DavidHeffernan: Sí, cuando se usa en "a la antigua usanza", se considera automáticamente un "ShortString", lo sé. Mi punto es que inicialmente era * estrictamente * un tipo estructural. Ahora se usa más a menudo como un tipo simple de cadena (puntero) (sintácticamente), y probablemente tenga que seguir siendo una palabra reservada debido al soporte del uso anterior. –

4

string debe haber una palabra reservada, porque no se usa exclusivamente para referirse al tipo System.[Ansi|Unicode]String. Si string fuera un alias simple para algún tipo de compilador interno, entonces string[20] ya no funcionaría. Esto no es un problema para Integer, porque Integer siempre significa nada más que "el tipo System.Integer".

+1

Dudo que la cadena * deba * ser una palabra reservada; Prefiero pensar que fue más fácil para un diseñador de compiladores turbo pascal implementar 'cadena' como una palabra reservada. – kludg

+0

Bueno, sí. Usted * podría * crear un analizador que permita cualquier tipo 'tipo [longitud]' y emite un error si 'tipo' no es' cadena', o si 'cadena' no se resuelve en' Sistema.UnicodeString'. ¿Pero por qué lo harías? – hvd

Cuestiones relacionadas