По-видимому, ваш вопрос не в том, является ли короткое замыкание хорошим или плохим в целом, а в том, почему VB.NET предоставляет операторам и без него. Имея это в виду, ответ на
когда плохая оценка короткого замыкания?
это просто: когда это нарушает обратную совместимость .
Хорошо, теперь вы можете сказать, что VB.NET не очень обратно совместим со старым VB6 или VBA, однако, по крайней мере, некоторые части языка таковы. Решение Microsoft о сохранении старой семантики «И» и «ИЛИ» (без короткого замыкания) сделало огромную категорию ошибок менее вероятной при переносе старых программ VB в VB.NET.
С другой стороны, дизайнеры языка VB.NET, вероятно, поделились своим мнением о том, что короткое замыкание - это хорошо. Когда я правильно помню, первые предварительные версии VB.NET предоставляли операторам И или ИЛИ короткое замыкание, но отзывы разработчиков, должно быть, были настолько плохими, что MS отозвала это решение до появления VB.NET 1.0. Поэтому дизайнеры решили реализовать его с точки зрения новых ключевых слов ANDALSO
и ORELSE
как компромисс между обратной совместимостью и полезностью.
ИМХО это было хорошее решение. Мне пришлось портировать несколько старых программ за последнее десятилетие, и не нужно было проводить тяжелый анализ воздействия для каждого логического выражения, включая AND и / или OR (каламбур), что значительно облегчило эту задачу и стало более экономичным. С другой стороны, всякий раз, когда мне нужно написать новое логическое выражение в VB.NET, мой выбор по умолчанию для операторов - это формы короткого замыкания, к которым я привык из C, C ++, C # и т. Д., И это позволяет мне написать несколько идиом в более сжатой форме (даже если ANDALSO нужно еще 4 символа для ввода).
Если вы не уверены, я рекомендую прочитать замечательную статью Джоэла Спольски о марсианских гарнитурах , из-за которой ранние проектные решения в разработке программного обеспечения не могут быть легко отменены после того, как рассматриваемый компонент, язык или API достигли базы пользователей определенного размера. ,