WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Хороший стиль кодинга (программирования) на php. Часть 2 Названия.


Прислал: Алексей Волков [ 01.12.2001 @ 22:32 ]
Раздел:: [ Статьи по PHP ]


Названия

Используйте подходящие имена

Названия это сердце всего программирования. В прошлом люди даже верили, что тот, кто знает настоящее имя кого-то, то может получить полную магическую власть над ним. Если Вы можете понять название того иного субъекта программирования, то Вы уже получили власть над кодом. Не смейтесь!

Название – это результат глубокого осмысления процессов среды, в который будет существовать субъект. Только программист, который полностью понимается систему как единое целое, может придумать полностью отвечающее ситуации название. Если название соответствует, то все части соответствуют друг другу, связи ясны, понимание ситуации присутствует, и то, что люди ожидают от названия будет соответствовать действительности.

Если вы обнаружите, что Вы обнаружите, что все Ваши имена похожи на temp, $d, $temp2, то, возможно, Вам стоит серьезно пересмотреть взгляды.

Названия классов

  • Давайте название классу только после того, как становится полностью очевидно, какими функциями он будет оперировать. Если Вы не можете полностью осмыслить, что предстоит делать функции или классу, то соответственно и название полностью соответствующее разработать не сможете.
  • Составляя названия более чем из 3 слов, Вы рискуете запутаться и отойти от начального проекта. Пересмотрите концепт.
  • Старайтесь избегать искушения называть классы в виде производной названия родительского класса. Каждый класс несет в себе отдельную функцию и должен иметь собственное, самостоятельно название.
  • Суффиксы зачастую полезны. Например, если Ваша система использует агентов, то  название будет DownloadAgent соответствовать действительности.
  • Используйте только английские названия. Старайтесь не использовать кириллистических названий и транскрипций

Названия методов и функций

  • Обычно каждый метод и функция выполняют свое действие, таким образом, название должно четко объяснять, что делает этот класс или функция: CheckForErrors() вместо ErrorCheck(), DumpDataToFile() вместо DataFile(). Это также делает функции и объекты более distinguishable.
  • Суфиксы часто полезны:
    • Max - означает максимально возможное значение.
    • Cnt – текущий счетчик изменяющего значения переменной.
    • Key – ключ.

Например: RetryMax означает максимальное количество повторов, RetryCnt означает текущий счетчик повторов.

  • Префиксы также часто полезны:
    • Is – используйте чтобы задать вопрос. Когда кто-то видит Is, он понимает, что речь идет о вопросе, так как в английском языке вопросы чаще всего начинаются в Is.
    • Get – Получить значение.
    • Set – Установить значение.

Для примера: IsHitRetryLimit.

Не используйте все прописные (большие) буквы в аббревиатурах.

  • Старайтесь не использовать написание “все прописные буквы” в названиях, даже когда речь идет об очень распространенной аббревиатуре. В любой ситуации.

    Используйте: GetHtmlStatistic.
    Не используйте: GetHTMLStatistic.

Мотивация

  • Люди увидев название могут последовать самой не предсказуемой логике. Лучше использовать вариант, в котором двусмысленность невозможна.
  • Например NetworkABCKey. Обратите как двояка буква С от слова ABC и K от слова Key. Кто-то вообще не обратит внимание, но все равно рано или поздно попадется тот, кто поймет текст не правильно..

Пример

   class FluidOz             // а не FluidOZ
   class GetHtmlStatistic    // а не GetHTMLStatistic

Названия классов
  • Используйте верхний регистра для разделения слов, и нижний для всех символов кроме первого.
  • Первый символ в названии должен быть с большой буквы
  • Не используйте подчеркивание('_')

Мотивация

  • Изо всех возможных вариантов множество людей согласились с тем, что это лучший вариант.

Пример

   class NameOneTwo
   class Name
Названия классов в библиотеках
  • Теперь, когда схожие библиотеки становятся все более и более распространенными, нам необходимо избежать того, чтобы классы от разных поставщиков или разработчиков обладали одинаковым названием.
  • При использовании классов было бы отлично использовать префикс к названию в виде уникальной строки. Как минимум 2 символа, но лучше еще более длинный.

Пример

John Johnson написал библиотеку и использует JJ в качестве префикса для классов:

   class JjLinkList
   {
   }
Названия методов
  • Используйте те же методы, что и в названиях классов.

Мотивация

  • Изо всех возможных вариантов множество людей согласились с тем, что это лучший вариант.

