Cél és előfeltétel
A program először is értékekkel dolgozik: árral, darabszámmal, névvel vagy egy igen és nem közötti döntéssel. Ebben a leckében egy pékség rendelését számolod ki. A végére meg tudod mondani, milyen értéket állít elő egy kifejezés, és miért nem ugyanaz egy változó új értéke, mint egy új változó létrehozása. Programozási előismeret nem szükséges, de működő Rust telepítés igen; ehhez használd a telepítési útmutatót.
Hozz létre egy edition 2024 Cargo projektet, és a megoldásokat egymástól függetlenül másold a főprogram fájljába. Egy blokk mindig egy teljes program. Futtatáskor az állítások csendben maradnak, ha igazak; hibánál megállítják a példát. Most nem a látványos képernyőkimenet a cél, hanem a kiszámolt eredmény ellenőrizhetősége. Először papíron számolj, csak utána nyisd le a megoldást.
A név és az érték külön szerep
Egy változónév egy értékhez kötődik. A kötést a let kulcsszó hozza létre; a jobb oldalon álló szám vagy számolás adja a kezdő értéket. A jól megválasztott név megmutatja a mennyiség jelentését. A darabár és a rendelési darabszám lehet egyaránt egész szám, mégsem felcserélhető fogalom. A fordító a két jelentést magától nem ismeri, ezért a nevek és az ellenőrzések neked segítenek.
A Rust alapértelmezésben nem engedi ugyanannak a kötésnek az átírását. Ha változtatni akarsz, ezt a mut jelöléssel előre vállalod. A változtathatatlanság hasznos kérdést tesz fel: valóban időben változó állapotot tárolsz, vagy csak egy új számítás eredményének keresel nevet? Egy egyszerű árkalkulációnál gyakran tisztább minden részeredményt külön elnevezni.
Számolás típusokkal
A példákban az ár forintban megadott, nem negatív egész szám. Tudatosan kis értékeket választunk, és a számok típusát u32 jelöléssel rögzítjük. Ez nem korlátlan szám: nagy értékek összeadása vagy szorzása túlcsordulhat. A lecke feladataiban az ár legfeljebb ezer, a darabszám legfeljebb tíz, ezért az eredmények biztosan beleférnek. Későbbi valós programban a külső adatokat külön ellenőrizni kell.
A szorzás előbb történik, mint az összeadás; a zárójel láthatóvá teszi a kívánt csoportosítást. Egész számok osztásakor a tört rész elvész, így három egész kettővel osztva egyet ad. Pénznél ezért nem célszerű észrevétlenül tört összegeket előállítani. Ebben a leckében minden ár egész forint, nincs adózás vagy kerekítési szabály mögé rejtett további feltételezés.
Kifejezésből lesz eredmény
A kifejezés értéket állít elő. Egy kapcsos zárójelbe tett blokk is lehet kifejezés, ha az utolsó sorának eredményét adja tovább. Az utolsó sor végére tett pontosvessző más jelentést ad: ilyenkor a blokk eredménye az üres egységérték. Ne úgy gondolj a pontosvesszőre, mint tetszőleges díszre; azt is szabályozza, hogy melyik érték jut ki a blokkból.
A szövegbe írt szám még nem számolható mennyiség. A szövegliterált idézőjelek határolják, az egész számot nem. Most csak rögzített adatokkal dolgozunk; a felhasználótól érkező szövegek számmá alakítása későbbi feladat. Ez a szétválasztás megkönnyíti a hibakeresést: előbb legyen helyes a számolás, aztán kapcsolj hozzá bemenetet.
1. feladat: a rendelés alapára
Számold ki négy, egyenként kétszáz forintos péksütemény árát. Az alapárhoz adj hozzá százötven forint csomagolást. A darabárat, darabszámot és csomagolást külön nevezd el. A végeredményt ne csak kiírasd: ellenőrizd állítással. Ezután próbáld ki a nulla darabos esetet is, ahol ebben az egyszerű modellben a csomagolás díja továbbra is felszámítandó.
Megoldás
fn main() {
let darabar: u32 = 200;
let darab: u32 = 4;
let csomagolas: u32 = 150;
let osszesen = darabar * darab + csomagolas;
assert_eq!(osszesen, 950);
let nulla_darab = 0;
assert_eq!(darabar * nulla_darab + csomagolas, 150);
}
A nulla darabos ellenőrzés a leírt díjszabást rögzíti. Más üzleti szabály más eredményt kívánna; a számítás önmagában nem dönti el, mit kell számlázni.
2. feladat: új kötés és állapot
Indulj két lefoglalt hellyel, és egy új foglalás miatt növeld a számot háromra. Ehhez módosítható kötést használj. Utána új kötésben számold ki egy öt férőhelyes asztal szabad helyeit. Figyeld meg, hogy az asztal kapacitását nem kell módosíthatóvá tenni. A műveletek után mindkét eredményt ellenőrizd.
Megoldás
fn main() {
let kapacitas: u32 = 5;
let mut foglalt: u32 = 2;
foglalt += 1;
let szabad = kapacitas - foglalt;
assert_eq!(foglalt, 3);
assert_eq!(szabad, 2);
assert_eq!(kapacitas, 5);
}
A kivonás itt biztonságos, mert ismert és kicsi adatokat adtunk meg. Egy tetszőleges foglalási számot használó függvénynek már a kapacitás túllépését is kezelnie kellene.
3. feladat: értéket visszaadó blokk
Egy blokkban számold ki három, kétszáz forintos termék árát, majd adj hozzá száz forintot. A belső részeredménynek adj beszédes nevet, de a végső értéket a blokkból add ki. Ellenőrizd a hétszázas eredményt, majd külön állításban vizsgáld meg az egész osztás két példáját is.
Megoldás
fn main() {
let vegosszeg: u32 = {
let termekek = 3 * 200;
termekek + 100
};
assert_eq!(vegosszeg, 700);
let harom: u32 = 3;
let negy: u32 = 4;
assert_eq!(harom / 2, 1);
assert_eq!(negy / 2, 2);
}
A blokk utolsó sora pontosvessző nélkül adja tovább az összeget. A belső név a blokkon kívül nem használható; a külső kötés csak a kész eredményt őrzi meg.
Elfogadási feltételek
- A négydarabos rendelés eredménye 950, a nulla darabosé 150; mindkettőt futó állítás ellenőrzi.
- A foglalás módosítása után három foglalt és két szabad hely van, a kapacitás változatlan.
- A blokk eredménye 700, és a két egész osztási próba a tört rész elhagyását igazolja.
Továbblépés
Már külön tudod választani a neveket, értékeket és számításokat. A függvényekről szóló következő leckében ugyanezeket a számításokat bemenettel és visszatérési értékkel teszed újra felhasználhatóvá.