Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Приветствую, пишу портянку и всплыл вопрос, какой вариант на ваш взгляд православней и почему? Код: plaintext 1. 2. 3. 4. 5. 6. 7. или получение и установку переменной-члена класса объединить в одном методе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Или так только хипстеры с Ямайки пишут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 13:22 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
I dont knowИли так только хипстеры с Ямайки пишут? Ага. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 13:35 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Просто подумалось, что реализация 2 в 1, будет как-то покомпактнее, если N переменных членов, то это будет 2*N методов, вот думаю, нормально ли это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 14:02 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
I dont knowреализация 2 в 1, будет как-то покомпактнее 1. Зависимости от магических констант. 2. Убиение алгоритма предсказания ветвлений. 3. Читаемость нулевая. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 14:32 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
I dont know, Это как раз тот случай, когда можно макросом генерить аксессоры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 14:33 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто как раз тот случай, когда можно макросом генерить аксессоры. Скорее это случай когда они напрочь не нужны. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 14:36 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Разобрался, по сути основная проблема второго способа, это частая неоднозначность, когда получить, а когда установить значение. Например, сделаем метод Код: plaintext 1. А читаемость - это уже вкусовые предпочтения программиста, оба варианта неплохо читаются и вполне понятны Но всё равно спасибо за комментарии, убрал эти мысли из головы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 14:49 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
I dont know, Используй перегрузку, Карл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:01 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovСкорее это случай когда они напрочь не нужны. Необходимость аксессоров тут не рассматривается. Но если они нужны, то зачем писать их руками?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:58 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНо если они нужны, то зачем писать их руками?)) Если их можно написать не руками, то они точно не нужны. Ибо доводят саму идею до абсурда. Что, впрочем, для Java, например, не является ничем новым: она изначально создавалась таким способом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 16:07 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Use ‘const’ as much as possible. А в объединенном варианте константность использовать не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 17:09 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Два в одном необходимы только если используешь thread_local, т.к. из двух функций-геттеров ты его использовать не сможешь. Членом класса его делать нельзя, а глобально - вообще лучше не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 18:29 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Вася УткинЧленом класса его делать нельзя Кто запретил? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 18:47 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Вася Уткинесли используешь thread_local thread_local вообще мутная тема, может конечно чего придумали, не пробовал, но родной виндовый TLS не всегда доступен. Если твой код в DLL то его нет, пришлось заменить на std::map[GetCurrentThreadId()] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 18:54 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВася УткинЧленом класса его делать нельзя Кто запретил? Баг репортович двухлетний запретил: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60702 - GCC 4.8.1 - 7.0 - Bug: http://melpon.org/wandbox/permlink/0v6fHVR4qujQiCyQ - Clang 3.4 - Bug: http://melpon.org/wandbox/permlink/hpx2w5gqj9Nr57tM - Clang 4.0 - Ok: http://melpon.org/wandbox/permlink/c83ps1hDIZeBz9je - MSVC 2015 v140 - Ok. А с геттером нормально в GCC 7.0: http://melpon.org/wandbox/permlink/plOdCiZeFsLgMTX5 Там ещё какие-то проблемы по моему были. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 23:05 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕсли их можно написать не руками, то они точно не нужны. Ибо доводят саму идею до абсурда. Нет. Назначение тривиальных аксессоров в том, чтобы когда понадобится нетривиальный, то просто переписывается аксессор, а не весь код который использует эту переменную. Это называется инкапсуляция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 00:15 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyDimitry SibiryakovЕсли их можно написать не руками, то они точно не нужны. Ибо доводят саму идею до абсурда. Нет. Назначение тривиальных аксессоров в том, чтобы когда понадобится нетривиальный, то просто переписывается аксессор, а не весь код который использует эту переменную. Это называется инкапсуляция А в остальных 98% случаев это называется дроч по учебнику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 00:57 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто называется инкапсуляция о, я долго ждал эту тему. (+пятница) у меня такой вопрос: нужна ли инкапсуляция 100%? моё мнение: инкапсуляция нужна только там, где требуется валидировать входящие(иногда исходящие) значения, используя информацию самого объекта. Иначе, класс превращается в монстра, у которого на 1 переменную 8 строчек кода. Читать и отлаживать такой код - убийство. А с интерфейсами - убийство в квадрате. Надо придерживаться принципа минимализма, и вообще, касаемо инкапсуляции: чтение многих книжек и повторение вслух написанного там, не делает человека программистом и не отменяет надобности постоянного анализа и наличия головы. Дальше я буду говорить ересь: принцип минимализма, если переменная 1 раз где-то на старте устанавливается, а потом только читается - надо сделать её открытой, у меня, например, это строковые идентификаторы, признаки, частные свойства, определяемые на старте, и, частично, вектора базовых функциональных объектов. Меня будут ругать, что "вооот, это может тогда кто угодно переписаааать...". Да, может. Это называется "выстрелить себе в ногу", да, но моё мнение: это всё упирается в умение пользоваться кодом и понимать архитектуру. Для меня гораздо удобнее напрямую обращаться к вектору в объекте, чем звать геттер, который будет: 1. усложнять читаемость, 2. добавлять (мелкие, но всё же) тормоза в код. Тормоза, с другой стороны, начинают сказываться, когда у вас в аксессорах довольно большая валидация, которая и не всегда нужна-то, но вы перестаёте её замечать, так как этот код скрыт. Тут даже не знаю, как быть, палка о двух концах... на ранних этапах разработки можно это сразу как-то исправить. Наверно. Кроме того, наличие сеттеров точно так же даёт возможность пострелять себе по ноге. При этом проблема отлова кода, который меняет переменную, имеет одинаковую сложность что при сеттерах, что при прямом доступе. Разве что брек-поинт будет в одном месте. И я готов этим пожертвовать ради читаемости и простоты кода. Чем меньше кода, чем он более модульный - тем меньше таких проблем. В той же отладке, если я где-то проверяю переменные объекта, в случае геттера, мне надо провалиться в геттер(это если там просто указатель или объект...) и там посмотреть значение переменной vs просто сразу её увидеть. __declspec(property) меня тоже не устраивает, потому что это получается: 1. этажерка в хедере 2. дополнительная гетаница путаница в коде. Ещё одна печаль с аксессорами: это их общепринятая форма написания: Get/Set(Entity), сначала глагол, потом свойство. Как так при повальном ООП получилось, янипанимаю!.. Т.о. когда, к примеру, intellisence тебе выдаёт список, или ты сам тыкаешь в комбо с методами: после первых трёх букв, тебе ещё там надо покопаться, или понабирать дальше. Кроме того, визуально ты сначала видишь первые буквы, потом вчитываешься в остальные. Искать по первым буквам удобнее, чем по средним. У себя во внутренних проектах я в именах использовал сначала центральную Entity, потом, если надо, идёт(ут) уточнение(я) в порядке иерархии, и в конце идёт глагол (Get/Set/Reset/Backup/....). Во-первых, искать быстро, во-вторых, в первые же миллисекунды видно, с чем я работаю, в третьих видно в intellisence, какие действия свойство для себя допускает (Get/Set/Reset/Backup/....), что при обычном написании, когда глагол идёт вначале, практически невозможно, во-первых, из-за порядка, во-вторых, из-за неравномерности, при поиске итемы с Get/Set занимают обычно процентов 60-80 всех методов, а у меня всё равномерно распределено по именам свойств. Но, увы, я такой один Однако, как бы там ни было, если проект открытый, т.е. его(код) кто-то будет использовать, надо придерживаться общих правил и делать "нормальный" стандартный доступ к переменным класса через функции, даже просто потому что так удобнее понимать чужой код. А как у вас с инкапсуляцией по пятницам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 06:38 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
CEMb, Инкапсуляция по пятницам противопоказана... пятница же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 10:25 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНазначение тривиальных аксессоров в том, чтобы когда понадобится нетривиальный, то просто переписывается аксессор, а не весь код который использует эту переменную. Именно поэтому в борланде изобрели property. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:29 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
CEMbесли переменная 1 раз где-то на старте устанавливается, а потом только читается - надо сделать её константой!!! :) Если вы пишите код, с которым будете работать только вы, значит вы пишете никому не нужный код :) Это так, мысль в сторону, ни к кому конкретно. У класса может быть геттер без сеттера. В своих кишках класс будет копаться своими алгоритмами, другим до этого дела нет. Если кто то реализует алгоритм, который работает с членами класса напрямую, этот алгоритм может быть реализован как метод класса. И, наверное, это будет нагляднее и понятнее? Спустя годы понять где именно разбросаны эти алгоритмы будет непросто. А голый доступ к членам класса, это большой соблазн написать алгоритм там, где он нужен "прямо сейчас". А это может привести к дублированию кода(ужас!) и/или к непоняткам при поддержке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:56 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИменно поэтому в борланде изобрели property.я вот тут подумал... Если кому надо, можно просто написать шаблон(+макрос?), который будет неявно обрабатывать запись/чтение в параметр. Сейчас shared_ptr используем, например, и нормально. Просто добавится ещё один шаблон сверху. Плюсы: - Кода меньше: если обработчик не нужен, он не создаётся. Не надо заводить отдельные property - "Инкапсуляция" искаробки. Минусы: - Посмотреть значение под дебагом будет сложно так же, как в случае с аксессорами - Слегка теряется прозрачность кода я уже даже так делал, где-то тут писал про систему параметров+GUI+события+сериализация. Но у меня там только не было пользовательских обработчиков -_- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:57 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
alex_kконстантой!!! :)она читается из настроек alex_kЕсли вы пишите код, с которым будете работать только вы, значит вы пишете никому не нужный код :) Это так, мысль в сторону, ни к кому конкретно.О_о а я код потом компилю, и у меня получаются ехе-шники, которые используются другими людьми alex_kУ класса может быть геттер без сеттера. В своих кишках класс будет копаться своими алгоритмами, другим до этого дела нет.да, но, imho, геттер, просто возвращающий значение, не нужен. Меня задалбывает страшно, когда надо просмотреть работу, например, одного условия, и приходится пройти по двум макросам и внутри их по пять геттеров, потому что шибко умные программисты сделали всё, как надо. Открыть сам объект и найти нужные значения по имени тоже не представляется простым, потому что: 1. иерархия 2. чёрдовы проперти со своими другими названиями alex_kЕсли кто то реализует алгоритм, который работает с членами класса напрямую, этот алгоритм может быть реализован как метод класса. И, наверное, это будет нагляднее и понятнее?да, только так. Против этого я ничего и не говорил. alex_kА голый доступ к членам класса, это большой соблазн написать алгоритм там, где он нужен "прямо сейчас". А это может привести к дублированию кода(ужас!) и/или к непоняткам при поддержкеИстинный программианин не должен соблазняться голым доступом для осуществления грешных помыслов В общем, у меня нет проблем, чтобы использовать внутренние переменные классов в других частях кода только на get в большинстве случаев. Меньшинство, например: чисто информационные структуры, без функционала внутри класса, используемые только для передачи информации от блока к блоку. И не использовать прямой доступ там, где это требует валидации внутри класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 12:16 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
CEMbИстинный программианин не должен соблазняться голым доступом для осуществления грешных помыслов Все лгут ошибаются. Но компилятор реже всех :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 13:12 |
|
||
|
Get*/Set* отдельными методами или одним, какой вариант более православный?
|
|||
|---|---|---|---|
|
#18+
alex_kCEMbИстинный программианин не должен соблазняться голым доступом для осуществления грешных помыслов Все лгут ошибаются. Но компилятор реже всех :)Да компилятору вообще всё равно, лишь бы компилировалось. Дело в другом: быстрая и удобная разработка. Для людей. Это мы тут уже давно в двух темах обсуждаем. Я просто подкинул идею, как можно упростить процесс разработки. Есть риск ошибок, да, я уже писал про это, но этот риск, по сравнению с другими рисками, очень мал и быстро вычисляется и фиксается. И то, в данном случае мы больше обнаруживаем кривых программистов Сплошная польза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 21:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39330595&tid=2018401]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 194ms |

| 0 / 0 |
