Приглашаем посетить
Сумароков (sumarokov.lit-info.ru)

Section 2.19.  Assignments

Previous
Table of Contents
Next

2.19. Assignments

Break long assignments before the assignment operator.

Often, the long statement that needs to be broken will be an assignment. The preceding rule does work in such cases, but leads to code that's unaesthetic and hard to read:

    $predicted_val = $average
                     + $predicted_change * $fudge_factor
                     ;

A better approach when breaking assignment statements is to break before the assignment operator itself, leaving only the variable being assigned to on the first line. Then indent one level, and place the assignment operator at the start of the next lineonce again indicating a continued statement:


    $predicted_val
        = $average + $predicted_change * $fudge_factor;

Note that this approach often allows the entire righthand side of an assignment to be laid out on a single line, as in the preceding example. However, if the righthand expression is still too long, break it again at a low-precedence operator, as suggested in the previous guideline:


    $predicted_val
        = ($minimum + $maximum) / 2
          + $predicted_change * max($fudge_factor, $local_epsilon);

A commonly used alternative layout for broken assignments is to break after the assignment operator, like so:

    $predicted_val =
        $average + $predicted_change * $fudge_factor;

This approach suffers from the same difficulty described earlier: it's impossible to detect the line continuation without scanning all the way to the right of the code, and the "unmarked" indentation of the second line can mislead the casual reader. This problem of readability is most noticeable when the variable being assigned to is itself quite long:

    $predicted_val{$current_data_set}[$next_iteration] =
        $average + $predicted_change * $fudge_factor;

which, of course, is precisely when such an assignment would most likely need to be broken. Breaking before the assignment operator makes long assignments much easier to identify, by keeping the assignment operator visually close to the start of the variable being assigned to:


    $predicted_val{$current_data_set}[$next_iteration]
        = $average + $predicted_change * $fudge_factor;

    Previous
    Table of Contents
    Next