Miután évekig töltötted ki az űrlapokat és vártál, végre megszerezted a banki engedélyedet. Ez azt jelenti, hogy hivatalosan is jogosult vagy arra, hogy saját bankot nyiss, hurrá!
Az elsődleges feladatod, hogy az informatikai rendszereket működésbe hozd. Egy kemény munkanap után már tudsz számlákat nyitni és zárni, valamint kezelni tudod a pénzfelvételeket és a befizetéseket.
Mivel nem volt kedved teszteket írni, meghívsz néhány barátot, hogy segítsenek tesztelni a rendszert. Öt perc után azonban az egyik barátod azt állítja, hogy elveszítette a pénzét! Bár biztos vagy benne, hogy a kódod hibamentes, elkezded átnézni a naplókat, hogy kivizsgáld a dolgot.
Ah, igen, ahogy sejtetted, a barátod a hibás! Megosztotta a tesztelési hitelesítő adatait egy másik barátjával, és együtt összeesküdtek, hogy ugyanazon a számlán párhuzamosan fizessenek be és vegyenek fel pénzt. Ki tenne ilyet?
Miközben te azzal érvelsz, hogy fizikailag lehetetlen, hogy valaki párhuzamosan férjen hozzá a számlájához, a barátod önelégülten közli, hogy a banki szabályok megkövetelik, hogy támogasd ezt. Így hát nincs párhuzamos banki támogatás, nincs élesítési jelzés. Sóhajtva feljegyzed magadnak, hogy holnap foglalkoznod kell ezzel. Ez legalább egy nappal kitolja az indulás dátumát, de hát...
A feladatod, hogy bankszámlákat valósíts meg, amelyek támogatják a nyitást, a zárást, a pénzfelvételt és a befizetést.
Mivel a bankszámlákat sokféle módon el lehet érni (interneten, mobiltelefonon, automatikus terheléssel), a banki szoftverednek lehetővé kell tennie, hogy a számlákat több szálból vagy folyamatból (a megnevezés a programozási nyelvedtől függ) párhuzamosan, biztonságosan el lehessen érni. Előfordulhat például, hogy sok befizetés és pénzfelvétel zajlik párhuzamosan; gondoskodnod kell róla, hogy ne alakuljon ki versenyhelyzet aközött, amikor kiolvasod a számla egyenlegét, és amikor beállítod az új egyenleget.
A számlát le is kell tudni zárni; a lezárt számlával szembeni műveleteknek sikertelennek kell lenniük.
A feladat megoldásához a következő függvényeket kell megvalósítanod:
openAccount - Minden teszt elején hívódik meg. Egy BankAccount-példányt ad vissza.closeAccount - Minden teszt végén hívódik meg.getBalance - Lekérdezi a bankszámla egyenlegét.updateBalance - A megadott összeggel növeli a bankszámla egyenlegét.Pénzfelvételnél az összeg negatív is lehet.
A bankszámla kezdeti egyenlege 0 legyen.
Egy dummy adatdeklaráció és a típusszignatúrák már a helyükön vannak, de rajtad múlik, hogy definiáld a függvényeket, és létrehozz egy értelmes adattípust, newtype-ot vagy típusszinonimát.
Ha segítségre van szükséged, íme néhány további forrás:
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Haskell nyelvet 107 feladat segítségével, valódi emberi mentorálással, mindez ingyen.