A makrók a Rust-programozó eszköztárának erős részét alkotják, és a példa alapú makrók viszonylag egyszerű módot kínálnak arra, hogy hozzáférj ehhez a lehetőséghez. Írjunk hát egyet!
Mi is az a makró? A Wikipédia így írja le:
A makró (a „macroinstruction” rövidítése, a görög μακρός »hosszú« szóból) a számítástechnikában olyan szabály vagy minta, amely meghatározza, hogy egy adott bemeneti sorozatot (gyakran karaktersorozatot) egy megadott eljárás szerint hogyan kell egy helyettesítő kimeneti sorozatra (szintén gyakran karaktersorozatra) leképezni. Azt a leképezési folyamatot, amely egy makróhasználatot egy adott sorozattá alakít át (példányosít), makrókiterjesztésnek nevezik.
Tanulságos! De hogy konkrétabbak legyünk: a makrók olyan különleges szintaxist jelentenek, amellyel kódot generálhatsz fordítási időben. A makrókat használhatod fordítási idejű számításokra, de gyakrabban csak egy újabb módot jelentenek arra, hogy absztraháld a kódodat. Például valószínűleg már találkoztál a println!() és a vec![] makróval. Mindkettő tetszőleges számú argumentumot fogad, ezért nem lehet őket egyszerű függvényként kifejezni. Ugyanakkor mindig bizonyos mennyiségű, teljesen szabványos Rust-kódra terjednek ki. Ha érdekel, a cargo expand alparanccsal megnézheted, milyen eredményt ad a makrókiterjesztés a kódodban.
A Rust makróiról bővebben a The Rust Book jó fejezetében olvashatsz.
A vec![] makróval tetszőleges hosszúságú Vec-et hozhatsz létre közvetlenül a kódban. A Rustban viszont nincs beépített mód arra, hogy közvetlenül HashMap-et hozz létre. Ezt úgy orvosolhatod, hogy megírsz egy hashmap!() makrót.
Például a könyvtárad egy felhasználója ezt írhatja: hashmap!('a' => 3, 'b' => 11, 'z' => 32). Ennek a következő kódra kell kiterjednie:
{
let mut hm = HashMap::new();
hm.insert('a', 3);
hm.insert('b', 11);
hm.insert('z', 32);
hm
}
Vedd figyelembe, hogy a maplit crate egy olyan makrót kínál, amely tökéletesen megoldja ezt a feladatot. Kérünk, hogy a saját megoldásodat írd meg ahelyett, hogy ezt a crate-et használnád; és mielőtt megnézed a forráskódját, előbb próbálkozz egyedül.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Rust nyelvet 99 feladat segítségével, valódi emberi mentorálással, mindez ingyen.