Egyszerű vagy többfunkciós függvények
Fejlesztés közben egy érdekes kérdés vetődött fel bennem. Van egy függvény ami ellenőrzés hajt végre és egy adatot ad vissza, mely három különböző érték lehet. A függvényt két különböző helyen használom. A három értékből az egyik helyen egy érdekes a másik helyen történő felhasználáskor kapom vissza a másik két érték valamelyikét. Ez utóbbi esetben a két értéken felül célszerű lenne még egy listát is visszakapnom attól függően, hogy melyik értékről is beszélünk a kettő közül amit alapon visszaad a függvény.
Tehát mi a célszerűbb megoldás? Csinálni egy függvényt, ami nem csak ellenőriz és visszad egy értéket, hanem adott esetben egy tömbbel is visszatér. Vagy külön megcsinálni egy függvényben az ellenőrzést és egy másikban a lista lekérést. Ez egész kérdés azon alapul, hogy ha az ellenőrzés során az az eset áll fent, ahol egy listára is szükség van, akkor egyúttal meg tudom oldani a függvényen belül. Viszont a másik két esetben nincsen szükség tömb visszaadására.
■ Tehát mi a célszerűbb megoldás? Csinálni egy függvényt, ami nem csak ellenőriz és visszad egy értéket, hanem adott esetben egy tömbbel is visszatér. Vagy külön megcsinálni egy függvényben az ellenőrzést és egy másikban a lista lekérést. Ez egész kérdés azon alapul, hogy ha az ellenőrzés során az az eset áll fent, ahol egy listára is szükség van, akkor egyúttal meg tudom oldani a függvényen belül. Viszont a másik két esetben nincsen szükség tömb visszaadására.
UpDate
A függvény ellenőrzést hajt végre. Két helyen használom a függvényt. Első helyen csak a vizsgálat eredményéből következő érték a fontos, míg a másik helyen az eredménytől függően egy tömböt is célszerű lenne visszadni.
Koncepció
Én úgy csinálnám, hogy csinálnék egy olyan függvényt, hogy isEgyikBemenet() ami visszatér true-false-al, isMasikBemenet(), stb. és a megfelelő függvényt hívnám meg. Aztán az egészet becsomagolnám egy osztályba.
Ennek több előnye is van. Az egyik, hogy nem bízol többet egy függvényre, mint amennyi feltétlenül szükséges. A másik, hogy skálázhatóbb a dolog, mert ha változik a bemeneteli adatok struktúrája, nem kell a függvényben is és a feldolgozórészben is átírni, hanem csak a függvényben / osztályban.
Re
Az osztályos dolog kilőve, mert még nem vágom az OOP-t (de már rajta vagyok a tmán, vettem két könyvet az OOP-ről, csak időm nincs még belemélyedni) ...
Nem bonyolult
Legyen pl ez:
ha meg drága a tömb előállítása,
A megoldás egyelőre ...
Szóval a megoldás az lett, hogy a
Aztán csináltam egy
A két függvény csupán annyiban tér el egymástól, hogy a másodikban a vizsgálat helyett return van, valamint a while ciklusban a számlálás helyett feltölti a tömböt amivel visszatér.
Pontosan
öngyilkos megoldás
pp
öngyilkos megoldás
pp
Meghíváskor adj egy paramétert
Ebbol egyik lehet alapertelmezett.
Nem jó.
Jobban mondva ...
Tehát az egész kérdésem lényeg az volt, hogy programtervezési szempontból melyik megoldás a célszerűbb. A több egyszerű függvény vagy a nagyobb tudású függvény figyelembe véve azt, az első függvény nem egy összetett függvény lenne, tehát nem egy függvénybe csomagolnék be több független folyamatot, hanem egy algoritmus egyszerre képes elvégezni végülis (a megvalósított) kettő feladatát.
A Jano által írt megoldásnál a függvény a program egyik részén történő felhasználásánál csak 0, 1 vagy 2 értékkel térne vissza, míg a másik felhasználásnál visszatérne a három érték valamelyikével és egy tömbbel. A már kész megoldásban pedig a lista visszaadásást egy újabb függvény végzi.
A második megoldás valósítja meg azt, hogy egy függvény csak annyit csináljon, amennyit éppen kell. Viszont jelen esetben ugye nem két külön algoritmusról van szó az összetett függvény esetében, hanem egy plusz érték visszaadásáról amit ugyanaz a while ciklus állít elő, mint ami a 0, 1 vagy 2 értéket.
Ha leírnád pontosan mi ez könnyebb lenne
Ha leírod, hogy pontosan mi a feladat sokkal jobb válaszokat kaphatsz.
A feladat
A rendszerbe lépve a user-nek kötelező kitöltenie egy napi jelentést, mielőtt megrendelőt tudna feladni. Ehhez hozzájön még az, hogy nem biztos, hogy minden nap belép, tehát kényszeríteni kell a régebbi ki nem töltött jelentések kitöltésére. Vagyis, amíg visszamenőleg vannak kitöltetlen napi jelentések addig nem tud megrendelőt feladni, az állapotát lekérni stb. Ja igen, ami még fontos, hogy jelentést csak hétköznap kell leadnia.
A feladatot úgy oldottam meg, hogy egy táblában minden user-hez eltárolom az utolsó kitöltött napi jelentés unix timestamp-jét úgy, hogy az időt nullázom (pl. 2007-01-11 00:00:00). Ez a jelentés mentése után történik meg.
Az ellenőrzés pedig úgy megy, hogy lekérem a tárolt timestamp-et és ebből kiindulva vizsgálom meg, hogy van-e kitöltetlen napi jelentés és ha van, akkor csak a mai vagy visszamenőleg is van. A vizsgálatot a tárolt nap után kell kezdeni, mert ugye a tárolt napon biztosan adott le jelentést. Ebből következik, hogy három fajta lehet a függvény visszatérési értéke. 0 ha már nem kell jeletést írni, 1 ha csak az aktuális napi jelentést kell kitölteni, és 2 ha több napra visszamenőleg vannak még kitöltetlen jelentések.
A Check_Missing_Report() függvény a következőképpen néz ki:
A másik alkalmazás pedig a jelentések feladása. Ha már nem kell jelentést írnia, akkor tud feladni rendelést, stb. és kap egy üzenetet, hogy már nem kell jelentést leadnia. Ha még van kitöltetlen jelentése, akkor két eset van. Ha a visszaadott érték 1, akkor megjelentik a napi jelentés form-ja és ki kell neki tölteni. Ha 2 akkor meg kell jeleníteni egy listát, amiben látja, hogy melyik napi jelentések hiányoznak még.
Ezt a listát a getMissing_Report_List() függvény adja vissza:
Egyik sem
Persze, be lehet rakni egy nagy függvénybe is, csak kezdj el azon gondolkozni, hogy fogod-e szeretni karbantartani a saját kódodat később.
Re
Tfh változik
Ilyen módszerrel egy csomó fölösleges munkát csinálsz magadnak.
Persze ....