SobolevaSys
@SobolevaSys
Начинающая

Стоит ли создавать дополнительные переменные для лучшей читаемости кода?

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

Простой пример:

// $prices - двумерный массив с ценами
// $type - тип параметра
foreach($prices as $price) {
    $amount = $price[$type];
    $total += $amount;
}


Более короткий вариант:

// $prices - двумерный массив с ценами
// $type - тип параметра
foreach($prices as $price) {
    $total += $price[$type];
}


Какой стиль предпочтительнее?
  • Вопрос задан
  • 489 просмотров
Решения вопроса 1
Зависит от ситуации. В вашем примере - второй. Но, в случае с кодом ниже - первый.
foreach($houses as $house) {
    $current_floor = $house[$floor];
    $rooms_count = count($current_floor['flats']['1-room']); // например, только 1-комнатные

    $total_rooms += $rooms_count;

    /* вышенаписанное гораздо лучше, чем
    $total_rooms += count($house[$current_floor]['flats']['1-room']);
    */
}

В целом, когда чувствуете, что код становится нечитабельным, некрасивым и просто неудобным для сопровождения, предпринимайте адекватные действия для исправления ситуации, в том числе и создавая промежуточные переменные, чтобы визуально разделить код.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
miraage
@miraage
Старый прогер
Я смотрю на следующие критерии, чтобы вынести в переменную:
1) collection[key] используется более одного раза
2) key слишком тяжелый (complicated) - тогда выношу ключ (сохраняя логику пункта 1)
Ответ написан
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Здесь не бывает универсальных правил. Посмотрите на код свежим взглядом и подумайте, будут ли очевидны шаги алгоритма при белглом промотре?
Еще можно опираться на близость алгоритма к естественному языку: "для каждого ценника к общему прибавить ценник определенного типа". То есть дополнительная переменная здесь скорее добавляет многословности - лишнюю сущность, который нужно держать в голове.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
2-й.
он не только более короткий, но и намного менее ресурсозатратный.
Ну, и... "ломик в рукаве": php.net/manual/ru/function.array-sum.php
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
А проще так:
$total = array_column($prices, $type);
$total = array_sum($total);
Ответ написан
prototype_denis
@prototype_denis
Symfony
Самая обычная проблема...
Я выбрал бы третий способ и назвал $type по человечески, не создавая лишней переменной и явно давая понять, что "type" - это не какая-то абстрактная субстанция, а конкретная вещь, в данном случае тип суммы.

<?php

foreach($prices as $price) {
    $total += $price[$amountType];
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы