Лучшие имена идентификатора? [закрытый]

6
задан tshepang 1 November 2014 в 06:29
поделиться

8 ответов

Практика.

Всегда думайте об этом, когда пишете или читаете код, в том числе чужой. Попытайтесь выяснить, что бы вы сделали по-другому в их коде, и поговорите с ними об этом, когда это возможно (но не зацикливайтесь на этом, это будет неприятно). Задайте им вопросы о том, почему они выбрали определенное имя.

Посмотрите, насколько хорошо ваш код читается без комментариев. Если вам когда-нибудь понадобится прокомментировать основную цель чего-то, что вы назвали, подумайте, нельзя ли назвать это лучше.

Самая важная вещь - это активное умственное участие: практика.

4
ответ дан 17 December 2019 в 02:28
поделиться

Некоторые люди очень плохо разбираются в именах, и я не уверен, что это за лекарство. Когда я был инструктором, занимающимся коммерческим обучением, я часто видел такие ситуации:

Я: Хорошо, теперь вам нужно создать целочисленную переменную, которая будет содержать значение, возвращаемое функцией getchar ().

[Стажеры начинают печатать, а я брожу по комнате для тренировок. У большинства все в порядке, но один сидит, как олень, замороженный фарами]

Я: В чем проблема?

Он: Я не могу придумать имя для переменной!

Я бы дал им название, но у меня такое чувство, что люди с этой проблемой далеко не уйдут в программировании. Или, возможно, проблема в том, что они зашли слишком далеко ...

2
ответ дан 17 December 2019 в 02:28
поделиться

Я наконец нашел относительно достойное решение.

Идея состоит в том, чтобы переопределить событие OnStateChanged окна, отменить ограничения Min/Max и обновить его.

Если окно не развернуто, мы просто применим ограничения Min/Max

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Maximized)
        {
            MinWidth = 0;
            MinHeight = 0;
            MaxWidth = int.MaxValue;
            MaxHeight = int.MaxValue;

            if (!m_isDuringMaximizing)
            {
                m_isDuringMaximizing = true;
                WindowState = WindowState.Normal;
                WindowState = WindowState.Maximized;
                m_isDuringMaximizing = false;
            }
        }
        else if (!m_isDuringMaximizing)
        {
            MinWidth = 1024;
            MinHeight = 768;
            MaxWidth = 1024;
            MaxHeight = 768;
        }

        base.OnStateChanged(e);
    }
-121--4950631-

из окна браузера/веб-страницы - совершенно точно. Безопасность изолированной программной среды в браузере будет запрещена, даже если это технически возможно.

Из Windows Script Host (автономный файл .vbs или .js) - я не знаю. WMI также не обеспечивает контроль над этим, согласно этому вопросу .

-121--3260456-

Джоэл Спольский написал полезную статью о венгерской нотации несколько лет назад. Его главное понимание таково:

Давайте попробуем придумать кодировку конвенция, которая обеспечит, что, если вы когда-либо совершаете эту ошибку, код будет выглядеть неправильно. При неправильном коде по крайней мере, выглядит неправильно, то у него есть борьба с шансом быть пойманным кто-то, работающий над этим кодом или пересматривая этот код.

Далее он показывает, как строгое именование переменных может улучшить наш код. Суть в том, что предотвращение ошибок имеет более быструю и очевидную окупаемость инвестиций, чем повышение "ремонтопригодности" нашего кода.

0
ответ дан 17 December 2019 в 02:28
поделиться

Это субъективный вопрос.

Я стараюсь привести свой код в соответствие с библиотеками (или, по крайней мере, со стандартными), чтобы код имел единообразие. Я бы предложил: Посмотреть, как называются стандартные библиотечные функции. Ищите шаблоны. Узнайте, какие существуют различные соглашения по наименованию. Посмотрим, какая из них имеет наибольший смысл. Например: в большинстве Java-кодов используются действительно большие имена идентификаторов, оболочки верблюдов и т.д. C использует лаконичные/короткосрочные имена. Есть также венгерская нотация - что стоило того, когда редакторы не были достаточно умны, чтобы предоставить вам информацию о типах. В настоящее время, вероятно, она вам не нужна.

0
ответ дан 17 December 2019 в 02:28
поделиться

Прочтите хороший код и подражайте ему. Это универсальный способ узнать что-либо; просто замените «прочитано» и «код» соответствующими словами.

0
ответ дан 17 December 2019 в 02:28
поделиться

Хороший способ найти выразительные имена - это начать с текстового описания того, что на самом деле делает ваша программа. Хорошие кандидаты на функцию (метод) ) имена являются глаголами для существительных классов. Если вы сначала разрабатываете, одним из методов является текстовый анализ .

