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.
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/constké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.
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.