Posso dirti quale I userei e per quali ragioni, comunque penso che ci saranno tante opinioni quanti membri della comunità qui ...
1) Né. Vorrei scrivere:
long int multiplyNumbers(int n)
{
if (n < 1) {
return 1;
}
return n*multiplyNumbers(n-1);
}
Questo perché mi piace l'idea di "uscita anticipata" nei casi speciali, e questo mi ricorda quello scenario. La regola generale è: se devi gestire un caso speciale o un caso generale, gestisci prima il caso speciale. Presumibilmente, il caso speciale (ad esempio, errore o condizione limite) verrà gestito rapidamente e il resto del codice non è ancora troppo lontano dalla condizione "se", in modo che non sia possibile ignorare alcune righe di codice per esaminarlo. Rende anche più facile la lettura della gestione del caso generale, perché è sufficiente scorrere verso il basso il corpo della funzione.
In altre parole, invece di:
void foo(int bar)
{
if (!special_case_1) {
if (!special_case_2) {
return handle_general_case();
}
else {
return handle_special_case_2();
}
}
else {
return handle_special_case_1();
}
}
Sto sostenendo di scrivere questo:
int foo(int bar)
{
if (special_case_1) {
return handle_special_case_1();
}
if (special_case_2) {
return handle_special_case_2();
}
return handle_general_case();
}
Noterai che, se è fattibile, preferisco non introdurre qui una variabile aggiuntiva 'risultato', principalmente perché poi non ho bisogno di preoccuparmi se è inizializzato o meno. (Se lo si introduce, o lo si inizializza in alto, solo per essere sovrascritto in ogni ramo, o non lo si fa, e quindi si può dimenticare di inizializzarlo in qualche ramo. Inoltre, anche se lo si inizializza in ogni ramo, il tuo analizzatore di codice statico potrebbe non vedere questo e potrebbe lamentarsi senza motivo.)
2) Vorrei usare (b) (con la dichiarazione di 'risultato' gettata via). Questo perché in questo caso non posso dire che sia num1 < num2 o num1 > = num2 è un caso speciale. Sono uguali ai miei occhi e quindi (b) è preferito su (c). (Ho già spiegato perché, in questo caso, non introdurrei una variabile aggiuntiva, quindi (a) è ai miei occhi inferiore a (b).)