Ho avuto un'interessante discussione con il mio capo oggi sull'uscita da un loop prima che venga soddisfatta la condizione del terminale. Aveva un costrutto in alcuni dei suoi codici VB6 che assomigliava a questo:
Dim Termination As Int
Termination = 10
For Iterator1 = 1 To Termination
If Iterator1 = 5 Then
Iterator1 = Termination
End If
Next
Ho messo in dubbio questa implementazione, sostenendo che un Exit For
era il modo corretto di uscire da un ciclo prematuramente in base a una condizione, come questa:
For Iterator2 = 1 To 10
If Iterator2 = 5 Then
Exit For
End If
Next
Ho notato che nella pratica questi probabilmente valutano entrambi lo stesso linguaggio macchina JMP opcode. Il mio capo ha affermato che la sua implementazione potrebbe essere più efficiente poiché avrebbe solo un JMP, quello alla fine del ciclo, anziché due, uno alla fine e uno al centro per l'istruzione Exit For
.
Preferisco la seconda implementazione per la leggibilità e la semantica. Inoltre, nelle ultime versioni di Visual Studio per .Net se aggiungi linee dopo l'istruzione Exit For
sarai avvisato che nel tuo codice ci sono linee irraggiungibili. Tuttavia, non riceverai questo avviso in VB6, che è il punto in cui è iniziato il dibattito.
Quindi qual è la migliore pratica qui? Il primo esempio è migliore in VB6 o è il secondo esempio migliore in tutte le situazioni? Quali sono i vantaggi / svantaggi di ciascun approccio.
Modifica : numero magico rimosso dall'esempio di codice per migliorare la chiarezza delle domande.