Wpis z mikrobloga

#programowanie #cpp #cplusplus #informatyka #programujzwykopem
Hej, zakupiłem do nauki C++ książkę, którą ludzie polecali "Język C++" Bjarne Stroustrupa.
I teraz ważne pytanie, bo nie wiem co robić. W technikum uczyli mnie bardzo prostej budowy c++, a tu w książce kod wygląda totalnie inaczej i według mnie jest bardziej złożony. Czy lepiej już nauczyć się budować program tak jak pokazuje Bjarne, ale jest więcej do wypisania, czy pozostać przy typowym int main?
Poglądowy kod z technikum:

`#include
using namespace std;
int main()
{double x;
cin>>x;
cout<<"Kwadrat liczby wynosi:"<
Pobierz
źródło: comment_1617287297h2hLenuQtDjFCZuybniDoS.jpg
  • 17
@harnasiek: generalnie lepiej jak na obrazku ale to też trzeba z umiarem. Tak czy siak ten kod z przykladu jest mocno nietrafiony do bo wygląda jak zwykły over-engineering. No chyba że to ma demonstrowac strukture programu a nie sam kod.
@harnasiek: Generalnie raczej sugerowałbym się od początku przyzwyczajać do struktury jaką tam masz. Natomiast jasne, jeśli po prostu chcesz coś konkretnego przetestować/prototypować np. sprawdzić działanie czegoś, to nie, nie musisz. Chociaż tak jak MarcinOrlowski wspomniał, wydaje mi się, że chodziło też tutaj o pokazanie właśnie jak strukturyzować kod.
@harnasiek: Nie koniecznie "na tej". Staraj się po prostu, żeby kod był podzielony na jakieś logiczne, spójne części. Pod tym kątem polecam zapoznać Ci się z takimi założeniami jak np. zasady SOLID, w tym wypadku konkretnie pierwszą literką - S, jak Single responsibility.

@harnasiek: to co na obrazku pokazuje rozbicie kodu na logiczne bloki. Oczywiście wynik będzie taki sam, ale czytelność kodu zyskuje. Poza tym powiedzmy ze nie potęgujesz ale liczysz np. "prędkość satelity względęm Wenus". Mozesz wsadzic obliczenia od razu w maina albo przeniesc je do funkcji calculateVelocityRelativeToVenus(). I w kodzie to wywoływać. Wynik ten sam ale potem czytając ten kod, bedziesz widział, "ok, tu podstawiamy prędkość wzgl. Wenus", przy czym już
@harnasiek: Main to takie miejsce gdzie Twój program się zaczyna (nie jest to do końca prawda, ale na ten moment możesz tak przyjąć), to co już tam wywołasz, zależy od Ciebie i dużo łatwiej ogarnąć kod, jeśli konkretne zadania są oddelegowane do odseparowanych bloków kodu/funkcji/metod/klas/whatever, które potem sobie tam wywołać. Tak jak kolega wyżej podał Ci przykład, możesz stworzyć X funkcji obrazujących np. każda jeden etap procedury startowej samolotu, nazwać je
@harnasiek: ogolnie tak. De facto nawet pobranie danych powinno byc w oddzielnej funkcji np. getX() (czy jakkolwiek :), którą wołasz a ona zwraca wprowadzony x. Zauważ od razu korzyść. Zechcesz brać dane np. z pliku zamiast z klawiatury, zmieniasz tylko ciało funkcji getX() i już. Nic więcej nie musisz zmieniać. Albo nawet idąc dalej getX() jest bardziej złożone i bierze albo z pliku, albo z stdin albo z sieci. Cokolwiek
Czyli int main będzie służył


@harnasiek: przy okazji, deklaracja int main() oznacza ze funkcja main() powinna zwrocić int. Twój klod tego nie robi i kompilator powinien pokazać warning. to co main() zwraca jest zwracane potem do systemu tak zeby wiedział czy program się wykonał poprawnie czy nie. Jeśli z maina zwrócisz zero (return 0;) to znaczy ze jest ok. Jeśli np. zmiast cyfry w X user wprowadził np.
@harnasiek: pisanie globalnego using namespace std to zła praktyka, więc jak mozesz to tego nie rób.
generalnie programy powinno rozbijać się na jak najwięcej funkcji, a jak najmniej pisać stłoczonego kodu.
ktoś mi kiedyś powiedział że jeżeli jakaś twoja funkcja ma ponad 50 linii kodu, to znaczy że zrobiłeś coś źle, i tak szczerze to się pod tym mogę podpisać, bo mało jest momentów kiedy moje funkcje mają więcej, i przy