"Aquellos que no recuerdan el pasado están condenados a repetirlo".
Colocar el tipo antes de que la variable comenzara de manera bastante inofensiva con Fortran y Algol, pero se volvió realmente feo en C, donde algunos modificadores de tipo se aplican antes que la variable, otros después. Es por eso que en C que tiene bellezas tales como
int (*p)[10];
o
void (*signal(int x, void (*f)(int)))(int)
junto con una utilidad (cdecl) cuyo propósito es descifrar tal galimatías.
En Pascal, el tipo viene después de la variable, por lo que los primeros ejemplos se convierte
p: pointer to array[10] of int
contraste con
q: array[10] of pointer to int
que, en C, es
int *q[10]
En C , necesita paréntesis para distinguir esto de int (* p) [10]. No se requieren paréntesis en Pascal, donde solo importa el orden.
La función de señal sería
signal: function(x: int, f: function(int) to void) to (function(int) to void)
Todavía un bocado, pero al menos en el ámbito de la comprensión humana.
Para ser justos, el problema no es que C coloque los tipos antes del nombre, sino que insiste perversamente en poner partes antes y después, el nombre.
Pero si se intenta poner todo antes del nombre, el orden es todavía poco intuitivo:
int [10] a // an int, ahem, ten of them, called a
int [10]* a // an int, no wait, ten, actually a pointer thereto, called a
Por lo tanto, la respuesta es: Un lenguaje de programación con sensatez diseñada pone las variables antes de que los tipos ya que el resultado es más legible para humanos
@Jurily - No discutiré eso. Solo tenía curiosidad si había alguna ventaja en hacer las cosas de una manera frente a la otra. –
@Jurily, para ser completamente exacto, _everyone_ tiene su apellido último :-). Y para ser justos, creo que si la mayoría de la gente lo mirara de manera imparcial, estarían de acuerdo en que el enfoque general a específico (como en chino o, como usted dice, húngaro) tiene más sentido. –
https://stackoverflow.com/questions/1891775/any-reason-for-having-val-capacity-int-instead-of-val-int-capacity-in-scal/1893263 – starblue