Пример

   class NameOneTwo
   {
      function DoIt() {};
      function HandleError() {};
   }

Название аттрибутов классов
  • Аттрибуты (переменные) классов должны иметь префикс “m”
  • После “m” следует применять обычные правила для названий классов
  • “m” всегда стоит впереди всех дополнительных модификаторов

Мотивация

  • Использование 'm' позволяется избежать конфликтов с именами других элементов класса.   Часто названия классов и аттрибутов очень похожи, особенно не для автора.

Пример

   class NameOneTwo
   {
      function VarAbc() {};
      function ErrorNumber() {};
      var $mVarAbc;
      var $mErrorNumber;
      var $mrName;
   }
Названия аргументов метода (функций)
  • Первый символ должен быть в нижнем регистре.
  • Все слова начинающиеся после первого слова должны начинаться с большой буквы

Мотивация

  • Вы всегда сможете сказать какие переменные передаются как параметры.

Пример

   class NameOneTwo
   {
      function StartYourEngines(&$someEngine, &$anotherEngine) {
        $this->mSomeEngine = $someEngine;
        $this->mAnotherEngine = $anotherEngine;
      }

     var $mSomeEngine;
      var $mAnotherEngine;
   }
Названия переменных
  • Используйте все буквы в нижнем регистре
  • используйте подчеркивание '_' для разделения слов.

Мотивация

  • С таким подходом область использования переменных предельна ясна.
  • Теперь все типы переменных отличаются друг от друга и их можно легко узнать в коде.

Пример

function HandleError($errorNumber)
{
    $error = new OsError;
    $time_of_error = $error->GetTimeOfError();
    $error_processor = $error->GetErrorProcessor();
}

Ссылки на переменные и функции возвращающие ссылки
  • Ссылки следует предварять префиксом 'r'.

Мотивация

  • Различие между переменными будет кристально понятным.
  • Это устанавливает различие между методом, возвращающим поддающийся изменению объекты и то же самым названием метода, возвращающим неподдающийся изменению объект.  

Пример

class Test
{
    var $mrStatus;
    function DoSomething(&$rStatus) {};
    function &rStatus() {};
}
Глобальные переменные
  • Все глобальные переменные следует префиксировать 'g'.

Мотивация

  • Очень важно, чтобы было сразу видно зону действия переменной.

Пример

    global $gLog;
    global &$grLog;
Определение переменных и глобальные константы
  • Глобальные переменные должны быть названы используя все символы в верхнем регистре и с разделителем в виде подчеркивания “_” между словами.

Мотивация

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

Пример

define("A_GLOBAL_CONSTANT", "Hello world!");
Статические переменные
  • Вы можете предварять статические переменные символом 's'.

Мотивация

  • Это важно знать область в которой используется переменная.

Пример

function test()
{
  static $msStatus = 0;
}
Function Names
  • Для функций PHP следует использовать тебе же правила, что описано в GNU соглашении для C. Используйте все буквы в нижнем регистре с подчеркиванием '_' в качестве разделителя слов.

Мотивация

  • Это делает функции в корне отличными от классов.

Пример

function some_bloody_function()
{
}



 :::::  Grey пишет 04.12.2001 @ 10:17 
Алексей, было бы неплохо чтобы ты просто опубликовал перевод, без внесения изменений "основанных на своем опыте".
Честно говоря я не очень доверяю ему.

Из статьи:

[begin]

Глобальные переменные
Все глобальные переменные следует префиксировать 'g'.

[skip]

Определение переменных и глобальные константы
Глобальные переменные должны быть названы используя все символы в верхнем
регистре и с разделителем в виде подчеркивания “_” между словами.

[end]

Какое из двух определений глобальных переменных из перевода, а какое внесено тобой?
Какой смысл от такой информации, если она неоднозначна?


 :::::  Любитель Перлов пишет 05.12.2001 @ 08:15 
> Изо всех возможных вариантов множество людей согласились с тем,
> что это лучший вариант.

Скажите, а где еще можно почитать что-нибудь от А. Волкова?
 :::::  NAS пишет 05.12.2001 @ 08:58 
Вот здесь посмотри
http://www.marketer.ru/
 :::::  Serge L. пишет 05.12.2001 @ 19:16 
Вижу:
Не используйте подчеркивание('_')
И тут же:
используйте подчеркивание '_' для разделения слов.

Вывод: Вы не Ален И. Голуб :)
 :::::  Andrey пишет 06.12.2001 @ 05:52 
