Applica il filtro solo se non è nullo

1

La mia funzione accetta un parametro facoltativo, type , che viene utilizzato per filtrare attraverso una raccolta. Tuttavia, il filtro dovrebbe essere applicato solo se il parametro è passato (in altre parole, non null). Se il filtro non viene passato, non dovrebbe essere applicato. Come posso scrivere la mia logica per riflettere questo? Quello che ho ora è -

if( other conditions && ( Type == null || (Type != null && Order.Type == Type ) ) )
    return val += Order;

Ma questo sembra goffo e sbagliato. C'è un modo per semplificare la mia logica qui?

    
posta David Grinberg 17.06.2014 - 21:22
fonte

2 risposte

4

L'OP ha dichiarato in un commento che la lingua utilizzata ha degli operatori booleani in cortocircuito, quindi potrebbe essere scritto come:

if( other conditions && ( Type == null || Order.Type == Type ) )
    return val += Order;
    
risposta data 17.06.2014 - 21:33
fonte
0

Spesso è più pulito evitare del tutto null creando due funzioni: una con il filtro e l'altra senza. Il primo può chiamare quest'ultimo, come:

if (Order.Type == Type)
  return nonFilterFunction(...)

Questo stile segue il Principio di Responsabilità Singola avendo una funzione che fa solo filtro e una funzione che fa le altre cose. Permette al compilatore e alle asserzioni di runtime di aiutarti a verificare che i programmatori stiano usando il tuo codice correttamente. È anche più facile ragionare perché in una funzione non devi preoccuparti di Type , e nell'altra, puoi assumere o asserire che Type non è mai null e non devi preoccuparti di in seguito.

Lo svantaggio principale è una funzione extra nella tua API. Inoltre, questo stile è difficile se hai molti parametri opzionali, perché non puoi creare una nuova funzione per ogni combinazione, ma di solito esistono altri modi per gestire questa situazione.

    
risposta data 17.06.2014 - 22:40
fonte

Leggi altre domande sui tag