Come eviti errori di looping? Errori che non vengono rilevati dai sistemi [chiuso]

1

Ho avuto questa pazzesca inizializzazione -

documentList = new ArrayList<Map<String,Integer>>();

che intendevo memorizzare ogni volta una nuova mappa in un ciclo, ma sfortunatamente si è inserita nel ciclo. E tu conosci lo scempio.

Come riconosci tali errori? Potrei cercare suggerimenti sulle "tecniche di debug consigliate", ma sono anche alla ricerca di ulteriori consigli di esperti

    
posta Shashank Sabniveesu 19.11.2013 - 08:11
fonte

3 risposte

8

Questi errori sono rilevabili dal sistema e semplici da evitare: abbracciano l'immutabilità.

Almeno dichiara il tuo documentList come final . Questo fa immediatamente in modo che il compilatore ti informi su questo particolare errore. Sfortunatamente, Java non ha tutte le cose buone dalla programmazione funzionale, come le vere liste immutabili e le funzioni di ordine superiore (ancora), ma almeno final significa che non puoi sostituire la tua lista iniziale con una completamente nuova. Puoi ancora commettere errori come chiamare documentList.clear() , ma è molto più improbabile che accada per caso.

Quindi, come al solito, cerco di non passare nemmeno per la strada di dover rilevare tali errori, ma cerco di scrivere codice in uno stile che garantisca immediatamente che un tale errore non possa accadere affatto . Per buone ragioni, la mutabilità è scritta come t-r-o-u-b-l-e, quindi non percorrere mai quella strada a meno che non sia necessario. Più parti del tuo codice possono essere dichiarate final , meglio è.

    
risposta data 19.11.2013 - 08:22
fonte
2

Il modo migliore per catturare tali bug è impedire loro di crescere la testa durante il runtime. Puoi ottenerlo in diversi modi (che non si escludono a vicenda):

  1. Scrivi il tuo codice in uno stile che permetta al compilatore di rilevare gli errori. Alcuni esempi sono di fare un uso liberale dell'immutabilità ( const / final , come descritto anche nella risposta di @Frank ), o per scrivere test di uguaglianza come questo: 42 == x in un contesto in cui anche l'assegnazione sarebbe legale.

  2. Avere un secondo paio di occhi sul codice (come in, eseguire una revisione del codice).

risposta data 19.11.2013 - 08:46
fonte
-3

In generale dovresti scrivere dei test unitari per prevenire errori. Con lo sviluppo basato su test, costruisci i componenti in piccoli incrementi e rafforza costantemente il tuo cablaggio di test. Di conseguenza hai un componente più o meno privo di bug che non è necessario eseguire il debug in seguito.

    
risposta data 19.11.2013 - 08:54
fonte

Leggi altre domande sui tag