Я только что прочитал одну из статей Джоэла, в которых он говорит:
В общем, я должен признать, что я немного боюсь языковых особенностей, которые скрывают вещи . Когда вы видите код
i = j * 5;… В C вы знаете, по крайней мере, что j умножается на пять, а результаты сохраняются в i.
Но если вы видите тот же фрагмент кода на C ++, вы ничего не знаете. Ничего. Единственный способ узнать, что в действительности происходит в C ++, - это выяснить, что такое типы i и j, что может быть объявлено где-то еще. Это потому, что j может иметь тип, который
operator*перегружен, и он делает что-то очень остроумное, когда вы пытаетесь его умножить.
(Акцент мой.) Боишься языковых особенностей, которые скрывают вещи? Как ты можешь бояться этого? Разве сокрытие вещей (также известное как абстракция ) не является одной из ключевых идей объектно-ориентированного программирования? Каждый раз, когда вы вызываете метод a.foo(b), вы не представляете, что это может сделать. Вы должны выяснить, что это за типы aи bчто, что может быть объявлено где-то еще. Так стоит ли нам отказываться от объектно-ориентированного программирования, потому что оно слишком много скрывает от программиста?
И чем это j * 5отличается от того j.multiply(5), что вам, возможно, придется написать на языке, который не поддерживает перегрузку операторов? Опять же, вам придется выяснить тип jи заглянуть внутрь multiplyметода, потому что вот, jможет быть, это тот тип, у которого есть multiplyметод, который делает что-то ужасно остроумное.
«Муахаха, я злой программист, который называет метод multiply, но на самом деле он абсолютно неясен и не интуитивен, и ему абсолютно нечего делать с умножением». Это сценарий, который мы должны учитывать при разработке языка программирования? Тогда мы должны отказаться от идентификаторов из языков программирования на том основании, что они могут вводить в заблуждение!
Если вы хотите узнать, что делает метод, вы можете взглянуть на документацию или заглянуть внутрь реализации. Перегрузка операторов - просто синтаксический сахар, и я не вижу, как это вообще меняет игру.
Пожалуйста, просветите меня.