Miről szól ez a kvíz?

Ez a lecke a "Nyelvi alapok" modul eddigi anyagát teszteli: a toolchain telepítését, a Cargo alapparancsait, a println!-t és a kommenteket, a let/mut/shadowing/const páros(oka)t, az alaptípusokat és az összetett típusokat (tuple, array, String vs &str), végül az if/match/ciklusok és a range-ek olvasását — tehát főleg az előző, "Vezérlés: if, match, loop" lecke anyagára épül.

Nincs elvárás, hogy mindent hibátlanul tudj — a lényeg, hogy lásd, hol vannak a bizonytalan pontjaid, mielőtt továbblépnénk az ownershipre.

Tipp

Próbáld meg papíron vagy fejben megválaszolni a kérdést, mielőtt kinyitod a megoldást — így sokkal többet ér a gyakorlás.

Kérdések

1. Melyik parancs futtatja a programot fordítás után?

A) cargo check B) cargo build C) cargo run D) rustup update

Megoldás

C) A cargo run lefordítja (ha szükséges), majd futtatja a programot. A cargo build csak fordít, a cargo check csak hibákat keres futtatás/bináriskészítés nélkül, a rustup update pedig a toolchaint frissíti.

2. Hol deklaráljuk egy projekt függőségeit?

A) main.rs B) Cargo.lock C) Cargo.toml D) rustup.toml

Megoldás

C) A Cargo.toml a projekt "receptje": itt szerepelnek a metaadatok és a [dependencies] szekcióban a crate-függőségek. A Cargo.lock-ot a Cargo generálja, azt nem kézzel szerkesztjük.

3. Mit ír ki ez a program?

fn main() {
    let name = "Rustacean";
    let count = 3;
    println!("{name} x{count} = {}", count * 2);
}
Megoldás

Rustacean x3 = 6

A {name} és {count} a változó nevét felhasználó rövidített formázás, a harmadik {} pedig a count * 2 kifejezés kiszámított értékét helyettesíti be.

4. Fordul ez a kód? Ha nem, miért?

fn main() {
    let x = 5;
    x = x + 1;
    println!("{x}");
}
Megoldás

Nem fordul. Az x alapból immutábilis, ezért a x = x + 1 sor hibát dob. Javítás: let mut x = 5;.

5. Melyik állítás igaz a shadowingra?

A) Shadowinggal egy mut változó típusa is megváltoztatható anélkül, hogy új let kellene. B) Shadowing csak const-oknál működik. C) Shadowing új változót hoz létre ugyanazzal a névvel, a régi eltakarva marad. D) Shadowing futásidőben dob hibát, ha eltérő típusú az új érték.

Megoldás

C) A let újbóli használata ugyanazzal a névvel egy teljesen új, akár más típusú változót hoz létre; a korábbi ugyanazon néven többé nem elérhető, de nem is módosult. Ez fordításidőben, típushiba nélkül működik, ellentétben a mut egyszerű újraértékelésével.

6. Mi a különbség a let és a const között?

Megoldás

A const értékét fordításidőben kell ismerni, sosem mutábilis (a mut sem használható rá), és típusát mindig ki kell írni. A let futásidejű változót hoz létre, alapból immutábilis, de mut-tal módosíthatóvá tehető, és a típusa gyakran kikövetkeztethető.

7. Melyik NEM skalár típus a felsoroltak közül?

A) char B) bool C) i32 D) String

Megoldás

D) A String összetett (heap-allokált, változó hosszúságú) típus, nem skalár. A char, bool és i32 mind fix méretű skalár alaptípusok.

8. Mit ír ki ez a program?

fn main() {
    let point = (3, 4);
    let numbers = [10, 20, 30];
    println!("{} {}", point.0 + point.1, numbers[1]);
}
Megoldás

7 20

A point.0 és point.1 a tuple elemeit indexeli (3 és 4, összegük 7), a numbers[1] az array második, 1-es indexű eleme, ami 20.

9. Mit ír ki ez a program?

fn main() {
    let mut sum = 0;
    for i in 0..5 {
        match i % 2 {
            0 => sum += i,
            _ => {}
        }
    }
    println!("{sum}");
}
Megoldás

6

A 0..5 a 0, 1, 2, 3, 4 értékeket futja végig. A match csak a páros i értékeket adja hozzá a sum-hoz: 0 + 2 + 4 = 6.

Hogyan tovább?

Ha a legtöbb kérdésre magabiztosan válaszoltál, készen állsz a Rust egyik legfontosabb, egyedi fogalmára: a következő leckében az ownership és move kerül terítékre — arra a kérdésre keressük a választ, hogy ki "birtokolja" az adatot, és mi történik, ha egy értéket átadunk egy másik változónak.

Ha inkább bizonytalan voltál:

  • a Cargo-s és toolchain-es kérdéseknél nézd át a modul legelső leckéit,
  • a let/mut/shadowing/const kérdéseknél a "Nyelvi alapok" korai leckéit,
  • az if/match/ciklusos kódolvasási kérdéseknél pedig az előző, "Vezérlés: if, match, loop" leckét érdemes újra elolvasni, mielőtt továbbmész.
Megjegyzés

Nem baj, ha most még nem minden százszázalékos — az ownership-lecke sok mindent új megvilágításba helyez majd, és onnantól ezek a rutinok automatikussá válnak.