Miert van szuksegunk funciokra meg osztalyokra c++-ban?
Kezdo vagyok meg c++-ban,interneten tutorialokbol tanulok es nem ertem mi szuksegem lesz vagy van osztalyokra es funkciokra...(azt ertem nagyjabol hogy mit csinalnak...)
14/f
Ennek a magyarázata elég komplex dolog, így kénytelen leszek pongyolán fogalmazni, a kollégáktól előre is elnézést kérek.
A dolog alapvető lényege az egységbezárás és a kód újrafelhasználhatósága.
Az első azt jelenti, hogy adott műveletsorokat és a hozzájuk tartozó adatokat elzárod a külvilág elől, így nem tudod őket egy másik, független kódrészletből véletlenül elbarmolni.
A második pedig azt, hogy nem kell kétszer megírnod ugyanazt a kódot, hanem a szubrutint meghívva tudod a folyamatrészt lefuttatni. A kollégák majd feltehetőleg felhoznak neked egy-két használható példát is, én viszont most keltem és még nem kávéztam :)
A copy-paste egy programban főbenjáró bűn. DRY, azaz Don't Repeat Yourself. Ha többször írod meg ugyanazt a kódrészletet, többször is tudod elszúrni (akár többféleképpen) és ha módosítani kell rajta, minél több másolatod van, annál nagyobb eséllyel fogsz valamelyikről megfeledkezni, aztán mehet a fejvakarás, hogy miért nem csinálja azt a program, amit szeretnél. Látható, hogy ez szubrutinokkal elkerülhető, mert csak egyszer, egyetlen helyen írod meg az adott funkciót, majd a kód más részein ezután már csak hivatkoznod kell rá. A kódismétlés mindig bajt hoz, érdemes kerülni.
Egy harmadik, szintén elég fontos, de a kezdők által gyakran meg nem értett, esetenként elhanyagolt tulajdonság, hogy a szubrutinok többnyire (a kivételeket most nem tárgyalnám) névvel rendelkeznek, egy jól megválasztott név pedig kiválóan tudja dokumentálni az adott kódrészt, anélkül, hogy karbantartásigényes, zavaró és egyéb sajátos veszélyekkel bíró kommentekkel kellene telehányni a forráskódot.
Ha nekikezdtél már a programozásnak, akkor valószínűleg most is használsz szubrutinokat és osztályokat, legfeljebb nem vetted még észre (C++ -ban mondjuk osztályok nélkül még meg lehet úszni, de ez nem jelenti azt, hogy érdemes). Ott van például a vector. Ha nem lenne a vector osztály és metódusai, turkálhatnál ömlesztett adatok után a memóriában. Belátható, hogy ez olvashatatlan és veszélyes lenne.
Egy kissé erőtlen példára talán azért futja így félálomban:
/**
˙* Tudom, skacok, std::string ...
˙*/
int main() {
˙˙˙˙char *nev1 = "Albert";
˙˙˙˙char *nev2 = "Béla";
˙˙˙˙char *nev3 = "Cecil";
˙˙˙˙char *nev4 = "Csaba";
˙˙˙˙std::cout << "Szia, " << nev1 << std::endl;
˙˙˙˙std::cout << "Szia, " << nev2 << std::endl;
˙˙˙˙std::cout << "Szia, " << nev3 << std::endl;
˙˙˙˙std::cout << "Szia, " << nev4 << std::endl;
˙˙˙˙return EXIT_SUCCESS;
};
Hát ez így elég borzasztó. Feleslegesen sok sor, feleslegesen sok ismétlés, feleslegesen sok hibalehetőség, pedig végig ugyanaz a megy végbe: Köszöntünk egy nevet.
Nézzük, hogyan segíthet itt egy szubrutin:
void sayHello(char *name) {
˙˙˙˙std::cout << "Szia," << name << endl;
};
int main() {
˙˙˙˙sayHello("Albert");
˙˙˙˙sayHello("Béla");
˙˙˙˙sayHello("Cecil");
˙˙˙˙sayHello("Csaba");
˙˙˙˙return EXIT_SUCCESS;
};
Ezt még meg lehetne fejelni egy sayHelloToAll szubrutinnal, ami megkapja egyszerre az összes nevet, végigmegy rajtuk és egyenként meghívja mindre a sayHello-t, de nem akarom túlbonyolítani.
Az osztályok erre még rátesznek egy remek lapáttal, de mivel kómázás közepette félő, hogy valami marhaságot ideírok, meg amúgy sem vagyok egy kifejezett tanáralkat, most inkább takarékra teszem magam, és meghagyom a dolog kifejtését másoknak.
A kollégáktól pedig mégegyszer elnézést kérek a tálalásért.
A hatos elég nagy paraszt, de amúgy igaza van, tényleg leírja minden OOP nyelvet tanító könyv, hogy miért is jó nekünk ha megértjük(és használjuk) ezt a koncepciót.
Egyébként ennyi idősen(vagy inkább úgy mondom, hogy kevés\nulla tapasztalattal) szerintem egy egyszerűbb nyelv mindenképp jobb választás, c++ ban nagyon sokat fogsz szívni.
SZERINTEM:
Csak a tutorialok kevesek...
Bmilyen könyv megfelel, utánna a tutorial.
A Függvények a moduláris programozás alapjai, szubrutinnak is hívhatjuk őket. Velük szervezheted meg a programod működését. Pl, egy olyan részt, ami többször lefut berakod egy szubruitinba, ellátod egy megfelelő névvel, ami utal arra amit csinál és kész a fügvény.
Az osztályok pedig az OOP (objektum orientált programozás) fundamentumai. Egyenlőre ne foglalkozz velük, ha a függvények sem tiszták még.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!