Fonksiyonlar

Fonksiyonlar fn anahtar sözcükleriyle bildirilirler. Argümanları değişkenlerdeki gibi tip açıklamalıdır, ve, fonksiyon bir değer döndürürse dönüş türü bir oktan sonra bildirilmelidir ->.

Fonksiyonlardaki son ifade dönüş değeri olarak kullanılacaktır. Alternatif olarak return ifadesi fonksiyonun içinden, döngülerin içinden ve hatta if ifadelerinden bile daha önce bir değer döndürmek için kullanılabilir.

Fonksiyonları kullanarak FizzBuzz(basit bir algoritma türü)'ı yeniden yazalım!

// C/C++'taki gibi fonksiyon bildirim sırası diye bir kısıtlama yok!
fn main() {
    // Fonksiyonu burada kullanabiliriz, ve sonra bir yerde bildiririz.
    fizzbuzz_to(100);
}

// Boolean değer döndüren fonksiyon
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Köşe durumu, erken dönüş
    if rhs == 0 {
        return false;
    }

    // Bu bir ifade, `return` anahtar kelimesi burada gerekli değil
    lhs % rhs == 0
}

// Değer döndürmeyen fonksiyonlar,aslında birim tipini döndürürler `()`
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// Fonksiyon `()` döndürdüğünde, dönüş tipi imzadan çıkartılabilir
fn fizzbuzz_to(n: u32) {
    for n in 1..n + 1 {
        fizzbuzz(n);
    }
}