moevm / oclint_extensions

2 stars 1 forks source link

Критерий - большая вложенность циклов и условных операторов внутри одной функции #15

Open AndrewGavril opened 11 months ago

AndrewGavril commented 11 months ago

Рассмотрим код:

size_t preprocessing(char ***sentences, size_t *cnt_sentences){
    char *fst = NULL;  // Первое предложение
    char *scd = NULL;  // Второе предложение
    size_t len_fst;
    size_t len_scd;

    // Проход по первым предложениям
    for (size_t i = 0; i < (*cnt_sentences)-1; i++){
        len_fst = strlen((*sentences)[i]);
        fst = realloc(fst, sizeof(char)*(len_fst + 1));
        for (size_t k=0; k < (len_fst+1); k++){
            fst[k] = tolower((*sentences)[i][k]);
        }

        // Проход по каждому второму предложению
        for (size_t j = i+1; j < (*cnt_sentences); j++){
            len_scd = strlen((*sentences)[j]);
            if (len_fst == len_scd){
                scd = realloc(scd, sizeof(char)*(len_scd + 1));
                for (size_t k=0; k < (len_scd+1); k++){
                    scd[k] = tolower((*sentences)[j][k]);
                }

                // Удаление второго предложения при равенстве с первым
                if (strcmp(fst, scd) == 0){
                    for (size_t k = j+1; k < (*cnt_sentences); k++){
                        (*sentences)[k-1] = (*sentences)[k];
                    }
                    (*cnt_sentences)--;
                    (*sentences) = realloc((*sentences), (*cnt_sentences)*sizeof(char*));
                }
            }
        }
    }
}

Он трудночитаемый, так как нужно потратить много времени, чтобы разобраться за что отвечает каждый цикл. Такие случаи лучше логически разделять функциями.