Perché Java supporta le parentesi dietro le variabili e persino dietro le firme dei metodi? [chiuso]

2

Java consente questo:

class X{
    int i,j[]; // j is an array, i is not
}

e ancora peggio, consente questo:

class X{
    int foo(String bar)[][][] // foo actually returns int[][][]
    { return null; } 
}

Ok, il motivo potrebbe essere che è stato prestato da C / C ++. Tuttavia, Java doveva essere più semplice di C / C ++. Perché gli inventori di Java hanno deciso di consentire questo costrutto difficile da leggere. I tipi complicati di C in cui il nome della variabile si trova nel mezzo del tipo sono difficili da leggere e provocano errori di programmazione.

Specialmente le parentesi dietro la firma del metodo. Non ho mai visto questi in uso e questo è per una buona ragione. Nessuno guarda dietro la firma quando controlla il tipo di ritorno di un metodo. Mentre il primo esempio può salvare alcune sequenze di tasti (poiché int non deve essere scritto due volte), le parentesi dietro la firma non ne salvano nemmeno, quindi non vedo assolutamente alcun guadagno qui.

Quindi c'è una buona ragione per questo (specialmente il secondo) che mi manca?

    
posta gexicide 12.05.2014 - 22:15
fonte

1 risposta

3

La domanda può essere divisa in "Perché le parentesi di supporto C Java dietro variabili e persino dietro le firme dei metodi?" e "Perché Java erediterebbe così tanto da C?"; Java ha ereditato anche altre strane sintassi, specialmente quella per switch (perché non usare le parentesi graffe come per tutto il resto e usare: e break?).

Per rispondere alla prima domanda - Credo che negli anni '70 nella progettazione della lingua non si concentrassero tanto sulla leggibilità, quanto piuttosto sulle prestazioni. Allora i programmi non erano così complessi o grandi, quindi la leggibilità non era una preoccupazione principale.

Per rispondere alla seconda domanda - a metà degli anni '90 quando Java appariva la maggior parte dei programmatori lavorava in C e C ++; Il C ++ ha avuto un grande successo perché era un superset di C aggiungendo OOP. Java ha semplificato il C ++ il più possibile, ma ha cercato di tenerlo il più vicino possibile alla sintassi, in modo che i programmatori possano transitare più facilmente da una lingua all'altra.

In realtà credo che la maggior parte dei programmatori Java non sia nemmeno a conoscenza del fatto che il codice presentato sia valido (almeno il secondo) e quindi non lo usa durante la scrittura. La cosa principale che porta a questo è una cosa grandiosa chiamata - Convenzioni del codice Java che è più probabile che vengano letti dai programmatori rispetto alle specifiche del linguaggio stesso. Anche questo tipo di cose è uno svantaggio della retrocompatibilità.

    
risposta data 12.05.2014 - 23:15
fonte

Leggi altre domande sui tag