Как удалить несколько возвратов из этой функции - PullRequest
0 голосов
/ 14 мая 2019

Я написал функцию, которая вычисляет пересечение двух отсортированных связанных списков (рекурсивным способом), но мне нужно удалить эти «возврат» внутри оператора if и перечитать код без них.Какие-либо предложения?Заранее спасибо

t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{ 
    t_nodo *tmp;
    if (insieme_A == NULL || insieme_B == NULL) {
        tmp = NULL; 
    }
    else if (insieme_A->info < insieme_B->info) {
            return intersezione_insieme(insieme_A->succ, insieme_B);
    }
    else if (insieme_A->info > insieme_B->info) {
            return intersezione_insieme(insieme_A, insieme_B->succ);
    }
    else 
    {
        tmp = (t_nodo*)malloc(sizeof(t_nodo));
        tmp->info = insieme_A->info;
        tmp->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
    }
    return tmp; 
}

1 Ответ

1 голос
/ 14 мая 2019

Как было указано в комментариях, наличие нескольких возвратов в функции не обязательно является плохой формой. Все зависит от контекста. Например, функция long-ish может проверить несколько условий возврата сейчас перед выполнением кода функции.

Но я вижу увеличение читабельности, если в вашей функции есть один оператор return.

Вот мое скромное предложение:

t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{ 
    t_nodo *temporaneoNodo;
    if (insieme_A == NULL || insieme_B == NULL) {
        temporaneoNodo = NULL; 
    }
    else if (insieme_A->info < insieme_B->info) {
            temporaneoNodo = intersezione_insieme(insieme_A->succ, insieme_B);
    }
    else if (insieme_A->info > insieme_B->info) {
            temporaneoNodo = intersezione_insieme(insieme_A, insieme_B->succ);
    }
    else 
    {
        temporaneoNodo = (t_nodo*)malloc(sizeof(t_nodo));
        temporaneoNodo->info = insieme_A->info;
        temporaneoNodo->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
    }
    return temporaneoNodo; 
}
...