Форум программистов, компьютерный форум, киберфорум
sourcerer
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Как искать хорошие названия для идентификаторов в выбранной предметной области

Запись от sourcerer размещена 02.08.2018 в 12:40
Показов 5599 Комментарии 5
Метки c++

Названия переменных лучше просто гуглить, смотреть в википедии, а затем смотреть английский вариант статьи в той же википедии. Скажем, гуглим "коэффициент светопрозрачности", первым же линком находим статью Коэффициент пропускания, смотрим английский вариант статьи - вуаля, термин по-английски звучит так: transmission coefficient. Гуглим оргстекло, получаем по такой же схеме plexiglas. Значит коэффициент светопрозрачности оргстекла у нас будет plexiglasTransmissionCoefficient. Отлично! Имя переменной говорит само за себя.
То же самое, скажем, со светодиодной лентой. Вот такое:
C++
1
float meter; // длина одной полоски светодиодной ленты
никуда не годится. Гораздо лучше было бы сделать так:
C++
1
float ledStripLightLength;
И никаких комментариев не надо. Это называется самодокументируемый код.

Источник.
Метки c++
Размещено в howto
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 5
Комментарии
  1. Старый комментарий
    Аватар для MLPMan
    В целом это правильно, но в таком подходе можно и переусердствовать (шутка про AbstractSingletonProxyFactoryBean). Одно слово не очень длинное, но цепочка с операторами и другими информативными именами бывает, выйдет весьма громоздкой. Лично я предпочитаю вдобавок отбрасывать "избыточные" окончания: "Len", "Coef". Хотя в той проге может встретится, например, слово "Lens", тоже надо бдеть, чтоб путаница не настигла.
    Запись от MLPMan размещена 03.08.2018 в 14:39 MLPMan вне форума
  2. Старый комментарий
    Аватар для tezaurismosis
    plexiglasTransmissionCoefficient
    ledStripLightLength
    Длинновато получается. Особенное если придётся использовать в сложных конструкциях
    C++
    1
    2
    3
    4
    5
    
    // формулы от балды
    for (int i = 0; i < plexiglasTransmissionCoefficient * ledStripLightLength; i++) {
        arr[i] = std::pow(ledStripLightLength * ledStripLightLength, plexiglasTransmissionCoefficient - 1f);
        // и т.д.
    }
    Если в коде встречается только один коэффициент светопрозрачности, то plexiglas из названия можно вообще выбросить, оставив только в комментарии. Ведь и так понятно, что имеется в виду. Я, в отличие от предыдущего комментатора, люблю эти сокращения использовать - Len, Coeff и проч. Да и комментарии никто не отменял, там можно хоть определение плексигласа описать))

    А в целом с методом согласен, сам так делаю. В названия переменных идёт обрубленный вариант, а в комментарий - по полной.
    Запись от tezaurismosis размещена 05.08.2018 в 11:52 tezaurismosis вне форума
  3. Старый комментарий
    Аватар для Evg
    А я вот не изобретаю себе никаких формальных правил по стилю или по названиям. Я руководствуюсь по большому счёту одним правилом: код нужно писать так, чтобы его было удобно читать и сопровождать в будущем. Если код будет лучше и быстрее пониматься с длинным именем локальной переменной - я напишу длинное. Если для хорошего восприятия кода достаточно (а во многих случаях даже лучше) короткого имени переменной - я напишу короткое. Если короткое имя требует комментария, я его напишу, если комментарий избыточен, я его писать не буду
    Запись от Evg размещена 05.08.2018 в 12:02 Evg вне форума
  4. Старый комментарий
    Аватар для Avazart
    Если код расширяется, то и стиль получается придется менять и переменные рефакторить. Так что лучше все же длинные, но понятные имена.

    Но вся соль в том что смысл имен переменных диктуется предметной областью, и иногда она не дает нормально задать имена, иногда не удается из-за плохого знания этой предметной области.
    Запись от Avazart размещена 05.08.2018 в 14:42 Avazart вне форума
  5. Старый комментарий
    Аватар для Avazart
    C++
    1
    2
    3
    4
    5
    
    // формулы от балды
    for (int i = 0; i < plexiglasTransmissionCoefficient * ledStripLightLength; i++) {
        arr[i] = std::pow(ledStripLightLength * ledStripLightLength, plexiglasTransmissionCoefficient - 1f);
        // и т.д.
    }
    Всегда можно сделать лучше форматированием и вынесением кода:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    using namespace std;
     
    const int count = plexiglasTransmissionCoefficient * ledStripLightLength;
    for (int i = 0; i < count; ++i) 
    {
     
        arr[i] = pow(ledStripLightLength * ledStripLightLength,
                     plexiglasTransmissionCoefficient - 1f);
        // и т.д.
    }
    В любом случае стоит отталкиваться от смысла(предметной области), поэтому примеры от балды не подходят.
    К примеру вероятно можно было бы избавится от квадрата который в степени математически упростив, а если нет можно было бы вывести в отдельную ф-цию

    C++
    1
    2
    3
    4
    
    double powSqr(int length,double coefficient)
    {
       return pow(length * length,  coefficient - 1f);
    };
    Запись от Avazart размещена 05.08.2018 в 14:46 Avazart вне форума
 
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru