match İfadeleri

match bir değeri bir veya daha fazla seçeneğe göre kontrol etmek için kullanılabilir:

fn main() {
    let val = 1;
    match val {
        1 => println!("bir"),
        10 => println!("on"),
        100 => println!("yüz"),
        _ => {
            println!("başka bir şey");
        }
    }
}

if ifadeleri gibi match ifadesi de bir değeri geri döndürebilir (return);

fn main() {
    let flag = true;
    let val = match flag {
        true => 1,
        false => 0,
    };
    println!("{flag}'in değeri = {val}");
}
This slide should take about 5 minutes.
  • match kolları yukarıdan aşağıya doğru değerlendirilir ve eşleşen ilk kolun karşılık gelen gövdesi (body) çalıştırılır.

  • switch’in diğer dillerdeki çalışma şekli gibi durumlar(cases) arasında aşağıya geçiş (fall-through) yoktur.

  • Bir match kolunun gövdesi tek bir ifade (expression) veya bir blok olabilir. Teknik olarak bu aynı şeydir, çünkü bloklar da bir ifadedir, ancak öğrenciler bu noktadaki denk yapıyı (symmetry) tam olarak anlamayabilirler.

  • match ifadelerinin kapsamlı (exhaustive) olması gerekir, yani ya tüm olası değerleri kapsamaları ya da _ gibi varsayılan bir duruma (case) sahip olmaları gerekir. Kapsamlılık (Exhaustiveness) enumlarla gösterilmesi en kolay olanıdır, ancak enumlar henüz tanıtılmadı. Bunun yerine, en basit ilkel tür olan bool üzerinde eşleştirmeyi gösteriyoruz.

  • Bu slayt, desen eşleştirmesinden (pattern matching) bahsetmeden match’i tanıtıyor ve öğrencilere çok fazla bilgi yüklemeden sözdizimine (syntax) aşina olma şansı veriyor. Desen eşleştirmesi hakkında yarın daha detaylı konuşacağız, bu yüzden burada çok fazla detaya girmemeye çalışın.

Daha Fazlasını Keşfedin

  • match kullanımını daha da motive etmek için, örnekleri if ile yazılmış eşdeğerleriyle karşılaştırabilirsiniz. İkinci durumda, bir bool üzerinde eşleme (matching) yapmak, if {} else {} bloğuna oldukça benzer. Ancak birden fazla durumu kontrol eden ilk örnekte, bir match ifadesi if {} else if {} else if {} else ifadesinden daha az ve öz olabilir.

  • match ayrıca eşleşme korumalarını (match guards) da destekler, bu da eşleşme kolunun (match arm) alınıp alınmaması gerektiğini belirlemek için değerlendirilecek keyfi bir mantıksal koşul (condition) eklemenize olanak tanır. Ancak eşleşme korumaları hakkında konuşmak, bu slaytta kaçınmaya çalıştığımız desen eşleştirmesi (pattern matching) hakkında açıklama gerektirir.