Home > php, программирование > Бережём память в PHP

Бережём память в 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': '';

  1. говновкуснешек
    December 17th, 2007 at 14:21 | #1

    я уже тебе говорил, когда говнопхпешники косят под красноглазосипипишников – это к добру не приводит.
    код – это байты, где маркетинг, где любовь к людям?

  2. December 17th, 2007 at 14:39 | #2

    Какой к чёрту маркетинг? Ты читать умеешь – последную строчку НЕ ИСПОЛЬЗЫВАТЬ! А если Вы, сударь, сейл, то это не означает, что код в 2 простые строчки сложный.. И если ты, по своей тугодумности, не осилил короткую запись оператора условия, то пора с сейлом завязывать )))

    Нет, не пора – каждому своё.

  3. foxa.killa
    December 17th, 2007 at 14:54 | #3

    я ні хрена в цьму не поняв

  4. December 17th, 2007 at 15:06 | #4

    отож, а ше хош программувати… Їди на курси до говновкусняшки – він тебе продавати Тайд навчить )

  5. говновкуснешек
    December 17th, 2007 at 15:59 | #5

    о
    да-да, вот уже народ подтягивается, который тоже не догнал. Нет просто в этих строках любви к Людям, не для Людей они, не правильно это.

  6. December 17th, 2007 at 16:13 | #6

    ибо чаловек этот ниграма не шарит в программировании. Ты для него – ГУРУ в программировании ). Кирпичик колько мну задалбывает, чтобы я иво научил программить.. Он всех задалбывает ;)

  7. говновкуснешек
    December 17th, 2007 at 16:19 | #7

    от йопт, никакой адекватной оппозиции создать не получается ;)

  8. прохожий
    December 19th, 2007 at 15:44 | #8

    to №7
    сударь, судя по нику у вас развилась самокритика! поздравляю!

  9. говновкуснешек
    December 20th, 2007 at 14:29 | #9

    2 8:
    говнокоммент, важна не форма – а суть.

  10. December 20th, 2007 at 18:57 | #10

    всё теперь стало на свои места – суть у тебя в говновкуснешеке. ;)

  11. January 15th, 2008 at 21:07 | #11

    чувак вот такие конструкции
    (isset($ex[$tmp[‘letter’]]))?$tmp[‘class’] = ‘exist’: $tmp[‘class’] = ”;

    удобнее писать в таком виде:
    $tmp[‘class’] = isset($ex[$tmp[‘letter’]])) ? ‘exist’ : ”

  12. January 16th, 2008 at 12:54 | #12

    Да, спсб что напомлин. Юзается иногда с маленькими конструкциями. Ибо у тебя, наверно, тоже был Сидоров и он точно говорил, что в блок схеме алгоритма должно быть нарисовано так:

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

    Хотя, если в выражении мало букв, то можно. Вот и только-что нашёл в коде:

    $this->result['status'] = ($return_value)?’ok’:'bad’;

    Тут прочитать не сложно.

    В любом случае – спасибо, сейчас поправлю заметочку с твоим комментарием.

  1. No trackbacks yet.