0
ответ дан 17 December 2019 в 02:28
поделиться
  • (Даже если в вашей команде всего 1 человек) согласовать стандарт кодирования со своими коллегами, чтобы вы все использовали одни и те же соглашения для именования. (например, обычно используются свойства для значений, которые возвращаются быстро, но метод GetXXX или CalculateXXX для значений, вычисление которых требует времени. Это соглашение дает вызывающему объекту гораздо лучшее представление о том, нужно ли им кэшировать результаты и т. д.). Попробуйте использовать одинаковые имена для эквивалентных понятий (например, не смешивайте Array.Count и List.Length, как Microsoft сделала в .net!)

  • Попробуйте прочитать свой код, как будто его написал кто-то другой (т.е. забудьте все, что вы знаете и просто прочтите). Имеет ли это смысл? Объясняет ли он все, что им нужно знать, чтобы понять это? (Вероятно, нет, потому что мы все забываем описать то, что мы «знаем» или что «очевидно». Вернитесь и уточните названия и документацию, чтобы кто-то другой мог взять ваш файл кода и легко его понять)

  • имена короткие, но информативные. Нет смысла писать целое предложение, но с автозаполнением в большинстве IDE также нет смысла сокращать что-либо, если это не очень стандартное сокращение.

  • Не тратьте впустую символы, говоря кому-то, что эта строка является строкой (обычная интерпретация венгерской нотации). Используйте имена, которые описывают, что что-то делает , и как это используется . например Я использую префиксы для обозначения использования (m = член, i = итератор / индекс, p = указатель, v = volatile, s = static и т. Д.). Это важная информация при доступе к переменной, поэтому это полезное дополнение к имени.Он также позволяет скопировать строку кода в электронное письмо, и получатель может точно понять, для чего предназначены все переменные - разница в использовании между статическим изменчивым значением и параметром обычно очень важна.

  • Опишите содержимое переменной или цель метода в его имени, избегая технических терминов, если вы не знаете, что все читатели вашего кода будут знать, что означают эти термины. Используйте самое простое описание, которое вы можете придумать - сложные слова и технические термины звучат разумно и впечатляюще, но гораздо более подвержены неправильному толкованию (например, из моей головы: Collation или SortOrder, Serialise или Save - хотя это хорошо известные слова в программирование так это не очень хорошие случаи).

  • Избегайте расплывчатых и почти бессмысленных терминов, таких как «значение», «тип». Это особенно верно для свойств базового класса, потому что вы получаете «Тип» в производном классе, и вы не знаете, что это за тип, если это тип. Используйте "JoystickType" или "VehicleType", и смысл сразу станет намного яснее.

  • Если вы используете значение с единицами измерения, скажите людям, что они собой представляют в названии (angleDegrees, а не angle). Этот простой трюк предотвратит врезание вашего космического корабля в Марс.

  • Для C #, C ++, C в Visual Studio попробуйте использовать AtomineerUtils , чтобы добавить комментарии документации к методам, классам и т. Д. Этот инструмент автоматически выводит документацию на основе ваших имен, поэтому чем лучше ваши имена, тем лучше документация есть, и тем меньше усилий вам нужно приложить для завершения документации.

0
ответ дан 17 December 2019 в 02:28
поделиться

Прочитайте книгу "Полный код", а точнее Глава 11 об именовании. Это контрольный список (из здесь , требуется свободная регистрация):

Общие соображения по наименованию

Полностью и точно ли имя описывает то, что представляет собой переменная? Относится ли имя к реальной проблеме, а не к решению программистского языка? Достаточно ли длинное имя, чтобы не загадывать его? Имеются ли в конце имени классификаторы вычисляемых значений, если таковые имеются? Использует ли название "Count" или "Index" вместо "Num"?

Называние конкретных видов данных

Значимы ли имена индексов петли (что-то кроме i, j или k, если петля состоит из более чем одной или двух строк или вложена)? Были ли все "временные" переменные переименованы во что-то более значимое? Названы ли булевы переменные так, чтобы их значения, когда они истинны, были ясны? Включают ли перечисленные имена типов префикс или суффикс, обозначающий категорию, например, Color_ for Color_Red, Color_Green, Color_Blue и т.д.? Назначаются ли именованные константы для абстрактных объектов, которые они представляют, а не для номеров, на которые они ссылаются?

Соглашения о названиях

Проводится ли в этих соглашениях различие между локальными, классовыми и глобальными данными? Проводит ли конвенция различия между именами типов, именованными константами, перечисленными типами и переменными? Идентифицирует ли конвенция только вводимые параметры для подпрограмм на языках, которые их не применяют? Является ли конвенция максимально совместимой со стандартными конвенциями для языка? Отформатированы ли названия для удобочитаемости?

Короткие имена

Использует ли код длинные имена (если только нет необходимости использовать короткие)? Избегает ли код сокращений, которые сохраняют только один символ? Все ли слова сокращаются последовательно? Являются ли названия произносимыми? Избегаются ли названия, которые могут быть произнесены неправильно? Задокументированы ли короткие имена в таблицах перевода?

Общие проблемы с именами: Избегали ли вы...

... имена, которые вводят в заблуждение? ...имена с похожими значениями? ...имена, которые отличаются только одним или двумя символами? ...имена, которые звучат похоже? ...имена, использующие цифры? ...имена, намеренно неправильно написанные, чтобы сделать их короче? ...имена, которые обычно неправильно написаны на английском языке? ...имена, которые конфликтуют со стандартными библиотечными наименованиями или с предопределенными именами переменных? ...совершенно произвольные имена? ...hard-to-read characters?

0
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: