SonarQube si lamenta: "Usa isEmpty () per verificare se la raccolta è vuota o meno."

1

Così come dice il titolo, SonarQube si lamenta ogni volta che usi

list.size() == 0

o

list.size > 0

Tuttavia ho iniziato a passare a isEmpty () e! is.Empty () e ho notato che il codice diventa molto meno leggibile e ha dovuto cambiarlo, quindi non penso sia meglio usare il metodo isEmpty () come leggere la condizione con molta attenzione invece di vedere cosa fa la clausola if ...

Quindi sono assolutamente in disaccordo con SonarQube e il mio argomento decisivo è che l'uso di isEmpty rende il codice molto meno leggibile. Ragazzi, vedete i reali vantaggi dell'utilizzo di isEmpty invece di controllare la dimensione quando si utilizza questo con le raccolte Java che supererebbe la maggiore leggibilità quando non lo si utilizza?

    
posta Arturas M 02.10.2016 - 17:35
fonte

2 risposte

7

È necessario verificare la giustificazione che SonarQube fornisce sul motivo per cui formula il suggerimento. Scommetto che il motivo principale è per le prestazioni , non per la leggibilità.

Se non ti piace la leggibilità di !collection.isEmpty() , puoi sempre utilizzare collection.isEmpty() == false .

    
risposta data 02.10.2016 - 17:42
fonte
4

list.size() == 0 è oggettivamente meno leggibile, perché stai aggiungendo peso al lettore. Se c'è un problema in quest'area di codice e un futuro manutentore lo sta leggendo, sarà costretto a chiedere:

  • La dimensione è nota all'inizio dell'algoritmo?
  • È size() O(1) o O(n) per questa struttura dati?
  • Se è O(n) , recentemente n è diventato eccessivamente grande per questa struttura dati?
  • Se tutti questi potenziali problemi risultassero non essere problemi, l'autore originale li ha effettivamente considerati attentamente e li ha trovati non problematici, oppure è diventato fortunato solo scegliendo di usare size() == 0 ?

La leggibilità non riguarda solo ciò che ritieni più bello perché ti sei più abituato, ma quanto è difficile che tu lo possa leggere e mantenere il tuo codice in un secondo momento. Quando vedo isEmpty() , so che posso tranquillamente saltare un numero di potenziali problemi.

    
risposta data 02.10.2016 - 19:09
fonte

Leggi altre domande sui tag