A Cairo alaptára egy Array típust valósít meg.
Hasonló a más programozási nyelvekben megszokott tömbtípusokhoz, de néhány lényeges különbséggel:
Array típus végéhez lehet hozzáadni, és hatékonyan csak az elejéről lehet eltávolítani.Tömböket az ArrayTrait::new függvénnyel és az array! makróval is létrehozhatsz:
let empty: Array<u32> = ArrayTrait::new();
let one_to_four = array![1, 2, 3, 4];
Az elemeket az ArrayTrait::append függvénnyel adhatod hozzá a tömbhöz:
let mut num_array = array![1, 2, 3, 4];
num_array.append(5);
// -> [1, 2, 3, 4, 5]
Az elemeket az ArrayTrait::pop_front függvénnyel távolíthatod el a tömbből:
let mut one_to_four = array![1, 2, 3, 4];
one_to_four.pop_front();
// -> [2, 3, 4]
A Cairo emellett bevezet egy Span típust, amely az Array „pillanatképeként” viselkedik.
Minden Array átalakítható Span típussá a ToSpanTrait::span függvénnyel:
let one_to_four = array![1, 2, 3, 4];
let one_to_four_span = one_to_four.span();
// -> [1, 2, 3, 4]
Egy tömb Span típussá alakítása nagyon hatékony, mert a Span valójában csak egy adatszerkezet, amely lehetővé teszi a Cairo számára, hogy „rálásson” a tömb egy szakaszára, és semmilyen módon nem módosítja azt.
Azzal, hogy egy tömböt Span típussá alakítasz, a Cairo több műveletet tesz lehetővé, mint amit az Array típuson közvetlenül megengedne, például egy elem eltávolítását a span elejéről.
let one_to_four = array![1, 2, 3, 4];
let mut one_to_four_span = one_to_four.span();
one_to_four_span.pop_back();
// -> [2, 3, 4]
Figyeld meg, hogy a one_to_four_span változót a mut kulcsszóval kellett módosíthatóvá tennünk ahhoz, hogy meghívhassuk a pop_back metódust, amely úgy módosítja a spant, hogy lerövidíti a tömbnek azt a szakaszát, amelyre a span „rálát”.
Leendő varázslóként Elyse-nek gyakorolnia kell néhány alapvető dolgot.
Van egy kártyapaklija, amit szeretne mozgatni.
Hogy egy kicsit könnyebb legyen, csak az 1-től 10-ig terjedő kártyákat használja.
A kártyapaklit egy Array reprezentálja: a pakli alja a tömb elején, a teteje pedig a tömb végén van.
Valósítsd meg az insert_top függvényt, amely a pakli egy másolatát adja vissza úgy, hogy a megadott új kártya a pakli tetejére kerül.
let stack = array![5, 9, 7, 1];
insert_top(stack, 8);
// -> [5, 9, 7, 1, 8]
Valósítsd meg a remove_top_card függvényt, amely a pakli egy másolatát adja vissza, miután eltávolította annak felső kártyáját.
Ha a megadott pakli üres, akkor az eredeti paklit kell visszaadni, változatlanul.
let stack = array![3, 2, 6, 4, 8];
remove_top_card(stack);
// -> [3, 2, 6, 4]
Valósítsd meg az insert_bottom függvényt, amely a pakli egy másolatát adja vissza úgy, hogy a megadott új kártya a pakli aljára kerül.
let stack = array![5, 9, 7, 1];
insert_bottom(stack, 8);
// -> [8, 5, 9, 7, 1]
Valósítsd meg a remove_bottom_card függvényt, amely a pakli egy másolatát adja vissza, miután eltávolította annak alsó kártyáját.
Ha a megadott pakli üres, akkor az eredeti paklit kell visszaadni, változatlanul.
let stack = array![8, 5, 9, 7, 1];
remove_bottom_card(stack);
// -> [5, 9, 7, 1]
Valósítsd meg a check_size_of_stack függvényt, amely ellenőrzi, hogy a pakli mérete megegyezik-e a megadott stack_size értékkel vagy sem.
let stack = array![3, 2, 6, 4, 8];
check_size_of_stack(stack, 4);
// -> false
Ahhoz, hogy megértsd, miért nem olyan egyszerű a Cairoban a tömbökkel dolgozni, mint más programozási nyelvekben, érdemes szem előtt tartani, hogy a Cairo egy változtathatatlan memóriamodellt használ: ha egyszer egy memóriacellába írtak, azt soha többé nem lehet felülírni, csak olvasni belőle.
A nyelv némileg elfedi ezt a tulajdonságot, és lehetővé teszi, hogy a fejlesztők úgy deklarálják és használják a változóikat, mintha azok változtathatók lennének.
Bár mindez kicsit megnehezíti a kódírást, különösen az olyan kódét, amely az Array típust használja (beleértve a ByteArray-t is, amely a háttérben valójában egy „bájtokból álló tömb”), ez teszi lehetővé, hogy bizonyítható programokat írjunk, amelyeket még nem megbízható gépeken is nyugodtan futtathatunk, így a kompromisszum bőven megéri.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.