Apparentemente, la tua domanda non riguarda il fatto che il corto circuito sia buono o cattivo in generale, ma sul perché VB.NET fornisce agli operatori con e senza. Con questo in mente, la risposta a
quando la valutazione del corto circuito è errata?
è semplicemente: quando viola la retrocompatibilità .
Ok, ora puoi dire che VB.NET non è molto retrocompatibile con il vecchio VB6 o VBA, comunque almeno alcune parti del linguaggio lo sono. La decisione di Microsoft di mantenere la vecchia semantica AND e OR (senza cortocircuiti) ha reso meno probabile che si verifichi un'enorme categoria di errori durante il porting di vecchi programmi VB su VB.NET.
D'altra parte, i progettisti del linguaggio VB.NET probabilmente hanno condiviso la tua opinione sul fatto che il corto circuito sia una buona cosa. Quando ricordo bene, le prime versioni di pre-release di VB.NET hanno fornito cortocircuito agli operatori AND o OR, ma il feedback degli sviluppatori deve essere stato così male che MS ha ritirato questa decisione prima che apparisse VB.NET 1.0. Quindi i progettisti hanno deciso di implementarlo in termini di nuove parole chiave ANDALSO
e ORELSE
come un compromesso tra compatibilità all'indietro e utilità.
IMHO questa è stata una buona decisione. Ho dovuto eseguire il porting di diversi programmi precedenti nell'ultimo decennio, e non dover fare un'analisi di impatto pesante per ogni espressione logica incluso AND e / o OR (giochi di parole) 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 predefinita per gli operatori sono le forme di cortocircuito, questo è quello a cui sono abituato da C, C ++, C # ecc. E mi permette per scrivere diversi modi di dire 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 sui Martian Headsets , che spiega perché le decisioni di progettazione anticipata nello sviluppo del software non possono essere facilmente revocate dopo che il componente o il linguaggio o l'API in questione hanno raggiunto una base di utenti di una certa dimensione .