Stavo girando attorno alla blogosfera di programmazione quando mi sono imbattuto in questo post su GOTO:
Qui lo scrittore parla di come "si deve arrivare alla conclusione che ci sono situazioni in cui GOTOs realizza un codice più leggibile e più gestibile" e poi prosegue mostrando un esempio simile a questo:
if (Check#1)
{
CodeBlock#1
if (Check#2)
{
CodeBlock#2
if (Check#3)
{
CodeBlock#3
if (Check#4)
{
CodeBlock#4
if (Check#5)
{
CodeBlock#5
if (Check#6)
{
CodeBlock#6
if (Check#7)
{
CodeBlock#7
}
else
{
rest - of - the - program
}
}
}
}
}
}
}
Lo scrittore quindi propone che l'utilizzo di GOTO renderebbe questo codice molto più facile da leggere e conservare.
Personalmente, posso pensare ad almeno 3 modi diversi per appiattirlo e rendere questo codice più leggibile senza ricorrere a GOTO sfondati. Ecco i miei due preferiti.
1 - Funzioni piccole annidate. Prendi ciascuno se e il suo blocco di codice e trasformalo in una funzione. Se il controllo booleano fallisce, basta tornare. Se passa, quindi chiama la funzione successiva nella catena. (Ragazzo, suona molto come una ricorsione, potresti farlo in un singolo ciclo con i puntatori di funzione?)
2 - Sentinal Variable. Per me questo è il più facile. Basta usare una variabile blnContinueProcessing e controllare se è ancora vera nel controllo if. Quindi se il controllo fallisce, imposta la variabile su false.
In quanti modi diversi è possibile refactoring questo tipo di problema di codifica per ridurre il nesting e aumentare la manutenibilità?