Как улучшить написание условных выражений



Книга Как улучшить написание условных выражений

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


Меняем if/else на if



В этом коде функция исходя из заданного условия возвращает разные результаты. Оператор return останавливает выполнение функции и возвращает из нее значение. То есть код после оператора return выполнен не будет. Поэтому переписываем его в таком виде:



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


Выносим большую часть кода за пределы условной ветки



А здесь код выполняется только при соблюдении условия. Но в этом подходе есть одна проблема: трудно отслеживать выполнение функции, особенно если код, заключенный в if, намного длиннее. Более четким этот подход делает следующее:



До этого весь код помещался в условную ветку: там он будет выполняться, если мышь не выйдет за допустимые границы. Теперь же мы проверяем, является ли положение мыши недопустимым. Если оно недопустимо, выполнение функции останавливаем. В противном случае продолжаем его.


Когда условий слишком много, задействуем switch



Когда условий сразу несколько (как в этом примере), использование if/else—  не лучший вариант. Так как здесь проверяется значение одной и той же переменной, пример лучше переписать в более четкой форме с помощью switch:



Когда код в условии состоит из одной строчки, используем словарь


Когда нужно только выполнить функцию при соблюдении определенного условия (как в предыдущем коде), у нас есть возможность написать код еще лучше: вместо оператора switch задействуем словарь.



Благодаря словарю получаем самый четкий и лаконичный код. Здесь в объекте сохраняется ссылка на функцию, после чего с помощью значения key вызывается требуемая функция , но только если для этого ключа есть значение. dic['a'] вернет moveLeft, dic['w'] вернет moveTop и так далее. А если значения для key нет  —  будет возвращаться undefined. Поэтому нужно проверить, есть ли значение для ключа, прежде чем пытаться вызвать функцию. Проверяем с помощью dic[key] && dic[key]();. Это то же самое, что и:


if(dic[key]){
dic[key]();
}

Заключение


Даже самое простое можно улучшить, в том числе условные выражения. Главное  —  всегда искать новые и лучшие решения старых проблем, и иногда такие решения находятся.


614   0  

Comments

    Ничего не найдено.