Ho appena letto uno degli articoli di Joel in cui dice:
In generale, devo ammettere che ho un po 'paura delle caratteristiche del linguaggio che nascondono le cose . Quando vedi il codice
i = j * 5;
... in C sai, almeno, che j viene moltiplicato per cinque e i risultati memorizzati in i.
Ma se vedi lo stesso frammento di codice in C ++, non sai nulla. Niente. L'unico modo per sapere cosa sta realmente accadendo in C ++ è scoprire quali tipi io e j sono, qualcosa che potrebbe essere dichiarato da qualche altra parte. Questo perché j potrebbe essere di un tipo
operator*
sovraccarico e fa qualcosa di terribilmente spiritoso quando provi a moltiplicarlo.
(Enfasi mia.) Hai paura delle caratteristiche del linguaggio che nascondono le cose? Come puoi averne paura? Nascondere le cose (noto anche come astrazione ) non è una delle idee chiave della programmazione orientata agli oggetti? Ogni volta che chiami un metodo a.foo(b)
, non hai idea di cosa potrebbe fare. Devi scoprire quali tipi a
e quali b
sono, qualcosa che potrebbe essere dichiarato da qualche altra parte. Quindi dovremmo eliminare la programmazione orientata agli oggetti, perché nasconde troppe cose al programmatore?
E in che modo è j * 5
diverso j.multiply(5)
, che potresti dover scrivere in una lingua che non supporta il sovraccarico dell'operatore? Ancora una volta, dovresti scoprire il tipo di j
e sbirciare all'interno del multiply
metodo, perché ecco, j
potrebbe essere di un tipo che ha un multiply
metodo che fa qualcosa di terribilmente spiritoso.
"Muahaha, sono un programmatore malvagio che nomina un metodo multiply
, ma quello che fa in realtà è totalmente oscuro e non intuitivo e non ha assolutamente nulla a che fare con il moltiplicare le cose." È uno scenario che dobbiamo prendere in considerazione quando si progetta un linguaggio di programmazione? Quindi dobbiamo abbandonare gli identificatori dai linguaggi di programmazione perché potrebbero essere fuorvianti!
Se vuoi sapere cosa fa un metodo, puoi dare un'occhiata alla documentazione o sbirciare all'interno dell'implementazione. Il sovraccarico dell'operatore è solo zucchero sintattico e non vedo affatto come cambi il gioco.
Per favore, illuminami.