Russian Qt Forum
Ноябрь 22, 2024, 11:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Чистый код: как правильно называть члены структур  (Прочитано 18939 раз)
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #15 : Июнь 05, 2018, 11:32 »

Код
C++ (Qt)
struct Example
{
   int param1;
   int param2;
 
   Example(int param1, int param2)
       : param1{param1},
         param2{param2}
   {}
};
 
Записан

Пока сам не сделаешь...
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #16 : Июнь 05, 2018, 11:33 »

Спасибо за мнение
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #17 : Июнь 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.
грамотные любители подчеркиваний ставят черточки в конце имени.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #18 : Июнь 06, 2018, 13:26 »

поэтому в начале приватных членов "m_" - автодополнение внутри класса легко находит приватные члены и вне класса приватные члены мешаться не будут.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #19 : Июнь 06, 2018, 14:00 »

подчеркивание в начале имени - дурной тон.
можно нарваться на UB.
грамотные любители подчеркиваний ставят черточки в конце имени.


Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем.
_ и __ зарезервированы для имен стандартных библиотек, но чтобы UB - первый раз слышу.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #20 : Июнь 07, 2018, 01:35 »

подчеркивание в начале имени - дурной тон.

Согласен. Лушче m_

можно нарваться на UB.

Скорее на УГ.

Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем.

Согласен. Такое чувство, что человек хотел что-то разумное после bar_ добавить, но... умер, наверное...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Июнь 07, 2018, 07:41 »

Черточки в конце имени отвратительны, код вида ...
Рассуждаете как чистый гуманитарий Улыбающийся Все на чувствах, эмоциях, объективности никакой. Да, я бы не стал использовать подчеркивания ни в начале, ни в конце, но если другой так делает - нет оснований его осуждать. Любой разумный стиль неплох. И, кстати, всегда есть исключения. Напр m_  дело хорошее, но иногда (пусть редко) лучше без него, напр здесь
Код
C++ (Qt)
struct Point {
 int x, y;
};
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #22 : Июнь 07, 2018, 10:17 »

struct Point
А это структура, они там нафиг не нужны. m_ для закрытых полей, которые не должны вне класса светиться.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #23 : Июнь 07, 2018, 10:22 »

Я придерживаюсь наименования мемберов в виде someName_. m_ в начале слова только мешает его быстро прочитать, в случае нижнего подчеркивания вконце мы сразу видим слово и в конце понимаем мембер это или не мембер. Как-то так.
Не холивара ради. У каждого может быть свое мнение, не переживайте, важе мнение ошибочно, мое нет. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #24 : Июнь 07, 2018, 11:57 »

Способов много, стандарта тут нет. m_ немного мешает чтению, но зато сразу видно что это закрытый член класса ( а не аргумент или переменная на стеке ).
Выделение цветом, не так наглядно как имя. Ну и автодополнение непонятно как настроить чтобы фильтровать члены класса и переменые.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #25 : Июнь 15, 2018, 01:38 »

подчеркивание в начале имени - дурной тон.
можно нарваться на UB.
грамотные любители подчеркиваний ставят черточки в конце имени.


Пруфы? Черточки в конце имени отвратительны, код вида bar_.foo(); абсолютно нечитаем.
_ и __ зарезервированы для имен стандартных библиотек, но чтобы UB - первый раз слышу.

зарезервированы для нужд языка.
_ или __ для глобальных идентификаторов
_UpperCase  для любых возможных кейсов использования.

с обычными глобальными переменными можно попутаться в шаблонах:
http://rextester.com/VTE47007

Код:
#include <iostream>
#include <string>

std::string _reserved = "global";

struct base
{
    std::string _reserved = "member";    
};

template<class t> struct sample: t
{
    void set(const std::string& v) { _reserved = v; }
};

int main()
{
    sample<base> s;
    s.set("UB");
    
    std::cout << s._reserved << '\n';
}

кроме того, дефайны препроцессора так же являются глобальными идентификаторами.
а им вапще плевать на области видимости.

итого: подчеркивание в начале имени открывает потенциальную вероятность коллизий.

конретную ссылку на стандарт искать лень.
« Последнее редактирование: Июнь 15, 2018, 01:51 от _Bers » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #26 : Июнь 22, 2018, 00:57 »

struct Point
А это структура, они там нафиг не нужны. m_ для закрытых полей, которые не должны вне класса светиться.

А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #27 : Июнь 22, 2018, 07:44 »

А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера?

Дак на то оно и protected, чтобы его читать-писать без геттеросеттера. Иначе должно быть private.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #28 : Декабрь 15, 2018, 03:10 »

А вот если это protected-поле, не моветонъ ли в наследнике его читать-писать без геттеросеттера?

Дак на то оно и protected, чтобы его читать-писать без геттеросеттера. Иначе должно быть private.

да просто некрасиво немного... а вдруг переименуют его в базовам классе?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #29 : Декабрь 15, 2018, 10:25 »

да просто некрасиво немного... а вдруг переименуют его в базовам классе?
А если геттеры/сеттеры в интерфейсе не нужны? Делать их в защищенной части? Подмигивающий Это уже слишком...
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.092 секунд. Запросов: 23.