Ho appena letto uno degli articoli di Joel in cui dice:
In general, I have to admit that I’m a little bit scared of language features that hide things. When you see the code
i = j * 5;
… in C you know, at least, that j is being multiplied by five and the results stored in i.
But if you see that same snippet of code in C++, you don’t know anything. Nothing. The only way to know what’s really happening in C++ is to find out what types i and j are, something which might be declared somewhere altogether else. That’s because j might be of a type that has
operator*
overloaded and it does something terribly witty when you try to multiply it.
(Enfasi mia.) Paura delle caratteristiche linguistiche che nascondono le cose? Come puoi esserne spaventato? Non nasconde le cose (anche conosciute come astrazione ) 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 sono a
e b
, qualcosa che potrebbe essere dichiarato da qualche altra parte. Quindi dovremmo eliminare la programmazione orientata agli oggetti, perché nasconde troppe cose dal programmatore?
E in che modo j * 5
è diverso da j.multiply(5)
, che potresti dover scrivere in una lingua che non supporta l'overloading dell'operatore? Di nuovo, dovresti trovare il tipo di j
e sbirciare all'interno del metodo multiply
, perché ecco ed ecco, j
potrebbe essere di un tipo che ha un metodo multiply
che fa qualcosa di terribilmente arguto.
"Muahaha, sono un programmatore malvagio che denomina un metodo multiply
, ma ciò che effettivamente fa è totalmente oscuro e non intuitivo e non ha assolutamente nulla a che fare con le cose che moltiplicano". È uno scenario da prendere in considerazione quando si progetta un linguaggio di programmazione? Quindi dobbiamo abbandonare gli identificatori dai linguaggi di programmazione sulla base del fatto che potrebbero essere fuorvianti!
Se vuoi sapere che cosa fa un metodo, puoi dare uno sguardo alla documentazione o dare un'occhiata all'interno dell'implementazione. L'overloading dell'operatore è solo zucchero sintattico e non vedo come cambierà il gioco.
Per favore mi illumini.