Code style: single var statement 22.01.2016


Single var statement — правило, согласно которому в теле функции или метода не может быть более одного выражения определения переменных, размещённого в его начале.

Существуют мнения, что single var statement — зло, и переменные нужно определять и инициализировать как можно ближе к тому месту, где они будут использоваться. Как утверждают, плюсом такого подхода является отсутствие при сопровождении кода необходимости следить за тем, как и где используется переменная. Очевидно, что в этом есть доля правды, однако смысл такой подход имеет только для многострочных листингов кода. Многострочные методы и функции сами по себе практика плохая. Single var statement в свою очередь способствует структуризации тела метода и предотвращает необоснованное увеличение объема его кода.

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

Если поместить весь список переменных в начало тела функции или метода, сразу становится понятным с какой размерностью придется иметь дело. Большое количество переменных — повод задуматься о рефакторинге метода и разделении его на несколько более простых.

Часто получается так, что некоторые переменные созданы только для хранения каких то промежуточных значений, используемых для инициализации значений других переменных, и от них можно легко избавиться. В случае, если инициализация переменной в начале тела функции не представляется возможным, а назначение неясно до момента ее использования, стоит задуматься о том, не следует ли вынести код, использующий переменную, в отдельный метод или функцию.

Некоторые style-гайды доводят практику использования single var statement до абсурда, требуя помещать в начало тела функции не только обычные переменные, но, например, и декларацию счетчиков циклов. С введением в EcmaScript и TypeScript переменных let с блочной областью видимости решило это проблему.

При правильном использовании single var statement оказывает положительное влияние на структуру и лаконичность кода, однако создание переменных по любому поводу и простой перенос их декларации в начало тела функции, очевидно, бессмысленны.

by 22.01.2016