Pull to refresh

Comments 28

После таких слов мне становится страшно. А после минусов хочется уйти назад в «read only».
Не нужно уходить в «read only», я имел ввиду, что статьи на Хабре должны нести пользу читающим. Я уверен, что все читающие статью айтишники с компьютерным образованием сами уже прошли подобные задачи в университете. То есть эта тема действительно интересна только начинающим Си-шникам

Но, если оформить эту статью как обучалку для студентов — было бы уже полезнее и минусов наставили бы гораздо меньше. Привести пример оптимизации конкретных частей кода, как было некрасиво и как стало лучше. Ну и выкинуть лишние фразы.

П.С. Сам за свою первую статью отхватил минусов кучу, т.к. не подумал что настолько простая тема не заинтересует Хабр.
Теперь я понял в чем ошибся. В следующий раз, при написании статьи, буду учитывать все дополнительные факторы.
Скажите, а зачем у вас в h-нике идет «using namespace std;», а потом все равно: std::string name;
И да, в h-нике не стоит писать using… он потом куда-нить включится и у вас будут траблы с пересечением неймспейсов (boost и std немного пересекаются… например)

Вы уверены, что слово «год» — «jear» пишется именно так?=)
Согласен. И на мой взгляд, раз уж ооп, то лучше функции переделать в классы
И еще все-таки в хедере лучше при объявлении функций указывать не только тип параметров но и их название, так проще будет ориентироваться.

Вы уверены, что слово «год» — «jear» пишется именно так?=)

Ну учил же человек немецкий а не английский, вот и смесь получилась
Ну классы они может быть еще не изучали, сказано же, что задание «написать с использованием структур», хотя по сути структура это класс…

И еще можно было бы использовать std::vector вместо массива на стеке для песен
std::vector мы очень поверхностно проходили. И поэтому работать толком с ним и не научились. А классов, кроме структур, у нас действительно еще не было.
ну да класс от структуры в с++ отличается ж только модификаторами доступа

На одной из лекций мы рассматривали ООП на примере С++ и получили задание написать псевдо-музыкальную библиотеку с использованием структур.

Просто преподаватели должны были рассказать про принципы ООП, а не просто создаем объекты от их описания. Я к тому, что класс должен включать логику поведения объекта
>> преподаватели должны были рассказать про принципы ООП

У наших слова «должны» в принципе не существует. Сказали что о классах мы узнаем на третьем курсе и сейчас их трогать не будем.
Не ждите год классов, а сами прочтите о классах. То что можно прочесть за день, будут рассказывать 2 месяца.
Вы уверены, что слово «год» — «jear» пишется именно так?=)
Я английский язык знаю на уровне приставки sega и некоторых программ. Поэтому не уверен)
а зачем у вас в h-нике идет «using namespace std;», а потом все равно: std::string name;
Компилятор выдавал ошибку при записи: string name;, пришлось записывать так: std::string name;

P.S. что-то у меня с цитатами не вышло=(
Ещё можно заменить кучу if на switch и:

    for(int i=0; i<pos; i++){
        if(str==muslib[i].name){
            cout<<"Position "<<muslib[i].num<<endl;
            cout<<"Name "<<muslib[i].name<<endl;
            cout<<"Artist "<<muslib[i].artist<<endl;
            cout<<"Time "<<muslib[i].time<<endl;
            cout<<"Jear "<<muslib[i].jear<<"\n"<<endl;
            notfound=notfound+1;
        }
    }

на

    for(int i=0; i<pos; i++){
        if(str!=muslib[i].name){
        	continue;
        }
        cout<<"Position "<<muslib[i].num<<endl;
        cout<<"Name "<<muslib[i].name<<endl;
        cout<<"Artist "<<muslib[i].artist<<endl;
        cout<<"Time "<<muslib[i].time<<endl;
        cout<<"Jear "<<muslib[i].jear<<"\n"<<endl;
        notfound=notfound+1;
    }

Будет уровень вложенности меньше для основной части кода, и читать удобнее.
Возьму на заметку. А про continue; еще нужно почитать. Не было у нас на парах использования подобного. Тут наверное только мануал мне в помощь :)
Ещё можно заменить кучу if на switch

