Kurzusok
/
Rust
Rust
/
Tanterv
/
Függvények
Fü

Függvények ebben a kurzusban: Rust

1 feladat

A(z) Függvények fogalomról

A függvények olyan kódrészek, amelyek egy vagy több utasítást vagy kifejezést tartalmaznak. A függvény opcionálisan visszaadhat egy értéket.

A Rust stílusa szerint a függvényneveknél snake case-t használunk, és a függvénydefiníciót az fn kulcsszó vezeti be. Például

fn do_nothing() {}

A zárójelek nulla vagy több paramétert fognak közre, amelyeket vessző választ el. A paraméter egy adott típusú értékhez kapcsolódó kötés, amelyet a függvénynek adunk át. Még ha nincsenek is paraméterek, a zárójelek akkor is kötelezőek a függvénydefinícióban. A paraméternek átadott tényleges értéket argumentumnak nevezzük.

A paraméterek és a visszatérési érték együttesét a függvény szignatúrájának nevezzük. A függvény szignatúrájában minden paraméternél fel kell tüntetni a típust.

A kapcsos zárójelek a függvény törzsét fogják közre: annak utasításait és kifejezéseit. Még ha a függvény nem tartalmaz is utasításokat vagy kifejezéseket, a kapcsos zárójelek akkor is kötelezőek a függvénydefinícióhoz.

A következő példában a függvény egy i32 típusú paramétert kap, a value névhez köti, majd kiírja.

fn print_integer(value: i32) {
    println!("{value:?}");
}

Figyeld meg a paraméter definícióját. Minden paraméter a name: Type formátumban van megadva.

A függvény értéket is visszaadhat. Alapértelmezés szerint az utolsó kifejezés értéke lesz a visszatérési érték. A következő példában a függvénynek egy i32 paramétere van, és annak kétszeresét adja vissza.

fn double_integer(value: i32) -> i32 {
    value * 2
}

A -> i32 azt jelzi, hogy a függvény egy i32-t ad vissza. A paraméterekkel ellentétben a visszatérési értéknek nincs neve.

A return kulcsszóval idő előtt is kiléphetsz a függvényből, így:

fn long_function() -> i32 {
    let some_condition = false;
    // code snipped
    if (some_condition) {
        return 0;
    }
    // more code snipped
    42
}

A const fn segítségével konstans függvényt definiálhatsz, amelyet fordítási időben is ki lehet értékelni.

const fn compute_data_checksum() -> u128 {
  const DATA: &[u8] = include_bytes!("my_big_data_file");
  // checksum implementation is left as an exercise for the reader
}

/// This checksum is used to validate that the user has not tampered with proprietary configuration.
pub const DATA_CHECKSUM: u128 = compute_data_checksum();

Mivel a konstans függvényeket fordítási időben is ki lehet értékelni, néhány olyan megkötés vonatkozik rájuk, ami a normál függvényekre nem. A const fn például csak más, szintén const-ként megjelölt függvényeket hívhat meg. Ha nem tartod be ezt a megkötést, fordítási hibát kapsz.

const fn multiply_integer(value: i32) -> i32 {
    use std::time::SystemTime;
    if SystemTime::now().elapsed().unwrap().as_nanos() == 0 { // this line errors
        value * 2
    } else {
        value * 3
    }
}

Léteznek névtelen függvények is; ezekkel a closures témakör foglalkozik.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg