Junior C++ - co wypadało by wiedzieć, najważniejsze zagadnienia.

Odpowiedz Nowy wątek
2019-05-21 14:28
0

Dzień dobry, przychodzę dzisiaj do tych bardziej doświadczonych programistów z pytaniem, a mianowicie jestem na takim etapie, z cpp że coś tam ogarniam, umiem napisać w miarę jakąś aplikację którą sobie wcześniej zaplanuje, lecz wiem że mój kod jest no słaby (tragiczny), nieczytelny i mija się szerokim łukiem z zasadami SOLID. No i są dwa nurty albo będę robił swoje aplikację, ucząc się przy tym nowych treści, ale utwardzając się w błędach, albo no właśnie albo co? Przerabianie jakichś kursów chyba średnio coś daje no bo tam zazwyczaj nie pisze się na tyle obszernego kodu by znaleźć te błędy lecz omawia konkretne zagadnienie. Dodam że obecnie przerabiam kurs advanced c++ od infiniteskills i tworzę swoją aplikację w Qt. Gdzie powinienem się teraz coś douczać? (płatne odpada :/ )

Pozostało 580 znaków

2019-05-21 15:15
1

Zobacz https://archive.org/details/P[...]dEditionByMarcGregoire2014PDF

Ok, dziękuję :) - Xezolpl 2019-05-21 15:25
dużo tam powtórzeń jest, jak ktoś ogarnia obiektowość oraz proceduralnego c++ to 60% książki może pominąć. - Czitels 2019-05-22 21:43
No jest dużo, doczytałem do setnej strony, w końcu ogarniam dzięki temu te wskaźniki... jeju tyle poradników po polsku czy opisów a dopiero tutaj po ang zrozumiałem xD co do samej książki bardzo fajna choć np. (static czy syntax które tam się cały czas pojawia nadal nie ogarniam :C ) - Xezolpl 2019-05-23 19:53

Pozostało 580 znaków

2019-05-22 10:41

Skoro jesteś na takim etapie jak to napisałeś to zakładam, że masz już jakąś tam w miarę solidną bazę.
Nie wiem co rozumiesz pisząc, że Twój kod jest "słaby". Chodzi o to, że... działa ale wydaje się Tobie że mógłby wyglądać bardziej "czytelnie"? Że jest ok ale mała zmiana gdzieś w interfejsie wymaga przebudowania prawie wszystkich klas? Czy, że kiedyś widziałeś, że podobny problem można rozwiązać pisząc mniej kodu niż piszesz obecnie ale zapomniałeś jak to zrobić?
Ad. 1: Poczytaj na temat pisania tzn. czystego kodu. Polecane książki: "Czysty kod" - R.C. Martin, "Czysta architektura" - R.C. Martin
Ad. 2: Poducz się wzorców projektowych. Przeczytaj takie książki jak: "Wzorce projektowe" - Banda czworga.
Ad. 3: Sprawdź czy już ktoś nie opisał tego problemu na tym forum albo na stackoverflow.com. Tutaj przyda się też wiedza z trzech ww. książek.

Ale przede wszystkim koduj, koduj i jeszcze raz koduj ;)
Znajomość wzorców projektowych (bez zaglądania do książki) i pisanie czystego kodu to podstawa. Reszta przyjdzie z czasem w miarę jak będziesz coraz więcej kodował.

Tak, dokładnie jak piszesz, jest średnio czytelny, zdecydowanie za długi, mija się z zasadami solid, może mała zmiana w interfejsie to nie, nie wymagała by zbyt dużej przebudowy, co najwyżej skorygowania jednej funkcji. Dziękuję za w/w literaturę, po przeczytaniu ebooka zacytowanego przez kolegę wyżej (Professional c++ 3rd edition) na pewno się za nie zabiorę. Dziękuję ^^ - Xezolpl 2019-05-22 10:55

Pozostało 580 znaków

2019-05-22 11:18
2

Nauka pisania czytelnego kodu to proces niczym doskonalenie rzemiosła - po prostu musisz swoje w życiu naklepać, pooglądać różne produkcyjne kody, poznać nie zasady, a w rzeczywistości rekomendacje SOLID, i z czasem wypracujesz własny warsztat rzemieślnika/artysty programisty.
Tu przykład źródeł od Qt, który generalnie leje na SOLID jeśli chodzi o długość kodu funkcji/klasy, oraz ile zagadnień klasa/funkcja obsługuje, a jak sam wiesz w użyciu biblioteka Qt jest całkiem przyjemna - https://code.woboq.org/qt5/qt[...]odels/qsqlquerymodel.cpp.html . Co prawda te degeneraty jakąś syfiastą notację dżawowską stosują, ale to sobie można własnoręcznie po bożemu sformatować.
A tu przykład mojej klasy - pooglądaj i daj znać, czy czaisz co się tam skąd bierze. To właśnie jest dobry test, jeśli swój kod(jakiś bardziej zaawansowany) pokażesz kumplowi który też programuje, i będzie on w stanie rozkminić sam, bez pytania cię o szczegóły, co kod ów robi to znak, iż udało ci się napisać go czytelnie.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-05-22 11:44

Pozostało 580 znaków

2019-05-22 11:52
0
MasterBLB napisał(a):

Nauka pisania czytelnego kodu to proces niczym doskonalenie rzemiosła - po prostu musisz swoje w życiu naklepać, pooglądać różne produkcyjne kody, poznać nie zasady, a w rzeczywistości rekomendacje SOLID, i z czasem wypracujesz własny warsztat rzemieślnika/artysty programisty.
Tu przykład źródeł od Qt, który generalnie leje na SOLID, a jak sam wiesz w użyciu biblioteka Qt jest całkiem przyjemna - https://code.woboq.org/qt5/qt[...]odels/qsqlquerymodel.cpp.html . Co prawda te degeneraty jakąś syfiastą notację dżawowską stosują, ale to sobie można własnoręcznie po bożemu sformatować.
A tu przykład mojej klasy - pooglądaj i daj znać, czy czaisz co się tam skąd bierze. To właśnie jest dobry test, jeśli swój kod(jakiś bardziej zaawansowany) pokażesz kumplowi który też programuje, i będzie on w stanie rozkminić sam, bez pytania cię o szczegóły, co kod ów robi to znak, iż udało ci się napisać go czytelnie.

Hmmm no ten twój kod, jest dobrze napisany ale średnio rozumiem. W konstruktorze wkładasz (przykładowe) wartości do wektorów. W funkcji sortującej to ten zapis średnio rozumiem, ale wina leży po mojej stronie bo trochę jeszcze mam małą wiedzę

std::function<const QString&(const InventoryItem *item)> fieldToSortOn;
    fieldToSortOn = [](const InventoryItem *item)->const QString&

ale chyba chodzi o to że robisz funkcję zwracają nazwę danego Itemu, później robisz vektor i przy ifach dajesz mu wartość danego sortOrderu. Następnie w sortLambda jest walidacja i ustawienie jak się ma sortować chyba, choć nie znam i nie korzystałem z klasy QRegularExpression, No i na koniec funkcja sortująca z std z tą sortLambdą. (Chociaż z 50% mam dobrze? :D )

Pozostało 580 znaków

2019-05-22 12:20
1

To jest definicja lambdy przyjmującej const InventoryItem* i zwracającej const QString&.
W C++17 (lub C++14) kod można skrócić do ( kompilator sam określi jaki typ ma wartość zwracana - tutaj - std::reference_wrapper<const QString> )

auto fieldToSortOn = [](const InventoryItem *item){ return std::cref(item->name); };

Zobacz także
https://github.com/sftrabbit/CppPatterns-Patterns
masz tam ciekawe przykłady kodu C++ zastosowanego do rozwiązań w często występujących problemach.

edytowany 3x, ostatnio: TomaszLiMoon, 2019-05-22 13:38
zwracającej nie QString, a referencję do QStringa ;) - MasterBLB 2019-05-22 12:54

Pozostało 580 znaków

2019-05-22 13:01
1
Xezolpl napisał(a):

W konstruktorze wkładasz (przykładowe) wartości do wektorów.

No tu dobrze, zbyteczne jest tylko słówko przykładowe - to są już dane produkcyjne, na takich klasa ma działać.

Xezolpl napisał(a):

W funkcji sortującej to ten zapis średnio rozumiem, ale wina leży po mojej stronie bo trochę jeszcze mam małą wiedzę

std::function<const QString&(const InventoryItem *item)> fieldToSortOn;
    fieldToSortOn = [](const InventoryItem *item)->const QString&

ale chyba chodzi o to że robisz funkcję zwracają nazwę danego Itemu, później robisz vektor i przy ifach dajesz mu wartość danego sortOrderu. Następnie w sortLambda jest walidacja i ustawienie jak się ma sortować chyba, choć nie znam i nie korzystałem z klasy QRegularExpression, No i na koniec funkcja sortująca z std z tą sortLambdą. (Chociaż z 50% mam dobrze? :D )

