Так когда понадобится, будешь в 100500 местах менять. А тут всем все ясно(явно указываешь на инкапсуляцию), да и изменения каснутся только реализации класса.
да, здесь соглашусь, но во-первых, иногда совершенно очевидно, что ничего, кроме обычного возврата и присваивания явно не потребуется, а все равно делают так. во-вторых, можно автоматически заменить. в-третьих, это теряет смысл при наличии в языке свойств.
Не делай. Никто не заставляет. Так обычно пишут «на вырост», чтобы иметь в будущем возможность навесить дополнительную логику или какие-то проверки. Без этого потом пришлось бы бегать по исходникам и заменять тупые присваивания на функции.
В большинстве соглашусь. Но можно найти применение и для отложенной инициализации. Что в этом плохого, если есть соотвествующие геттер/сеттер и деструктор?
Например это делает класс бинарное совместимым если ты решишь таки добавить код в аксессоры и мутаторы. А так релизнешь либу и сразу всем по всему миру переписывать и перекомпиливать. А если они юзеры третьего уровня и юзают другую проприетарную либу, которая юзает твою?
Плюс в Java есть такая штука как JavaBean, её много либ хочет
Да никто не будет c этой фигнёй возиться. Какой sed? Программисты в массе своей довольно умные люди. И если геттер пишется, значит надо что-то проверять. А почему геттер пустой? Потому что сейчас есть более важные проблемы.
Инкапсуляция, один из столпов ООП
По большому счету, не нужно, но принято.
Например, чтобы какой-нибудь юзер твоей либы не взял указатель на foo, и не передал его куда-нибудь где его изменят, и начнется бардак и мясо
чтобы избежать говнокода, а значит, трудноуловимых ошибок в будущем. всё это на первый взгляд кажется избыточным и ненужным но в последствии оказывается очень важным и полезным.
Кстати, а есть языки, в которых при присваивании можно неявно вызывать сеттер, а при использовании — геттер? В JS вон недавно нечто подобное появилось вроде. Не, ну присваивание, допустим, ещё можно через перегруз оператора накостылять, но использование...
В Dylan всегда вызываются сеттер и геттер. Выражение object.slot синтаксически идентично вызову slot(object), который вызывает метод-геттер. А выражение slot(object) := some-value синтаксически идентично slot-setter(object, some-value), то есть вызывает метод-сеттер. Присваивание := специальное только для локальных и глобальных переменных. Аксессоры генерируются автоматически.
это тяжелое наследие жабо программеров
у них там так принято,
к каждой переменной писать доп геттер и сеттер,
так код быстрее дуется с ней зп жабистов
еще для увеличения кода они любят пихать везде к каждой переменной ключевое слово this->
тоесть еще +6 символов на мембер переменную
На С++ вполне можно, если вместо допустим int - выставлять наружу WrapperInt, у которого переопределить константный и не константный операторы пристаивания. Вызывается константный - используем getter, не константный - setter
как показывает практика да и статистика по гитхабу, если в начале говнокод не спроектирован правильно, то потом такие пустые геттеры и сеттеры с запасом на авось, так и торчат всю жизнь пустыми