Здравствуйте, ·, Вы писали:
·>Отдельный set-get не настолько плох. Обычно такие простые тривиальные свойства составляют небольшую долю от объёма кода и лежат в отдельных model-классах в которые редко заглядываешь. Т.е. немного упрощают и так простую проблему. Ценность невелика. Зато лишняя когнитивная нагрузка.
На работу с данными отдельные методы плохо ложатся.
Имею ввиду всякие DTO для сериализации json, или маппинга строк БД.
Со свойствами в C# пишешь:
[JsonProperty("is_enabled")]
public boolean IsEnabled { get; set; }
и понимаешь, что значение свойства будет в json писаться/читаться в/из is_enabled. Всё в одном месте, коротко, понятно и удобно.
В Java без свойств это будет:
@JsonProperty("is_enabled")
boolean enabled;
public boolean isEnabled() {
return this.enabled;
}
public void setEnabled(boolean value) {
this.enabled = value;
}
В процессе коммитов от разных людей, разрешения конфликтов и т.п. это всё добро может разлететься в разные концы файла.
Сериализатору же либо придётся по соглашению именования методов ориентироваться и понимать, что при чтении из json поля is_enabled нужно вызвать метод setEnabled, т.к. вероятно он меняет нужное поле enabled.
Либо заставлять разработчика все методы помечать атрибутами и ещё больше писанины разводить и потом не забыть всё везде поправить при переименовании поля в json.
Либо напрямую некрасиво в приватные поля писать, что может привести к неприятным багам, если в set-методе всё же будет какая-то логика.
У меня вот как-то всех этих DTO/POCO/POJO достаточно ощутимая доля образуется и со свойствами в C# приятнее это всё писать, чем в Java с отдельными методами.
record'ы ещё завезли, но там свои нюансы хотя бы в плане поддержки разными библиотеками.
·>Вот эта неявная генерация — и есть магия. Если надо генерировать — так генерируй код явно.
Языки высокого уровня в принципе существуют из-за неявной генерации.
Вопрос в адекватности этой генерации и не слишком ли с ней легко выстрелить себе в ногу.
Те же автосвойства — это просто, понятно, никаких проблем с ними не вижу.
В секции set есть понятное по смыслу ключевое слово value, так же интуитивно туда ложится и field.
·>Они коллапсятся. IDE неплохо умеет упрощать чтение простыней, притом неважно, поле это или просто однострочный метод. Всё выглядит одинаково.
Мне такие IDE не попадались.