Tutaj faktycznie musisz się Bracie doszkolić z lambd, wyrażeń regularnych oraz std::function aby w pełni rozumieć ten kod, ale jak widzisz pomimo braków w wiedzy dałeś radę całkiem poprawnie rozkminić co mniej więcej się dzieje:

  1. W istocie, pierwszym krokiem jest określenie który wektor SortOrder ma być użyty w lambdzie sortującej. Posłużenie się wskaźnikiem zainicjowanym na nullptr uodparnia mnie na sytuację kiedy żaden SortOrder nie okaże się właściwy
  2. W SortLambda w istocie jest określone po założonych kryteriach(to te regexpy w wektorach SortOrder) jak przesłane 2 InventoryItemy mają być posortowane.
  3. Na koniec też całkiem trafnie odgadłeś, acz gwoli ścisłości to jest odpalenie std::sort które jako funkcji porównującej elementy używa owej sortLambda

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2019-05-22 19:41
1

STL, C++11 to też już powoli standard, concurrency czyli <thread>, troche boosta. No i w zależności od branży, gdzieniegdzie grafika, gdzieniegdzie linux, telecom, czasem również gamedev.

c++14/17 to opcjonalnie, fajnie wiedzieć, bo są ciekawe funkcjonalności :-)

Pozostało 580 znaków

2019-05-22 21:46
0
Czitels napisał(a):

STL, C++11 to też już powoli standard, concurrency czyli <thread>, troche boosta. No i w zależności od branży, gdzieniegdzie grafika, gdzieniegdzie linux, telecom, czasem również gamedev.

c++14/17 to opcjonalnie, fajnie wiedzieć, bo są ciekawe funkcjonalności :-)

No bo właśnie, ja zaczynałem od tego c++ bo był kurs u zelenta, to był mój początek no i stwierdziłem że chcę robić gry indie oraz aplikacje multiplatformowe (java? coś chyba najbliżej tego) no ale siedziałem w tym c++ i siedzę po dziś dzień by "zgłębić" do końca już podstawy tego programowania obiektowego czy wgl programowania, no i chyba boję się przenieść na inny język, zaczynać to wszystko od nowa i robię wsm mijając się z celem małe apki w Qt. A jak patrzę to wszędzie do pracy jeszcze linux czy inne rzeczy których po prostu nie czuję i nie chcę. :/ co teraz XD

edytowany 1x, ostatnio: Xezolpl, 2019-05-22 21:46

Pozostało 580 znaków

2019-05-23 08:21
0

Ja zaczynałem od C/C++ właściwie to z samych książek się uczyłem, a skończyłem na Javie, po czym okazało się, że to już przestarzałe. Wróciłem do C++ obejrzałem/przeklepałem kurs o Qt ok. 100 filmików z playlisty, później przesiadka nagle na android studio i znowu Java, (po drodze html, css [od js'a trzymałem się z daleka]) później servlety z nudów zacząłem pisać, jakieś crudy na hibernate, mysql-connector itp. Później przesiadka na springa, na początku jakieś konsolowe apki, wstrzykiwanie beanów, wywoływanie metod przed before, po after-returning, after, after-throw itp, a później crudy w spring boocie. Pomyślałem że crudy to trochę mało ambitne i wróciłem do android studio :P

edytowany 1x, ostatnio: au7h, 2019-05-23 08:23

Pozostało 580 znaków

2019-05-23 19:12
0
au7h napisał(a):

Ja zaczynałem od C/C++ właściwie to z samych książek się uczyłem, a skończyłem na Javie, po czym okazało się, że to już przestarzałe. Wróciłem do C++ obejrzałem/przeklepałem kurs o Qt ok. 100 filmików z playlisty, później przesiadka nagle na android studio i znowu Java, (po drodze html, css [od js'a trzymałem się z daleka]) później servlety z nudów zacząłem pisać, jakieś crudy na hibernate, mysql-connector itp. Później przesiadka na springa, na początku jakieś konsolowe apki, wstrzykiwanie beanów, wywoływanie metod przed before, po after-returning, after, after-throw itp, a później crudy w spring boocie. Pomyślałem że crudy to trochę mało ambitne i wróciłem do android studio :P

yhym a android studio to java czy c++? Kurcze no moja historia miała zmierzać w stronę Javy ale jak to niby przestarzałe no okej, osiągi w grach nooo słabo, prawda, ale jakieś tam aplikację chyba dobrze skoro trzyma się na 3 miejscu popularności. Na razie siedzę w tym Qt ale no chciałbym robić swoje gry, zwykłe indyki i wiem że tu mam w sumie dowolność pomiędzy java a c# choć ten drugi wygląda lepiej (no większe zasoby poradników itd (np.Unity), lepsza wydajność (chyba)) no i chciałbym również multiplatformowe aplikacje tworzyć (głównie android i windows)) i już sam nie wiem :/
Tak z doświadczenia co byś doradził?

Mocno zasugerowałem się stroną https://jaki-jezyk-programowania.pl gdzie wyszła właśnie universalnie JAVA.

edytowany 1x, ostatnio: Xezolpl, 2019-05-23 19:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0