|
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
|
|||||||||||
Зачем два метода(геттер и сеттер) когда можно их объединить18.01.2023, 20:41. Показов 922. Ответов 14
Метки нет (Все метки)
Прочитaл мнoжество мaтериалов про геттеры и сеттеры и везде один синтaксис:
В одном изменять(сеттер), а в другом возвращать(геттер)? Когда можно все это упростить, то есть объединить геттер и сеттер в один метод или я чего-то не понимаю? Вот переписанный верхний код с одним методом:
0
|
|||||||||||
| 18.01.2023, 20:41 | |
|
Ответы с готовыми решениями:
14
Сеттер и геттер Геттер и сеттер |
|
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
|
||
| 18.01.2023, 22:00 | ||
|
Встречный вопрос: зачем объединять, когда можно этого не делать?
![]() Объединяют обычно при использовании процедурного синтаксиса. В ООП нет такой необходимости.
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|||||||||||||
| 19.01.2023, 07:34 | |||||||||||||
Сообщение было отмечено gogolik как решение
РешениеЕсли значение не может быть null, тогда можно сделать как-то так:
1
|
|||||||||||||
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
|
| 19.01.2023, 13:26 | |
|
Если мы говорим о хорошем коде, то функция должна выполнять только одну задачу (на эту тему есть хороший труд Роберта Мартина "Чистый код").
Если объединить геттер и сеттер в один метод - мы получаем функцию, которая пытается делать два дела сразу.
0
|
|
|
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
|
||
| 19.01.2023, 15:16 | ||
|
пример, Method Chaining может придерживаться данного принципа, а может не соблюдать его. от этого данный метод "грязнее" не становится.
0
|
||
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
||||||||||||
| 19.01.2023, 16:13 | ||||||||||||
В этом случае я за объединение этих двух методов в один (например save).
Если кого-то напрягает писать кучу однотипных геттеров и сеттеров - их давно уже можно генерировать средствами IDE или использовать мапперы.
0
|
||||||||||||
|
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
|
|
| 19.01.2023, 16:24 | |
|
0
|
|
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
||
| 19.01.2023, 16:40 | ||
|
Я все же считаю, что приведенный ТСом пример придает "запашок" коду, не давая абсолютно никакой пользы. Можете привести контраргументы, чем может быть полезен такой подход?
1
|
||
|
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
|
||||||||||||
| 19.01.2023, 16:43 | ||||||||||||
1
|
||||||||||||
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
||||||||||||
| 20.01.2023, 14:18 | ||||||||||||
Можно еще вспомнить про принципы SOLID, которые, правда, говорят про классы, а не отдельные методы, но в контексте класса я бы сказал, что данный подход нарушает принцип единственной ответственности (что тоже является не очень хорошей практикой). Можно еще вспомнить про принцип KISS, который сюда притягивается практически за уши, но с ним тоже пошли бы расхождения при данном подходе. Тут я чуть поясню. С большой долей вероятности при чтении значения мы не хотели бы его обновлять (о чем и написал уважаемый Jodah), т.к. перезапись может нести накладные расходы (если сущность хранится в БД - нам придется сходить в БД для ее обновления, а для чтения возможно в БД и не придется лишний раз идти, если сущность была загружена ранее). Соответственно, появится дополнительная логика в функции, которая должна будет проверять - нужно обновлять или не нужно. То есть функция получается ненужные усложнения. Есть еще общепринятые подходы к наименованию. Если я вижу в чужом коде метод get, я ожидаю что он получает значение. Вижу метод set - ожидаю, что он будет записывать данные. Если я увижу get_set, я со словами "что за хрень?" полезу разбираться что она делает. Таким образом, я вижу ряд минусов у данного подхода. И пока не увидел ни одного плюса. Возможно я чего-то не понимаю, и поэтому хотелось бы аргументов.
0
|
||||||||||||
|
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
|
|||||||
| 20.01.2023, 14:27 | |||||||
1
|
|||||||
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
|
| 20.01.2023, 15:08 | |
|
crautcher, я сначала не понял, а потом как понял. Вы со мной не спорите, вы тоже (как и я) считаете что объединение этой функциональности - плохо.
А мне следует дождаться примера от Fart83 или G_manX.
0
|
|
| 20.01.2023, 15:27 | |||||||
|
1. Сам по себе дополнительный флаг - мне кажется уже что то не хорошее. Он не параметр вычислений, а "модификатор" действия ![]() 2. Ухудшается читаемость кода. Новый человек на проекте смотрит в код и не понимает: что тут получаем или сохраняем. Тут поясню. допустим имеем
) ..... Надо смотреть что означает true - лишнее действие.А вдруг сеттер возвращает вообще предыдущее значение.... А представьте что геттер возвращает объект того же класса. (например у нас связанный список) - новичок не подумает, что это возвращает сам себя или это реализация иммутабельности объекта.... И будет строить цепочки или будет дальше работать с полученным, думая что работает с первоначальным... 4. Сложнее будет выглядеть тест 5. Если геттер или сеттер (точнее их функции) требуют какой либо логики - то вообще теряется смысл в объединении, тк. внутри будет каша, которую точно надо декомпозировать. А для простых случаев зачем вообще геттер и сеттер. Сделать свойства public и будет "счастье"
1
|
|||||||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,814
|
||||||||||||||
| 21.01.2023, 05:35 | ||||||||||||||
К примеру ini_set
Добавлено через 21 минуту add
0
|
||||||||||||||
|
4369 / 1009 / 154
Регистрация: 16.01.2023
Сообщений: 2,503
|
||||||||||||
| 21.01.2023, 10:38 | ||||||||||||
|
Тут важно не упороться, приняв это за аксиому, потому что есть абсолютно нормальная практика применения ветвления (например при реализации фабрики), но к этому примеру вполне подходит:
2
|
||||||||||||
| 21.01.2023, 10:38 | |
|
Помогаю со студенческими работами здесь
15
Минутка ООП, геттер, сеттер
Как встроить в класс сеттер и геттер? Переопределить сеттер и геттер без сторонних переменных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|