Венгерская нотация в битриксе и жизни. За и против

Запись от 24.03.2017

«$arResult тебе в шаблон!»


В интернетах много споров про использование венгерской нотации. Кто-то за, кто-то против. В этом посте я хочу изложить свою мысли на этот счет.

Если абстрагироваться от конкретных примеров, можно начать с такой абстракции — когда вы обращаетесь к переменной написанной по правилам венгерской нотации вы как бы говорите «Позвольте к вам обратиться», если переменная названа, скажем, обычным camelCase-ом, то получается что-то вроде «Эй ты, ну-ка сюда!». Вот посмотрите:

// Позвольте к вам обратиться и распечатать
print_r($arProjectList);

// Эй, ты кто такой, покажись!
echo $someVariable;

Если говорить о реальных примерах, вот к примеру у нас есть переменная $access. Что с ней делать по одному названию непонятно. Там может быть что угодно и true/false, и текстовое сообщение про уровень доступа и может быть что-то вроде "Y" / "N".

А вот теперь, посмотрим, как можно конкретизировать ситуацию с венгерской нотацией:
if ($bAccess === true) {
    // Здесь $bAccess дает понять, что может хранить
    // только два варианта — true или false, их и проверяем
}

if ($sIsAccess === 'Y') {
    // Здесь уже известно что это строка и раз есть
    // префикс 'Is', то скорее всего там Y/N
}

echo $sAccess;
// На фоне предыдущих примеров становится понятно,
// что в переменной $sAccess простая строка, вероятно
// с сообщением и её можно спокойно вывести

Еще один пример в пользу венгерской нотации — простой вопрос, какую из двух переменных можно прогнать в цикле foreach():
$arCompanyList;
$companyList;
$companies;

Правильный ответ:
в первой переменной массив компаний — его можно вывести через foreach();
во второй переменной строка — ссылка на файл со списком компаний;
в третьей, а в третьей вообще что угодно может быть, тут и гадать не стоит — придется читать все исходники от самого объявления переменной.

Такие вот переменные.
Вывод: не используешь венгерскую нотацию, будь аккуратен и внимателен.
А используешь — молодец и да прибудет с тобой $arResult