Я немного озадачен тем, когда включаю или не включаю break
после последнего случая, часто default
.
switch (type) {
case 'product':
// Do behavior
break;
default:
// Do default behavior
break; // Is it considered to be needed?
}
break
в моем понимании единственная цель - остановить выполнение кода через остальную часть регистра switch
.
Тогда считается ли более логичным иметь break
последнее из-за непротиворечивости или пропустить его из-за break
отсутствия функционального использования вообще? И то и другое логично по-моему.
Это можно в определенной степени сравнить с окончанием .php
файла ?>
. Я никогда не заканчиваю в ?>
основном из-за риска вывода пробелов, но можно утверждать, что было бы логично завершить файл.
источник
break
длиться последний случай :)break
(или другого заявлении потока управления , который выходит изcase
) является технически необходимо после последней альтернативы.switch
ошибками в существующих языках и хотели их предотвратить. Правила C # навязывают в значительной степени совпадение с рекомендациями из моего ответа.break
как NO-OP вместо генерацииjmp
следующей инструкции, правильно?Учитывая неоднозначность, которая существует вокруг использования
switch-case
в большинстве языков, при его использовании я бы предложил всегда использоватьbreak
выражение, за исключением случаев, когда оно явно и по замыслу нежелательно .Отчасти это происходит потому, что каждый
case
вызов выглядит одинаково, что, на мой взгляд, улучшает читабельность. Но это также означает, что если кто-то (даже вы) решит вставитьcase
после последнего на более позднем этапе, ему не нужно заботиться о проверке предыдущего блока, что может помочь уменьшить количество ошибок при добавлении нового кода.источник
case foo: case bar: ...
), я помещаю явный комментарий в то, что я хочу, чтобы это произошло. Делает это намного яснее.// no break
вместоbreak;
[[fallthrough]]
атрибут в случае C ++.Там нет
break
необходимости после последнего случая. Я использую слово « последний » (не по умолчанию ), потому что это не обязательно. Случай по умолчанию - последний случай.И мы знаем, что
break
необходимо между двумя последовательнымиcase
с. Иногда я используюif(a!=0)
в своем коде для большей читабельности, когда другие ссылаются на мой код. Я могу выбрать для использованияif(a)
, это было бы вопросом моего выбораисточник
case
в конце вашего,switch
не проверив, что онbreak
действительно существует (это будет ошибка этого программиста, но все же лучше быть в безопасности - если по какой-либо причине, потому что вы могли бы быть этим программистом через 6,
в конце массивов в случае вставки нового значения. Однако это нарушает некоторые коды и в целом выглядит ужасно :),
. Incase,default
был разработан, чтобы быть последним случаем. Может быть, язык посчитаетbreak
после этого ошибку. Допущениеbreak
было разрешено в качестве разграничения ТОЛЬКО между двумя случаями.