Aparentemente, sua pergunta não é sobre o curto-circuito ser bom ou ruim em geral, mas sobre por que o VB.NET fornece aos operadores com e sem isso. Com isso em mente, a resposta para
quando é ruim a avaliação de curto-circuito?
é simplesmente: quando viola a compatibilidade com versões anteriores .
Ok, agora você pode dizer que o VB.NET não é muito compatível com o VB6 ou VBA antigo, no entanto, pelo menos algumas partes do idioma são. A decisão da Microsoft de manter a antiga semântica AND e OR (sem curto-circuito) reduziu a probabilidade de ocorrer uma categoria enorme de erros ao transportar programas VB antigos para o VB.NET.
Por outro lado, os designers de linguagem do VB.NET provavelmente compartilharam sua opinião sobre o curto-circuito ser uma coisa boa. Quando me lembro corretamente, as primeiras versões de pré-lançamento do VB.NET forneceram aos operadores AND ou OR um curto-circuito, mas o feedback do desenvolvedor deve ter sido tão ruim que a Microsoft retirou essa decisão antes que o VB.NET 1.0 aparecesse. Assim, os designers decidiram implementá-lo em termos de novas palavras ANDALSO
- chave e ORELSE
como uma troca entre compatibilidade e utilidade anteriores.
IMHO esta foi uma boa decisão. Eu tive que portar vários programas mais antigos na última década, e não ter que fazer uma análise de impacto pesado para todas as expressões lógicas, incluindo AND e / ou OR (trocadilhos), tornaram essa tarefa muito mais fácil e econômica. Por outro lado, sempre que tenho que escrever uma nova expressão lógica no VB.NET, minha opção padrão para os operadores são as formas de curto-circuito, é com isso que estou acostumado a partir de C, C ++, C # etc., e isso permite para escrever vários idiomas de forma mais concisa (mesmo que o ANDALSO precise de mais 4 caracteres para digitar).
Se você não está convencido, recomendo ler o excelente artigo de Joel Spolsky sobre os fones de ouvido marcianos , que explica por que as decisões iniciais de design no desenvolvimento de software não podem ser facilmente revogadas depois que o componente, idioma ou API em jogo alcançou uma base de usuários de um determinado tamanho .