Емнип в c++ из коробки так сделать со строками нельзя
Насколько помню(на сях давно уже не писал) switch работает медленее if + там есть ограничения по сравнению, вроде только числа. На типезированых языках switch иногда может делать неприкольные касты, делая например из строки число 0(было в какойто версии php). Вообщем после всего этого switch не юзаю принципиально, меньше гемора.
>> То что может заставить Вас ужаснутся!
Действительно ужасает. Вы и вместо русского немецкий учили?
Меня больше это ужасает:
«Сидя на каникулах дома и скучая за быстрым интернетом в общежитии, родилась гениальная идея переписать данную программу с использованием функций. Это было мое больное место. За полтора года обучения я так и не научился их использовать.»
Вместо русского — украинский (в первом примере транслит как раз украинского языка)
Вместо английского — немецкий, здесь думаю понятно.
Конечно тут есть еще что оптимизировать. Посмотрите на повторяемость кода, например вот этот кусок часто повторяется, его можно было бы вынести в отдельную функцию. То есть принцип DRY не реализуется.
 cout<<"Position "<<muslib[i].num<<endl;
             cout<<"Name "<<muslib[i].name<<endl;
             cout<<"Artist "<<muslib[i].artist<<endl;
             cout<<"Time "<<muslib[i].time<<endl;
             cout<<"Jear "<<muslib[i].jear<<"\n"<<endl;

Используйте для названия функций говорящие имена, helpf, ref,allf какие то странные аббревиатуры, почему нужно обязательно f добавлять непонятно. Например, AddToNumbers, SearchForName говорящие названия.
Комментировать код тоже хорошая привычка. Пояснять, что делает данная функция, для чего она нужна полезно не только для других, но и для себя, для лучшего понимания работы программы.
Мне кажется вместо длинного while можно было бы использовать массив или хэш, опять же повторяемость кода там достаточно высокая.
Я как-то не подумал сделать этот кусок кода одной функцией.

>> почему нужно обязательно f добавлять
Чтобы ориентироваться что это функция, а не переменная написана.

>> массив или хэш
Сказать честно: не могу представить как здесь применить массив. Про хэш вообще молчу. Говорить: «Нам такого не показывали»,- бессмысленно.
Так сигнатура у переменных и функций разные ) вы всегда их отличите.
Еще пару советов. Учите английский, в программировании вся литература хорошая на английском, если не собираетесь программировать под 1с, то все это очень пригодится. Аргумент нам такого не показывали конечно не убедителен, там все не сложно, массив — набор значений, хэш — набор значений в виде ключ-значение (key-value). Опять же можно почитать книжки на каникулах или на выходных, в свободном доступе на русском языке есть достаточно много хороших.
Английский в планах был. Сам уже успел убедится что будет нужным. А про массив и хэш на досуге почитаю и рассмотрю примеры.
А меня одного настораживает, что последнее время на хабре инвайты получают такие статьи? То, про то как человек «впихнул» кулер LGA1155 на материнку 775, то про решение лабораторной на C++. Заминусуют конечно, но [sarcasm]Хабр уже не торт[/sarcasm].
Вы изменили свой комментарий, хотел бы я видеть первую его версию.

Ну а насчет статьи и приглашений, так ведь это же из той-же оперы, как начинался Facebook. Там тоже сначала все было очень 'эксклюзивно', а сейчас вроде 1/7 населения там счета имеет.

По теме статьи: хотел бы я знать зачем над людьми издеваются в университетах? Для курса «математика, информатика и математическое моделирование» намного более полезным было бы изучать MATLAB, а не C++. Пичкать людей OOP и пр. идеями, когда они даже функций не знают, вот это странное занятие. Если уж не MATLAB, то что нибудь попроще могли бы им показывать, тот же Паскаль.
В первоначальной версии комментария всего лишь вместо BBCode «сарказм» стоял тег сарказм (который заключается в <>). Как ни странно, но хабр его обработал как тег:) Правда визуально ничего не изменилось.
Sign up to leave a comment.

Articles