Ultimamente stavo facendo delle ricerche su diversi linguaggi di programmazione. Mi interessava in particolare imparare le caratteristiche uniche dei linguaggi di programmazione popolari e le situazioni in cui queste risorse brillano. Credo che questo possa aiutarmi a decidere quale linguaggio utilizzare a seconda del problema da risolvere.
Ho scoperto che molte lingue che offrono un alto livello di flessibilità ("può adattarsi a requisiti nuovi, differenti o mutevoli") sono anche incoerenti, per esempio in JavaScript (solo un esempio, senza offesa a js people), gli argomenti di una funzione possono essere manipolati o nominandoli nella dichiarazione della funzione (approccio classico):
function max(x,y)
O utilizzando la variabile arguments
:
function max() {
if (arguments[0] < arguments[1])
return arguments[1];
else
return arguments[0];
}
c = max(1,2);
La variabile arguments è utile per molte situazioni come l'overloading delle funzioni, tuttavia, sconfigge lo scopo della funzione prototyping (che è quella di fornire informazioni sulla funzione), e ho visto molti esempi JavaScript in cui la variabile argomento viene utilizzata nonostante non ce n'è bisogno, il che rende il codice più difficile da comprendere e da correggere.
So che questo dipende molto dagli utenti della lingua, ma di solito il codice scritto in una lingua che offre alta flessibilità tende ad essere pericoloso, difficile da capire, ottimizzare e eseguire il debug.
La flessibilità e l'incoerenza si sovrappongono? Come fanno i designer di lingue a fare la scelta?
Modifica: non sto criticando un particolare linguaggio qui, mi concentro piuttosto sulla relazione tra flessibilità, sicurezza, coerenza dei linguaggi di programmazione.