A quanto pare, la tua domanda non riguarda il cortocircuito in generale, ma il motivo per cui VB.NET fornisce agli operatori con e senza di esso. Con questo in mente, la risposta a
when is short-circuit evaluation bad?
è semplicemente: quando viola la retrocompatibilità .
Ok, ora puoi dire che VB.NET non è molto compatibile con i vecchi VB6 o VBA, tuttavia almeno alcune parti della lingua lo sono. La decisione di Microsoft di mantenere la vecchia semantica AND e OR (senza cortocircuiti) ha creato un'enorme categoria di errori con meno probabilità di verificarsi quando si eseguono il porting di vecchi programmi VB su VB.NET.
D'altra parte, i progettisti di linguaggio VB.NET hanno probabilmente condiviso la tua opinione sul fatto che il cortocircuito sia una buona cosa. Quando ricordo bene, le prime versioni di pre-release di VB.NET fornivano agli operatori AND o OR un cortocircuito, ma il feedback degli sviluppatori doveva essere stato così male che MS ritirò questa decisione prima che apparisse VB.NET 1.0. Pertanto, i progettisti hanno deciso di implementarlo in termini di nuove parole chiave ANDALSO
e ORELSE
come compromesso tra retrocompatibilità e utilità.
IMHO questa è stata una buona decisione. Negli ultimi dieci anni ho dovuto eseguire il porting di diversi programmi precedenti e non dover effettuare un'analisi di impatto pesante per ogni espressione logica tra cui AND e / o OR (pun intended) ha reso questo compito molto più semplice ed economico. D'altra parte, ogni volta che devo scrivere una nuova espressione logica in VB.NET, la mia scelta di default per gli operatori sono le forme di cortocircuito, cioè quello a cui sono abituato da C, C ++, C # etc e che consente Io scrivo diversi idiomi in forma più concisa (anche se ANDALSO ha bisogno di 4 caratteri in più per scrivere).
Se non sei convinto, ti consiglio di leggere il fantastico articolo di Joel Spolsky su cuffie marziane , sul perché le prime decisioni di progettazione nello sviluppo del software non possono essere facilmente revocate dopo che il componente o la lingua o l'API in gioco hanno raggiunto una base di utenti di una certa dimensione.