Programozásban hogy lehetne egy kezdőnek elmagyarázni, hogy mi az a függvény?
Nem jó, ha megtanul valaki egy definíciót, vagy az alapján akarja megérteni, mert jön az első kivétel, vagy összefut valakivel, aki picit másképp tudja, és jönnek a problémák.
Biztos, hogy tutorialt akarsz írni? :)
Ezen a blogon írom újra a tananyagot. Nyilván sok a pontatlanság benne, és jó lenne ezen csiszolni.
Ma biztosan nem állnék neki nulláról, de viszonylag sok időt beleöltem már.
A definiciókkal vigyázni kell nagyon. Ez a definició-tétel-bizonyítás hármas ez teljesen jó egy csomó helyen. Kezdőknél nem segít, sőt. Ha nem egyetemi szinten akarod tanítani akkor az elején célszerű hanyagolni a definiciókat. Nem egy nagyon-nagyon jó kezdőknek, "felhasználóknak" szánt programozás tankönyvet láttam (főleg angol nyelven) az 1960-as évek elejétől napjainkig. A legtöbb esetén a definiciók csak a kötetek második felétől kezdődnek, vagy még ott sem. Egy olyan átlag "felhasználó" számára aki most ismerkedik a programozással teljesen feleslegesek.
Kis túlzással egyetemi szinten is tök feleslegesek, egészen addig amíg nem a programozás tudománnyal (pl. progmat, proginfó, mérnök infó stb.) akar valaki foglalkozni. A többieknek elég ha értik, hogy mi van egy-egy fogalom mögött.
Sok esetben egyébként ezek a definiciók nyelv függőek is. Pl. egészen mást ért a C és a Fortran függvény fogalom alatt, vannak hasonlóságok de vannak lényeges különbségek is. Ezért kell nagyon vigyázni a kőbevésett definiciókkal.
Én úgy vettem észre, hogy ezek a definiciók gyakran "csak" arra jók, hogy lehet értük buktatni az egyetemen. Pont azért mert nem általánosan elfogadott definiciókra van szó (mint pl. egy matek, fizika, kémia stb. esetén, ahol azért fontosak a definciók hogy pontosan mindenki ugyanazt értse ugyanzon a dolgon), hanem programnyelv, fejlesztőrendszer stb. függvénye is.
Az alapstruktúrák természetesen nyelv függetlenek (pl. elágazás, ciklus, értékadás stb.) de itt is vannak nyelvi különbözőségek. Gyakorlatilag ha jól emlékszem ezekről az első leírások a XIX. század végéből származnak, aztán főleg Turing az aki össze szedte ezeket (ld. Turing gép). De az, hogy ezek pontosan hogyan vannak implementálva az már nagyon változó.
Kérdező: 13:21 már bocs, de ez "horror" amit itt a szerző ír: "Függvény vagy eljárás (angolul function vagy procedure), más néven metódus, alprogram, esetleg funkció, hasonló fogalmak: szubrutin, korutin."
A function és a procedure (már amelyik nyelvben megvan különböztetve) gyökeresen eltérő jelentéssel bír. Pl. a Fortranban az egyik csak "jobb oldalon" állhat, a másik viselkedhet utasításként. De ugyanígy pl. PL/1 vagy a Pascal esetén is nagyon eltérő a jelentés tartalom. Az, hogy a C és C jellegű (leánykái) esetén praktikusan nincs procedure fogalom és minden function az a C egyik sajátossága.
Az alprogram megint teljesen más (főleg nem keverném ide, mert az alprogram kifejezést elsősorban az "ősi" nem procedurális és nem OOP nyelveknél használták, mint pl. a Basic, Fortran, assembly és társaik, gyakorlatilag ezek a nyelvek mára kihaltak, és az pl. az új Basic is egyre inkább elindult a procedurális irányba /ld. pascal jelleg/), az, hogy amit később function-nek és procedure-nak nevezünk procedurális és OOP nyelveknél az ennek egyfajta "tovább fejlesztése" /ld. pl. 1960-as évek végén Jackson módszer/.
A metódus megint egy egészen más fogalom, azt az OOP vezette be. Valóban van hasonlóság, de a metódus már egy objektum "része" /objektumon kívül nem is értelmezhető/, míg a function és a procedure objektumon kívül is, az egész programban bárhol értelmezhető fogalom (és nem is kell hozzá OOP).
A subrutin magyar fordítása az alprogram a kettő egy és ugyanaz csak az egyik az angol eredeti, a másik egy elterjedt magyar kifejezés rá.
Szerintem jobb forrásból próbálj tájékozódni főleg ha tutoriált akarsz írni. (Pont azért tettem ebbe is meg az előző hozzászólásba történeti áttekintést, hogy picit árnyálni lehessen a képet, és tudjál tovább lépni és hasznos lehet a tutoriál íráshoz).
Ez megint egy irtó nehéz kérdés. Sok ilyen tutoriálnál a "nagyot akarunk fogni, de végül üres marad a zsák" effektus. Vagy eldönti a szerőz, hogy C++ (esetleg egy pici C kitekintés) amiről beszél, vagy általánosra veszi. Szerintem itt bőségesen elég a C++ oldaláról közelíteni. Max nagyon zárójelesen (erre volt jó a nyomtatott könyveknél a lábjegyzet) megjegyezni, hogy más programnyelveken ehhez hasonló fogalom a procedure, subrutine stb.
Valahogy így írnám: más programnyelvekben találkozhatunk a procedure (magyarul eljárás) subrutine (magyarul alprogram) kifejezésekkel is, ezek hasonlóságot mutatnak a C/C++ function (magyarul függvény) fogalommal. A C/C++ nyelvben leginkább a function-ökkel (magyarul függvény) vagy objektumok esetén a method-okkal (magyarul metódus)...
"Szerintem a függvény kicsit rossz elnevezés, mert sokan a matematikai függvényekre gondolnak, a funkció vagy az alprogram talán jobb elnevezés lenne."
Szerintem viszont épp a matematikai függvényekhez való hasonlósága miatt jó név. Kap paramétereket (ha kap), előre meg van határozva, hogy milyen algoritmus szerint ad vissza értéket (ha ad), és kifejezésekben is pont úgy használható. Persze nem tökéletes az analógia, de elég sok a hasonlóság.
Nem vitaindító, csak érdekesség.
"The subroutine may return a computed value to its caller (its return value), or provide various result values or output parameters. Indeed, a common use of subroutines is to implement mathematical functions, in which the purpose of the subroutine is purely to compute one or more results whose values are entirely determined by the arguments passed to the subroutine."
"Abból a szempontból tehát, hogy az eljárás meghívásakor megadhatunk-e paramétereket is, az eljárás és a függvény között nincs különbség. Ám az eljárás egyes régebbi programnyelvekből hiányzott, emiatt a szubrutin és a függvény volt a két összehasonlítható eszköz, és a függvény ekkor kapta a nevét a matematikai függvény formai analógiája alapján."
Az a baj, hogy amit te definiálni akarsz az nem a függvény, hanem az alprogram.
Ami nem feltétlen függvény. Alapvetően programozási nyelvenként eltér a megvalósítása a dolognak. Van amiben a függvény és "eljárás" teljesen külön dolog. De persze a modern nyelvekben összefolynak már kicsit. De klasszikusan a függvény az pont a matematikai függvény.
Na de amúgy én úgy magyaráznám, hogy egy utasítássorozat, amit a programod "megtanul".
Pl a való életben mondhatod valakinek, hogy biciklizzen és jó eséllyel ezt minden további nélkül tudja teljesíteni. De csak akkor, ha élete során megtanult már biciklizni. Ergo a biciklizést, mint eljárást/metódust egyszer már implentálva lett, és ezt a tudást bármikor újra elő tudja hívni.
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!