Domanda

Ho trovato il seguente codice nel progetto del mio team:

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message)
    isRemoteDisconnectMessage = False
    Select Case (m.Msg)
        Case WM_WTSSESSION_CHANGE
            Select Case (m.WParam.ToInt32)
                Case WTS_REMOTE_DISCONNECT
                    isRemoteDisconnectMessage = True
            End Select
    End Select
End Function

Non importa che la funzione non abbia un tipo di ritorno (posso facilmente aggiungere 'As Boolean'); quello che mi chiedo è, potrebbe esserci qualche motivo per preferire quanto sopra al seguente codice (per me, molto più leggibile)?

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) As Boolean
    Return m.Msg = WM_WTSSESSION_CHANGE AndAlso _
           m.WParam.ToInt32() = WTS_REMOTE_DISCONNECT
End Function

Per porre la domanda in termini generali: ha senso usare un blocco (o, in questo caso, Seleziona caso ) - e / o nidificato blocchi - per testare una singola condizione? È forse più veloce di un semplice se ?

È stato utile?

Soluzione

Se sei preoccupato per le prestazioni ... profilo. Altrimenti non puoi sbagliare a sbagliare sul lato della leggibilità ...

Altri suggerimenti

Non credo sia importante in termini di velocità, il compilatore dovrebbe essere in grado di ottimizzarlo.

Penso che sarebbe solo una questione di preferenza.

La mia regola pratica è quella di utilizzare un'istruzione switch quando il numero di condizioni if ??/ else è maggiore di tre. Non ho dati dietro perché questo abbia un senso diverso dalla leggibilità / manutenibilità sembra diminuire all'aumentare del numero di condizioni if ??/ else.

Penso che la risposta nel caso specifico che hai fornito sia no - non ha senso, come suggerito in altre risposte si spera che i compilatori possano ottimizzare eventuali differenze pratiche.

Metterei soldi su questo essere un po 'di taglia, incolla ed elimina la codifica - prendendo un set generalizzato di dichiarazioni di casi nidificati ed estraendo quel bit che ti dà il risultato sì / no di cui hai bisogno.

Se questo fosse qualcosa di simile in linea e / o ci fosse una chiamata di funzione in cui è impostato il flag di ritorno, si potrebbe, eventualmente, essere in un punto in cui si potrebbe iniziare a giustificarlo ma non così com'è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top