Programkód lefutásának menete, értelmezése

Programkód lefutásának menete, értelmezése
2014-06-14T16:54:19+02:00
2014-06-15T13:04:34+02:00
2022-10-15T22:40:59+02:00
lilakavics
Kedves Prog.hu tagok!
Szeretném a segítségetek kérni egy látszólag egyszerűnek tűnő, függvénybe ágyazott függvény és annak tartalmának kibogozásához. Azt szeretném tudni, hogy a fordító hogyan végzi el a feladatot, milyen sorrendben és hogy a for cikluson belüli nevek tulajdonképpen mire hivatkoznak? Kisség zavaros számomra mi zajlik le, ha paint-ben valaki összenyilazgatná a futási sorrendet, vagy leírná részletesen azt nagyon megköszönném, alapvetően grafikus vagyok így grafikai segítséget szívesen nyújtanék aki tud nekem segíteni ilyen objektum orientált script nyelvekben. Ez egy Swift kód. Előre is köszönöm a válaszokat!

func megTalalhatoBenne(lista: Int[], feltetel: Int -> Bool) -> Bool {
   for elem in lista {
      if feltetel(elem) {
         return true
      }
   } return false
}

func kevesebbMintTiz(szam: Int) -> Bool {
   return szam < 10
}

var szamok = [22, 16, 54, 13, 34, 1]
megTalalhatoBenne(szamok, kevesebbMintTiz)
Mutasd a teljes hozzászólást!
Lényegében a megTalalhatoBenne függvény képezi a "programot".
Két paramétert vár, egy szám tömböt (szamok), és egy másik függvényt (kevesebbMintTiz), ami a feltételt fogja vizsgálni.
Belép a megTalalhatoBenne f.-be, ott végiglépked a kapott tömb elemein egyenként, meghivja a feltétel függvényt, ami konkrétan megnézi, hogy az adott szám kevesebb-e mint 10, ha igen, akkor true-val visszatér, és ebben az esetben a megTalalhatoBenne is visszatér true-val, mert a tömbben megtalálható a feltételnek megfelelő (<10) elem/szám.
Ha a ciklusban minden elemre false-t fog visszaadni a feltétel, akkor a megTalalhatoBenne is false értékkel fog visszatérni, jelezve, hogy nincs a tömbben 10-től kisebb szám.
Ha irsz egy másik függvényt a kevesebbMintTiz mintájára (egy int paramétert vár és bool-lal tér vissza), pl.
func varazsSzame(szam: Int) -> Bool { return szam==54 }
és ezt adod át megTalalhatoBenne(szamok, varazsSzame), akkor azt fogja vizsgálni a megTalalhatoBenne függvény, hogy az 54 benne van-e a kapott tömbben. (a példádban megtalálható)
Mutasd a teljes hozzászólást!

  • Hát tessék, remélem jól értettem amit szerettél volna...

    Megj.: A megtalálható egy szó!  Így a funkció neve "megtalalhatoBenne" és nem megTalalhatoBenne".
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Nagyon köszönöm az érthető választ, így már érthetőbb mederbe került, hol is kezdődik a program fordítása, és hogyan zajlik le. Úgygyondolom nem szabad tovább lépnem a tanulásban, amíg nem értek valamit.
    Mutasd a teljes hozzászólást!
  • Köszönöm a választ és a nyilazgatást, elsőnek mikor megláttam lefagytam, de aztán szépen sorban értelmeztem.

    Tulajdonképpen amikre írtad, hogy hibás, gond nélkül lefut. A Swiftben automatikusan deklarálódnak amiket létrehozol változók, amit akár a kód közben is létrehozhatsz. Eleinte nekem is fura volt.

    A "for elem in lista" automatikusan tudni fogja, hogy a lista az egy tömb típus mivel már a paraméternél deklarálva lett és az elem az a tömb indexel ellátott elemeinek a számát jelentiheti, talán érthetőbb lenne az "elemszam" elnevezes, tehát a ciklusnak 0,1,2,3,4,5-dik elemén fog végigmenni akkor gondolom az "elem" erteke 6, de ebben nem vagyok biztos.

    Ezután jön a feltétel vizsgálat:

    if feltetel(elem){
     return true
    }

    Itt akkor a feltétel helyére beillesztődik a logikai értékkel visszatérő "kevesebbMintTiz" funkció, amely az aktuális elemre lefuttatja, és amennyiben igaz a "szam > 10" visszatér a TRUE-val, ha ez nem teljesül akkor False.

    Zavaros volt nekem ezt kihámozni így nagyon sokat segített az ábrád, hogyan tudok neked pontot adni? mert az előző kommentelőnek adtam a megoldást, viszont a te értelmezésed részletesebb volt így igazábol neked jobban járna, azt irja hogy hasznosnak sem tudom 50 komment szám alatt bejelölni.


    Megtudom ezt oldani valahogy?
    Mutasd a teljes hozzászólást!
  • Tulajdonképpen amikre írtad, hogy hibás, gond nélkül lefut.

    Akkor csak értelmezési kérdés volt, hogy hibás-e.
    Végül is ha jobban belegondolok, lehet úgy értelmezni, hogy nem hibás.
    Kivéve egyet nem tudok: Hogyan adod meg a számot amiről el kell dönteni, hogy kevesebb mint 10 és a listában van ha nem adsz értéket a kevesebbMintTiz(?) funkciónak, aminél deklarálod, hogy vár egy integer paramétert, amit így nem kap meg... Na mindegy...

    Zavaros volt nekem ezt kihámozni így nagyon sokat segített az ábrád, hogyan tudok neked pontot adni?

    Örülök ha segítettem. Jari_jari leírása is megoldás volt, szépen leírta! Nem tudom, hogy lehet-e módosítani azt, hogy kinek akarod adni a pontot. De szerintem nem is biztos, hogy kell ezen változtatni. Azért kösz, hogy válaszoltál! Legalább tudom, hogy nem dolgoztam vele hiába.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd