Da la risposta accettata a "Perché è utile il Lisp?":
5. Wartiness. The real world is messy. Pragmatic coding winds up having to either use or invent messy constructs. Common Lisp has sufficient wartiness that it can get stuff done.
Anche questo pensiero mi è venuto in mente. Attualmente sto sviluppando un'applicazione il cui back-end ho scelto di scrivere in Haskell e il cui frontend è in PHP. La mia esperienza è stata che trattare con codice disordinato in PHP è molto più facile che trattare con codice disordinato in Haskell. Tuttavia, è il mio codice e il mio codice PHP probabilmente non è poi così male.
Un semplice esempio di "wartiness" è l'operatore ==
di PHP (uguaglianza). Sai, il tipo di uguaglianza dove '' == 0
è vero. Dato che sono diffidente con ==
, spesso scelgo di utilizzare l'operatore ===
di PHP (uguaglianza rigorosa) invece:
$is_admin = ($gid === 24 || $gid === 25);
Tuttavia, l'utilizzo di cui sopra si è rivelato sbagliato. Il valore $gid
proviene dal database ed è ancora una stringa. Questa volta, l'operatore di uguaglianza rigorosa mi ha morso, e mi sarei risparmiato qualche minuto semplicemente dicendo:
$is_admin = ($gid == 24 || $gid == 25);
Considera un'altra identità interessante:
php> var_dump('0012345' == '12345');
bool(true)
Che diamine ?! ==
su due stringhe non è nemmeno il confronto tra stringhe! Tuttavia, considera se l'utente riceve una carta d'identità che dice 0012345
, ma l'ID del database è semplicemente 12345
. Gli utenti potrebbero avere problemi ad accedere alla tua applicazione se scegli di utilizzare ===
. Certo, riceverai una segnalazione di bug e sarai in grado di correggere la tua applicazione piuttosto che fare affidamento su questa caratteristica oscura. Ma ci vorrà più tempo. Preferirei trascorrere quel tempo fuori. È davvero una bella giornata.
Al contrario, ecco un esempio di sfortuna non utile nella maggior parte dei casi:
js> parseInt(031);
25
Quali sono alcuni esempi più concreti in cui "sfarfallio" ti aiuta a fare le cose? Per favore spiega perché; non limitarti a elencare le funzionalità di Haskell.
Un altro modo di metterlo: quali sono le caratteristiche del linguaggio viziato di cui essere consapevole e come possiamo usarle per risparmiare tempo?