Хорошая статья; много хороших идей для удобочитаемости. У меня есть несколько возражений против этой конкретной строки, мне любопытно узнать ваше мнение по этому поводу:
Если условия действительно взаимоисключающие (как в случае цепочки if...else
), то мне лично кажется более затруднительным читать код, который не делает это очевидным. Например.:
if (color === "red") { // do red stuff } if (color === "blue") { // do blue stuff }
Меня это немного дезориентирует: есть ли способ, которым цвет может быть одновременно красным и синим, чего я не понимаю? Возможно, в этом упрощенном примере это не имеет значения, но могут быть более тонкие условия, из-за которых мне трудно понять, должны ли они быть взаимоисключающими. Например.:
if (obj.shouldFrob()) { // Frob stuff. } if (obj.shouldGork()) { // Gork stuff. }
Может ли объект и фроб, и горк? Глядя на этот код, я не могу сказать, что это невозможно, поэтому мне нужно действовать так, как если бы это было возможно. Это добавило сложности моей ментальной модели, что затруднило понимание. Кроме того, если я редактирую этот код, мой код также должен быть более сложным, чтобы обрабатывать добавленный регистр.
Также стоит отметить, что простое удаление else
ключевых слов не приводит к созданию эквивалентного кода, поскольку else
обеспечивает взаимное исключение различных условий. Итак, цепочка if...else
со сравнительно простыми условиями:
if (condA) { // ... } else if (condB) { // ... } else if (condC) { // ... }
усложняется:
if (condA) { // ... } if (!condA && condB) { // ... } if (!condA && !condB && condC) { // ... }
Наконец, есть небольшое потенциальное снижение производительности за неиспользование цепочки if...else
, потому что интерпретатору необходимо оценить все условия; с цепочкой, как только он находит блок для выполнения, он может пропустить все оставшиеся условия в цепочке.