@AVAtarMod

Насколько мой код читабелен?

Пожалуйста, оцените, насколько мой код читабелен. Потому как учусь в ВУЗе, преподаватели обычно интересуются тем, как бы побольше лаб защитить, одногруппники не дали подробной оценки.
В телеграмм чате программистов спрашивал, понял, что там мало тех, кто разбирается в C++, и складывается ощущение, что сижу в вакууме =).
Поэтому решил спросить здесь, и если у вас найдется время, можете еще оценить, насколько мой код в целом плох/хорош?

Прошу оценить следующие элементы:
1. Сборник библиотек
2. Прикладное использование библиотек.

Если желаете, можете прямо в репозитории оставлять комментарии.
  • Вопрос задан
  • 313 просмотров
Решения вопроса 3
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Это все конечно очень хорошо, но в репе лежат симлинки вместо файлов. Так что пока оценка -10/10 - достигнут предельный радиус кривизны рук.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
С ходу же:
try
{
    if (from > to)
        throw "Incorrect couple 'from - to' for generating random numbers";
}
catch (const char *message)
{
    std::cerr << message << '\n';
    exit(1);
}
Зачем нужен такой изврат, если вы ловите исключение сразу же? Чем хуже
if (from > to)
{
    std::cerr << message << '\n';
    exit(1);
}


bool init(IntList1D &list, int number)
{
    if (list == nullptr || *list == nullptr)
    {
        if (list == nullptr)
            list = new IntList1D_element *;
        *list = new IntList1D_element(number);
        return true;
    }
    return false;
}
Чем меньше глубина вложенности, тем лучше. Ранний выход из функции лучше, чем выход в самом конце. Сравните
bool init(IntList1D &list, int number)
{
    if (is_initialized(list))
    {
        return false;  
    }
    if (list == nullptr)
    {
        list = new IntList1D_element *;
    }
    *list = new IntList1D_element(number);
    return true;
}


bool is_inited(const IntList1D list)
{
    if (list == nullptr || *list == nullptr)
        return false;
    else
        return true;
}
Здесь и название функции кривоватое и чересчур усложнена сама функция.
bool is_initialized(const IntList1D list)
{
    return (list != nullptr && *list != nullptr)
}

Не соблюдаете единый стайлгайд. В некоторых местах одиночные строки после if взяты в фигурные скобки, в некоторых нет. Выберите один какой-либо стиль и придерживайтесь его. (Hint: добавлять строки гораздо проще, если всегда используются фигурные скобки).
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Еще комментарии. Это же С++, а не С?

Вместо набора функций, которые возвращают и принимают IntList1D, стоит завести класс, который содержит в себе указатель на начало списка. У этого класса должны быть методы initalize, is_initialized, pushBack, и т.д. Это сократит код немного и сделает его гораздо более логичным.

Тип элемента списка вы объявляете как приватный класс-член в классе списка, и он не будет засорять пространство имен пользователей вашей библиотеки. Им о нем вообще знать не надо, они хотят в ваш список класть int и получать назад int.

Далее, вы пишите контейнер, в идеале его стоит сделать по образу и подобию стандартных контейнеров. С итераторами и т.д. Чтобы с ними было можно работать точно также. Но, если не потянете, то хоть обзовите методы также, как у стандартных (push_back(), empty(), см std::vector, например).

Стек и очередь могут или наследоваться от списка, или (так наверное понятнее будет) держать внутри себя экземпляр списка.

Потом, часть функций называется частично большими буквами, частично строчными. Это вообще зачем? APPEND_FRONT_Link? Соблюдайте единый стиль хотябы в одном названии. Если они отличаются от appendFront тем, что они не предназначены для пользователей библиотек, ну так это как раз аргумент в пользу использования классов. Делаете эту функцию приватным методом. И такие обычно называются с суффиксом Impl (от implementation) - appendFrontImpl.

И вообще чисто большими буквами обычно обзывают макросы, ну или константы на худой конец. Возьмите за основу какой-то стандартный стиль и предерживайтесь его.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час