Бережём память в PHP
Я люблю писать красивый код, но люблю и лаконичный, чтобы не было ничего левого и ненужного. Конечно, не до такой степени, чтобы страдала читабельность. И вот сегодня, пописывая, заметил нунужные строки в коде. Было где-то так:
$letter = $GLOBALS['tf_validate']->ords_to_unistr(array($i));
if(isset($ex[$letter])){
$tmp['class'] = 'exist';
} else {
$tmp['class'] = '';
}
$tmp['letter'] = $letter;
Как видно с кода сначала в переменную $letter чево-то там заганяется, а потом проверяется нуществование значения $ex[$letter]. Если нет, то в $tmp['class'] записывается пустое значение, иначе – ‘exist’. Ну и в конце записывается данные $letter в $tmp['letter']. В этом коде меня напрягла переменная $letter и я решил от неё избавится. Это сделать просто:
$tmp['letter'] = $GLOBALS['tf_validate']->ords_to_unistr(array($i)); if(isset($ex[$tmp['letter']])){ $tmp['class'] = 'exist'; } else { $tmp['class'] = ''; }
Теперь у нас ничего в память левого не заганяется. Но если идти дальше, то это же можно записать в 2 строки:
Вариант 1.
$tmp['letter'] = $GLOBALS['tf_validate']->ords_to_unistr(array($i));
(isset($ex[$tmp['letter']]))?$tmp['class'] = 'exist': $tmp['class'] = '';
Но можно ещё короче!
Вариант 2.
(isset($ex[$tmp['letter'] = $GLOBALS['tf_validate']->ords_to_unistr(array($i))]))?$tmp['class'] = 'exist': $tmp['class'] = '';
Но эта конструкция уже сильно запутаная и использывать её не стоит – уж больно читаемый PHP стал похож на Perl.
Вот как 6 строчек кода можно превратить в 2 без ущерба читаемости и с экономией одной сототой килобайта памяти
Update
Тут в комментариях друг Star высказался о ещё одном уменшении размера строки, но это уже больше относится к “уменшим размер – не прочитаем код”. Он предлагает уменшить строки
(isset($ex[$tmp['letter']]))? $tmp['class'] = 'exist': $tmp['class'] = '';
и как результат мы получим вариант 1 и 2 в таком виде:
Вариант 1.2.
$tmp['letter'] = $GLOBALS['tf_validate']->ords_to_unistr(array($i));
$tmp['class'] = isset($ex[$tmp['letter']])? 'exist': '';
Вариант 2.2.
$tmp['class'] = isset($ex[$tmp['letter'] = $GLOBALS['tf_validate']->ords_to_unistr(array($i))])? 'exist': '';


я уже тебе говорил, когда говнопхпешники косят под красноглазосипипишников – это к добру не приводит.
код – это байты, где маркетинг, где любовь к людям?
Какой к чёрту маркетинг? Ты читать умеешь – последную строчку НЕ ИСПОЛЬЗЫВАТЬ! А если Вы, сударь, сейл, то это не означает, что код в 2 простые строчки сложный.. И если ты, по своей тугодумности, не осилил короткую запись оператора условия, то пора с сейлом завязывать )))
Нет, не пора – каждому своё.
я ні хрена в цьму не поняв
отож, а ше хош программувати… Їди на курси до говновкусняшки – він тебе продавати Тайд навчить )
о
да-да, вот уже народ подтягивается, который тоже не догнал. Нет просто в этих строках любви к Людям, не для Людей они, не правильно это.
ибо чаловек этот ниграма не шарит в программировании. Ты для него – ГУРУ в программировании ). Кирпичик колько мну задалбывает, чтобы я иво научил программить.. Он всех задалбывает
от йопт, никакой адекватной оппозиции создать не получается
to №7
сударь, судя по нику у вас развилась самокритика! поздравляю!
2 8:
говнокоммент, важна не форма – а суть.
всё теперь стало на свои места – суть у тебя в говновкуснешеке.
чувак вот такие конструкции
(isset($ex[$tmp[‘letter’]]))?$tmp[‘class’] = ‘exist’: $tmp[‘class’] = ”;
удобнее писать в таком виде:
$tmp[‘class’] = isset($ex[$tmp[‘letter’]])) ? ‘exist’ : ”
Да, спсб что напомлин. Юзается иногда с маленькими конструкциями. Ибо у тебя, наверно, тоже был Сидоров и он точно говорил, что в блок схеме алгоритма должно быть нарисовано так:
а не наоборот. С этим можно спорить долго, но в сложных конструкциях лучше не исспользовать, так как сложно потом читать.
Хотя, если в выражении мало букв, то можно. Вот и только-что нашёл в коде:
$this->result['status'] = ($return_value)?’ok’:'bad’;
Тут прочитать не сложно.
В любом случае – спасибо, сейчас поправлю заметочку с твоим комментарием.