Wpis z mikrobloga

#cpp #naukaprogramowania #programowanie

Programistyczne zero z tej strony.
Mały background: Zrobiłem symulator ustawki Widzew vs ŁKS gdzie wpisujemy liczbę żołnierzy, a program liczy im staty pomiędzy konkretnymi wartościami i proste równanie oblicza kto komu w ryj dał mocniej.

W ramach ćwiczeń pokroiłem program na funkcje. Jak to na początku, wiadomo, były problemy ze zmiennymi, ale szybko sobie ustaliłem, że w sumie zamiast się z tym je( ͡° ͜ʖ ͡°)ć w tych nawiasach lepiej jest zrobić po prostu zmienne globalne i hulaj dusza piekła nie ma. Ale doczytałem w internetach, że to jest uznawane za złą praktykę.
Ale nie znalazłem dlaczego. I teraz
a) to głupie pie( ͡° ͜ʖ ͡°)enie i olać takie głosy
b) serio ma to sens, żeby tego unikać (i tu wykopki prośba o wytłumaczenie głupszemu koledze)
  • 10
@Otek0: dlatego ze używasz zmiennej tam gdzie jej potrzebujesz a nie rypiesz odrazu na globalna blokując sobie ta nazwę np tak jak int i, int j czy string str ...poza tym funkcje musza przyjmować jakieś argumenty ...
@slucham-psa-jak-gra:
No uczę się, żeby to kiedyś wykorzystać i zarabiać słynne 15k.


Więc zakładamy, że chcę kiedyś robić coś na poważniej. Usatysfakcjonuje mnie odpowiedź, że przy prostym pisaniu jakie teraz uprawiam wygodniejsze jest deklarowanie zmiennych poza funkcjami, ale jak przyjdzie coś bardziej zaawansowanego to wygodniejsze lub bardziej przejrzyste lub konieczne do prawidłowego działania będzie robienie tego w funkcjach. Ale ktoś mi musi temat potwierdzić.
@Otek0: #naukaprogramowania:
1. Nie powtarzaj kodu niepotrzebnie:
1.1 Funkcje getNumWidzew() i getNumLKS() wykonują to samo czyli zwracają numer => można zamienić je na funkcję

int getNumber(string name) {
int number = 0;
cout << "Give number of " + name + " hools: \n";
cin >> number;
return number;
}

i wykorzystać ją:

widzew = getNumber("Widzew Lodz");
1.2 w battle() niezależnie od warunku pokazujesz numer rundy. Wyciągnij

cout << "Round
@Otek0: Twój problem ze zmiennymi globalnymi wynika z tego, że twoje metody nie przyjmują żadnych parametrów, a pobierają je "z zewnątrz". Tak jak mówili koledzy wcześniej, przy większej ilości zaśmiecisz namespace, poza tym szukanie po całym kodzie zmiennych z których korzysta dana metoda to też średnio wygodne rozwiązanie.
Widzew i LKS mogły by być obiektami, wtedy getNum(Team team) i battle(Team team1, Team team2) i nie potrzebujesz żadnej zmiennej globalnej ;)