Alla fine imparerai a fare il refactoring. Il refactoring consiste nel cambiare un programma in modo che la sua struttura sia diversa, mentre fa esattamente la stessa cosa di prima. Due metodi di refactoring che vengono spesso utilizzati sono la divisione di una funzione in due funzioni e la combinazione di due funzioni in una sola.
L'arte è duplice: in primo luogo, essere in grado di lavorare sul codice focalizzato e refactoring senza introdurre bug. In secondo luogo, per identificare qual è il modo migliore - in questo caso, se il ciclo annidato in una funzione è migliore o i cicli distribuiti su due funzioni.
Affermando che dovresti sempre dividere i cicli annidati in funzioni separate, il tuo professore non ti sta facendo un favore. La divisione aumenta la complessità totale. È vantaggioso se ogni ciclo è così complesso che la nidificazione lo rende complesso troppo (a volte ogni ciclo è già troppo complesso. Combinandoli ti darebbe qualcosa che è molto troppo complesso). È negativo se il ciclo combinato è abbastanza semplice da essere lasciato in pace. Il tuo compito è decidere quale è.
I linguaggi moderni hanno funzionalità che possono effettivamente rimuovere il codice boilerplate e ridurre la complessità dei cicli annidati. Imparare a utilizzare queste funzionalità ti porterà molto più avanti rispetto alla complessità del tuo codice e alla sua suddivisione.
E dov'è il ciclo spaccato controproducente? Il fatto è che un computer moderno probabilmente gestirà qualsiasi cosa tu passi con facilità, tranne i cicli annidati. Scorrere fino a 10.000 articoli, prendendo 1 microsecondo per ciascuno - l'utente non si accorge nemmeno. Scorri fino a 10.000 volte 10.000 elementi e impiega 100 secondi. In molti casi deve trovare un modo migliore di un ciclo annidato (se non è possibile, chiedere su StackOverflow).
Con il ciclo annidato suddiviso su due funzioni, hai una funzione che chiama una funzione in un ciclo diretto - difficile vedere come migliorarla. E hai una funzione con un semplice ciclo - difficile vedere come migliorarlo. Qualsiasi miglioramento deve considerare la combinazione di entrambi e hai interrotto la connessione. Ciò rende più difficile vedere che è necessario migliorare l'efficienza del tuo codice e che può essere fatto.