Название: Чистый код: как правильно называть члены структур Отправлено: YvenTitan от Октябрь 20, 2017, 13:12 Здравстуйте,
Есть мнение, что члены классов должны начинаться с m_ Как считаете, к членам структур это правило должно относиться? Название: Re: Чистый код: как правильно называть члены структур Отправлено: ViTech от Октябрь 20, 2017, 13:45 Сначала нужно определиться чем структура отличается от класса, в понимании чистого кода :).
Коротко моё мнение: если структура не инвариант, все поля публичные, нет всяких геттеров/сеттеров, то префикс/суффикс не нужен. Название: Re: Чистый код: как правильно называть члены структур Отправлено: YvenTitan от Октябрь 20, 2017, 13:53 Я не до конца понимаю, зачем писать префикс в членах класса. Я делаю по 2 причинам: во-первых, принято, признак хорошего тона; во-вторых, если вижу префикс, то сразу понимаю, что член класса и немного удобнее разбирать код.
Не знаю, чем отличаются в понимании чистого кода, может смысл закрытости членов класса... У меня "геттеров/сеттеров" нет, не инвариант Название: Re: Чистый код: как правильно называть члены структур Отправлено: ViTech от Октябрь 20, 2017, 14:04 Я не до конца понимаю, зачем писать префикс в членах класса. Я делаю по 2 причинам: во-первых, принято, признак хорошего тона; во-вторых, если вижу префикс, то сразу понимаю, что член класса и немного удобнее разбирать код. Пара причин для примера: 1. С префиксами нет конфликтов имён с геттерами. 2. В IDE в автодополнении они сгруппированы, по "m_" можно увидеть список членов класса. Название: Re: Чистый код: как правильно называть члены структур Отправлено: Racheengel от Октябрь 20, 2017, 16:58 Я не пишу, т.к. у структуры все мемберы публичны.
Если нужны геттеры - делайте класс тогда. Название: Re: Чистый код: как правильно называть члены структур Отправлено: deMax от Октябрь 21, 2017, 13:08 Пара причин для примера: имхо, геттеры лучше начинать с get.1. С префиксами нет конфликтов имён с геттерами. 2. В IDE в автодополнении они сгруппированы, по "m_" можно увидеть список членов класса. автодополнение актуально только внутри методов класса(а там и так не так много методов), т.к. публичные члены для класса лучше не делать. Название: Re: Чистый код: как правильно называть члены структур Отправлено: Авварон от Октябрь 21, 2017, 19:19 Здравстуйте, Есть мнение, что члены классов должны начинаться с m_ Как считаете, к членам структур это правило должно относиться? Уже написали в принципе - префикс добавляется к мемберам, чтобы избежать коллизии с геттером: a.value(); // геттер a.setValue(); // сеттер a.m_value; // мембер Я лично предпочитаю писать не m_value (как в венгерской нотации), а _value. Еще есть вариант с постфиксом value_, но мне он кажется безобразным (value_->foo()) - _value->foo()->bar() встречается гораздо чаще, чем a->_foo->_bar (тоже ужасно, но внутрь привата лезешь редко). Еще есть вариант с d-pointer'ом: T value() const { return d->value; } Название: Re: Чистый код: как правильно называть члены структур Отправлено: deMax от Октябрь 22, 2017, 13:24 Уже написали в принципе - префикс добавляется к мемберам, чтобы избежать коллизии с геттером: имхо:a.value(); // геттер a.setValue(); // сеттер a.m_value; // мембер a.value; // мембер a.setValue(); // сеттер a.getValue(); // геттер геттер это метод, действие, глагол, а не существительное. И если в классе слишком много member, setMember, getMember - то напрашивается сделать класс структурой, или разделить класс на структуру и класс. getValue() - сразу видно что это геттер. value() - это некая функция возвращающая значение, непонятно что делающая(просто взять значение или вычислить). toValue() - преобразование m_ подкупает автодополнением, но в принципе IDE сама могла бы подсказывать и фильтровать дополнения(например при автодополнении ctrl+M только методы...). Название: Re: Чистый код: как правильно называть члены структур Отправлено: ssoft от Октябрь 23, 2017, 12:37 Последнее время (лет 5) взял за правило обязательно использовать префикс для членов класса m_ и ни капли не жалею. Читабельность кода вырастает, саппорт и дальнейший разбор облегчается.
Кроме коллизий с геттерами могут быть и коллизии и с параметрами методов, и с локальными переменными. Когда требуется анализ кода без подсветки синтаксиса префикс сильно помогает. Название: Re: Чистый код: как правильно называть члены структур Отправлено: __Heaven__ от Октябрь 23, 2017, 14:07 Предпочитаю classMember_ и structMember.
Название: Re: Чистый код: как правильно называть члены структур Отправлено: YvenTitan от Июнь 05, 2018, 10:13 Что можно сделать, чтобы избежать коллизии с параметрами конструктора? Нормально в конец имени члена добавить "_" или правильнее произвольно поменять имя параметра конструктора?
Например, class Example { int param1_; int param2_; Example(int param1, int param2) { param1_ = param1; param2_ = param2; } } Название: Re: Чистый код: как правильно называть члены структур Отправлено: Авварон от Июнь 05, 2018, 11:08 param1(param1)
Название: Re: Чистый код: как правильно называть члены структур Отправлено: kambala от Июнь 05, 2018, 11:09 приватные переменные обычно имеют префикс _ или m_. Для публичных можно в параметры конструктора в конец добавить _
Название: Re: Чистый код: как правильно называть члены структур Отправлено: Пантер от Июнь 05, 2018, 11:16 У меня все мемберы приватные, именуются вот так someName_, коллизии с параметрами не возникает, ибо параметры именуются someName.
Название: Re: Чистый код: как правильно называть члены структур Отправлено: YvenTitan от Июнь 05, 2018, 11:26 Извините, опечатался. Структура и все параметры публичные
struct Example { int param1_; int param2_; Example(int param1, int param2) { param1_ = param1; param2_ = param2; } } Название: Re: Чистый код: как правильно называть члены структур Отправлено: ViTech от Июнь 05, 2018, 11:32 Код
Название: Re: Чистый код: как правильно называть члены структур Отправлено: YvenTitan от Июнь 05, 2018, 11:33 Спасибо за мнение
Название: Re: Чистый код: как правильно называть члены структур Отправлено: _Bers от Июнь 06, 2018, 01:27 Здравстуйте, Есть мнение, что члены классов должны начинаться с m_ Как считаете, к членам структур это правило должно относиться? Уже написали в принципе - префикс добавляется к мемберам, чтобы избежать коллизии с геттером: a.value(); // геттер a.setValue(); // сеттер a.m_value; // мембер Я лично предпочитаю писать не m_value (как в венгерской нотации), а _value. Еще есть вариант с постфиксом value_, но мне он кажется безобразным (value_->foo()) - _value->foo()->bar() встречается гораздо чаще, чем a->_foo->_bar (тоже ужасно, но внутрь привата лезешь редко). Еще есть вариант с d-pointer'ом: T value() const { return d->value; } подчеркивание в начале имени - дурной тон. можно нарваться на UB. грамотные любители подчеркиваний ставят черточки в конце имени. Название: Re: Чистый код: как правильно называть члены структур Отправлено: deMax от Июнь 06, 2018, 13:26 поэтому в начале приватных членов "m_" - автодополнение внутри класса легко находит приватные члены и вне класса приватные члены мешаться не будут.
Название: Re: Чистый код: как правильно называть члены структур Отправлено: Авварон от Июнь 06, 2018, 14:00 подчеркивание в начале имени - дурной тон. можно нарваться на UB. грамотные любители подчеркиваний ставят черточки в конце имени. Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем. _ и __ зарезервированы для имен стандартных библиотек, но чтобы UB - первый раз слышу. Название: Re: Чистый код: как правильно называть члены структур Отправлено: Racheengel от Июнь 07, 2018, 01:35 подчеркивание в начале имени - дурной тон. Согласен. Лушче m_ можно нарваться на UB. Скорее на УГ. Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем. Согласен. Такое чувство, что человек хотел что-то разумное после bar_ добавить, но... умер, наверное... Название: Re: Чистый код: как правильно называть члены структур Отправлено: Igors от Июнь 07, 2018, 07:41 Черточки в конце имени отвратительны, код вида ... Рассуждаете как чистый гуманитарий :) Все на чувствах, эмоциях, объективности никакой. Да, я бы не стал использовать подчеркивания ни в начале, ни в конце, но если другой так делает - нет оснований его осуждать. Любой разумный стиль неплох. И, кстати, всегда есть исключения. Напр m_ дело хорошее, но иногда (пусть редко) лучше без него, напр здесьКод
Название: Re: Чистый код: как правильно называть члены структур Отправлено: deMax от Июнь 07, 2018, 10:17 struct Point А это структура, они там нафиг не нужны. m_ для закрытых полей, которые не должны вне класса светиться.Название: Re: Чистый код: как правильно называть члены структур Отправлено: Пантер от Июнь 07, 2018, 10:22 Я придерживаюсь наименования мемберов в виде someName_. m_ в начале слова только мешает его быстро прочитать, в случае нижнего подчеркивания вконце мы сразу видим слово и в конце понимаем мембер это или не мембер. Как-то так.
Не холивара ради. У каждого может быть свое мнение, не переживайте, важе мнение ошибочно, мое нет. ;) Название: Re: Чистый код: как правильно называть члены структур Отправлено: deMax от Июнь 07, 2018, 11:57 Способов много, стандарта тут нет. m_ немного мешает чтению, но зато сразу видно что это закрытый член класса ( а не аргумент или переменная на стеке ).
Выделение цветом, не так наглядно как имя. Ну и автодополнение непонятно как настроить чтобы фильтровать члены класса и переменые. Название: Re: Чистый код: как правильно называть члены структур Отправлено: _Bers от Июнь 15, 2018, 01:38 подчеркивание в начале имени - дурной тон. можно нарваться на UB. грамотные любители подчеркиваний ставят черточки в конце имени. Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем. _ и __ зарезервированы для имен стандартных библиотек, но чтобы UB - первый раз слышу. зарезервированы для нужд языка. _ или __ для глобальных идентификаторов _UpperCase для любых возможных кейсов использования. с обычными глобальными переменными можно попутаться в шаблонах: http://rextester.com/VTE47007 Код: #include <iostream> кроме того, дефайны препроцессора так же являются глобальными идентификаторами. а им вапще плевать на области видимости. итого: подчеркивание в начале имени открывает потенциальную вероятность коллизий. конретную ссылку на стандарт искать лень. Название: Re: Чистый код: как правильно называть члены структур Отправлено: Racheengel от Июнь 22, 2018, 00:57 struct Point А это структура, они там нафиг не нужны. m_ для закрытых полей, которые не должны вне класса светиться.А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера? Название: Re: Чистый код: как правильно называть члены структур Отправлено: ssoft от Июнь 22, 2018, 07:44 А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера? Дак на то оно и protected, чтобы его читать-писать без геттеросеттера. Иначе должно быть private. Название: Re: Чистый код: как правильно называть члены структур Отправлено: Racheengel от Декабрь 15, 2018, 03:10 А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера? Дак на то оно и protected, чтобы его читать-писать без геттеросеттера. Иначе должно быть private. да просто некрасиво немного... а вдруг переименуют его в базовам классе? Название: Re: Чистый код: как правильно называть члены структур Отправлено: sergek от Декабрь 15, 2018, 10:25 да просто некрасиво немного... а вдруг переименуют его в базовам классе? А если геттеры/сеттеры в интерфейсе не нужны? Делать их в защищенной части? ;) Это уже слишком...Название: Re: Чистый код: как правильно называть члены структур Отправлено: Racheengel от Декабрь 18, 2018, 12:08 да просто некрасиво немного... а вдруг переименуют его в базовам классе? А если геттеры/сеттеры в интерфейсе не нужны? Делать их в защищенной части? ;) Это уже слишком...Это другой конец эстетической палки... с перегибом :) Не, я не против доступа к протектед-переменной, просто за красоту подумал) |