Некоторые концепции полезны, но для себя за 7 лет программирования на Паскале, я вынес свои методы оформления и написания кода. Но для PHP я прочитал первым делом в документации раздел PEAR. Хочу дополнить, что символ подчеркивания рекомендуется использовать в классах для обозначения скрытых членов класса, как функций, так и переменных. Наприме:
class MyCalss {
var $_id;
function _getLocalId() {
...
}
...
}
 :::::  unknown пишет 12.12.2001 @ 14:06 
А вот я категорически не согласен с вышеизложенным... Вопрос простой: "Зачем мучиться с выбором имён переменных, выбором имён функций и т.д.? Зачем усложнять себе жизнь?" Это никому не нужные 'навороты'. Аргументировать это могу тем, что опытный профессиональный программист всегда выдаёт готовый код, не нуждающийся в доработке и исправлениях. То есть скрипт - это есть готовый продукт, который зачастую просто не терпит вмешательств. Ведь когда Вы покупаете себе новый монитор - Вы не лезете в него с паяльником, чтобы 'кое-что поправить'... Вы просто используете уже готовый монитор, над которым люди уже и так поработали. Я говорю это к тому, что очень много пользователей интернета просто не смотрят в код, а берут и ставят его себе на сайт и пользуются им. Итак, вот Вам ответ на первый вопрос.
Далее, выбирая имена переменных, функций и т.п., несущие в себе смысловую нагрузку Вы не задумываетесь над следующим:
1) По проведённым экспериментам удалось выяснить, что программный код из 100 переменных, имеющих смысловые имена, выполняется в среднем на 2,4с медленнее, чем программный код из тех же 100 переменных, написанных 'математическим кодом', то есть переменные типа $a1,$a2,$a3...$an, та же ситуация и с функциями...
2)Такой программный код просто занимает больше дискового пространства (разумеется, если это серьёзный код, а не элементарный счётчик).
3)Тут же можно затронуть и ещё одну тему - это стиль программирования. Ни к чему, например, использовать лишние пробелы и пропускать целые строчки... Вообще-то это уже отдельная тема и её следует рассмотреть в отдельной статье.
Вот Вам и ответ на второй вопрос.
Я думаю, что вполне целесообразно использовать опыт программиста с 15-ти летним стажем...
С благодарностью читающему этот текст, автор, пожелавший остаться неизвестным.
 :::::  ThE0ReTiC пишет 20.12.2001 @ 20:31 
Ну про пропуск строк и лишние пробелы - согласен. А вот математическое обозначение переменных - увольте. Я сам имею 6 лет программажа за бортом и тоже имею свою систему именования переменных, однако "венгерская нотация" была придумана не на пустом месте, и поверьте мне, автор, пожелавший остаться неизвестным, когда работаешь командой - выгоды очевидны и бесспорны. А профессионализм и стаж программиста здесь не причем. Даже человек с 15-летним стажем может потратить несколько дней на разбор кода с математической нотацией.
 :::::  Alex пишет 16.01.2002 @ 18:15 
Посмотрите здесь: http://www.php.spb.ru/php/speed.html - хорошая статья про быстродействие с практическими примерами.
Вопрос "длинных" имен переменных - там рассматривается одним из первых.
А мое мнение - длинные имена переменных в GET или POST - это еще и лишний траффик, что для наших, большей частью диалапных, линий - ощутимо...
 :::::  Вася пишет 30.09.2003 @ 07:55 
Serge L:

Вижу:
Не используйте подчеркивание('_') - в названии классов!
И тут же:
используйте подчеркивание '_' для разделения слов. - для переменных

Вывод: Вы не Ален И. Голуб :)

Вывод: внимательнее надо читать, прежде чем критиковать. ;)
 :::::  ZZmey пишет 03.12.2003 @ 17:47 
Мои 14 лет программинга на С/С++ подтверждают, что правильное оформление кода - 98% залог работоспособности. Заметим, что PHP - синтаксический клон C. А если вы когда-нибудь работали над проектом, в котором есть четкий предписанный стандарт оформления кода, то вопросов как оформлять свои исходники даже в свободном проекте у вас не возникает, не зависимо от того, на каком языке вы пишите - С, PHP, Perl, Java. Ибо годами выработанная практика оформления, как только вы на нее переходите и придерживаетесь напрочно остается у вас в голове и в дальнейшем "строить и жить помогает". ))
 :::::  tibalt пишет 20.02.2004 @ 11:01 
если длинные переменные тормозят ваш код, напишите скриптик, который будет заменять в готовом, отлаженном коде все длинные переменные на короткие и все.
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0281479