Rust'ta hataları işlemenin birden fazla yolu vardır, bu yüzden tüm seçenekleri göz önünde bulundurduğunuzdan emin olun.

Hatalar kaçınılmazdır ve geçersiz kullanıcı girişinden ağ arızalarına, donanım arızalarına veya programlama hatalarına kadar çeşitli nedenlerle ortaya çıkabilir. Hata işleme, program çökmelerini veya veri bozulmasını önlemek için bu tür hataları algılama, raporlama ve bunlardan kurtarma işlemidir.

Etkili hata işleme, Rust'ta kritik öneme sahiptir. Beklenmeyen hataların ve arızaların üstesinden gelebilecek sağlam, güvenilir uygulamalar oluşturmanıza olanak tanır. Rust'ın hata işleme mekanizmaları, bakımı daha kolay olan esnek, güvenli programlar geliştirmenize olanak tanır.

Rust'ta Hata Türleri

Rust, kullanabileceğiniz zengin bir yazı sistemine sahiptir. hataları yetkin bir şekilde ele alın, türlerine göre. Rust'ın zengin hata türü sisteminin geleneksel hata işleme yaklaşımlarına göre sağladığı faydalar küçümsenemez. Hata tipi sistemi sağlar geliştirilmiş tip güvenliği, şekillendirilebilirlik, anlamlılık ve hata ayıklanabilirlik.

instagram viewer

İşte Rust'taki yaygın hata türlerinin bir listesi:

  • bu std:: io:: Hata type, dosya bulunamadı, izin verilmedi veya dosya sonuna ulaşıldı gibi G/Ç hatalarını temsil eder.
  • bu std:: sayı:: ParseIntError type, dizeden tamsayıya ayrıştırma işlemlerinde meydana gelen hataları temsil eder.
  • bu std:: seçenek:: YokHata type, boş Seçenekler paketinin açılmasından kaynaklanan hataları temsil eder.
  • bu std:: sonuç:: Sonuç type, herhangi bir hatayı temsil etmek için kullanabileceğiniz genel bir Sonuç türüdür.

Her hata türünün, onu belirli şekillerde ele almak için kendi yöntemleri ve özellikleri vardır.

İşte bir dosya okuma işlemi için Rust'ta hata işlemeye bir örnek:

kullanmak std:: fs:: Dosya;
kullanmak std:: io:: Oku;

fndosya_oku(yol: &str) -> Sonuç<Sicim, std:: io:: Hata> {
izin vermekmut dosya = Dosya:: açık (yol)?;
izin vermekmut içindekiler = Sicim::yeni();
file.read_to_string(&mut içindekiler)?;
Tamam(içindekiler)
}

bu dosya_oku işlev, belirtilen yoldaki dosyanın içeriğini okur ve onu bir dize olarak döndürür. bir döndürür std:: io:: Hata dosya açma veya okuma işlemi başarısız olursa. bu ? operatör hatayı yayar ve hatayı bir Sonuç.

Rust'ta Hata İşleme Mekanizmaları

Rust'ın güvenliğine katkıda bulunan temel özelliklerden biri, hata işleme mekanizmalarıdır. Rust'ta dört ana hata işleme mekanizması vardır: Sonuç yaz Seçenek yaz panik! makro ve Hata karakter.

Sonuç ve Seçenek türleri, yapılandırılmış hata işlemeye izin verir. Paniği kullanabilirsiniz! kurtarılamaz hataları işlemek için makro. Hata özelliği, özel hata türlerini ve özel hata işlemeyi tanımlamanıza olanak tanır.

Sonuç Türü

bu Sonuç type, başarısız olabilecek bir işlemin sonucunu temsil eden yerleşik bir türdür. İki varyantı vardır: Tamam başarıyı temsil eden ve bir değer içeren varyant ve hata, başarısızlığı temsil eder ve bir hata değeri içerir.

Bir dosyayı açmak ve içeriğini okumak için Sonuç türünü şu şekilde kullanabilirsiniz:

kullanmak std:: fs:: Dosya;
kullanmak std:: io:: başlangıç::*;

fndosya_oku(dosya yolu: &str) -> Sonuç<Sicim, std:: io:: Hata> {
izin vermekmut dosya = Dosya:: aç (dosya_yolu)?;
izin vermekmut içindekiler = Sicim::yeni();
file.read_to_string(&mut içindekiler)?;
Tamam(içindekiler)
}

fnana() {
izin vermek sonuç = dosya_oku("dosya.txt");

kibrit sonuç {
Tamam(içindekiler) => yazdır!("{}", içindekiler),
hata(e) => yazdır!("Hata: {}", e),
}
}

bu dosya_oku işlev dosya yolunu alır ve bir Sonuç hata. Dosya okuma veya açma işlemi başarısız olursa, işlev şu değeri döndürür: hata değer. Aksi takdirde, işlev şu değeri döndürür: Tamam değer. İçinde ana işlev, kibrit deyimi idare eder Sonuç değer ve dosya işleminin durumuna bağlı olarak sonucu yazdırır.

Seçenek Türü

bu Seçenek type, bir değerin varlığını veya yokluğunu temsil eden yerleşik bir türdür. bu Seçenek tipin iki çeşidi vardır. Bazı bir değeri temsil eder ve Hiçbiri bir değerin yokluğunu temsil eder.

Şu şekilde kullanabilirsiniz: Seçenek bir vektörün ilk öğesini almak için yazın.

fnget_first_elementKlon>(vec: Vec) -> Seçenek {
eğer vec.is_empty() {
Hiçbiri
} başka {
Bazı(vec.first().unwrap().clone())
}
}

fnana() {
izin vermek vec = vec![1, 2, 3];
izin vermek sonuç = get_first_element (vec);

kibrit sonuç {
Bazı(öğe) => yazdır!("{}", öğe),
Hiçbiri => yazdır!("Vektör boş."),
}
}

bu get_first_element işlev bir döndürür Seçenek tip. Vektör boşsa işlev şunu döndürür: Hiçbiri; aksi takdirde, fonksiyon geri döner Bazı vektörün ilk elemanını içerir. İçinde ana işlev, kibrit deyimi idare eder Seçenek değer. Eğer Seçenek değerlendirir Bazı, işlev ilk öğeyi yazdırır. Aksi takdirde işlev, vektörün boş olduğunu belirten bir mesaj yazdırır.

Panik! Makro

bu panik! makro, Rust'ta kurtarılamayan hataları işlemek için işlevsellik sağlar. çağrıldığında panik! makro, bir hata mesajı yazdırır ve programı sonlandırır.

İşte panik kullanmanın bir örneği! Bir işlevin geçersiz bağımsız değişkenlere sahip olduğunu belirtmek için makro.

fnbölmek(kâr payı: f64bölen: f64) -> f64 {
eğer bölen == 0.0 {
panik!("Bölen sıfır olamaz.");
}

temettü / bölen
}

fnana() {
izin vermek sonuç = böl(4.0, 0.0);
yazdır!("{}", sonuç);
}

bu bölmek işlev, bölenin sıfır olup olmadığını kontrol eder; bölen sıfır ise, işlev çağırır panik! hata mesajlı makro; aksi takdirde işlev hesaplar ve sonucu döndürür

bu ana işlevi, bölme işlevini tetiklemek için geçersiz bağımsız değişkenlerle çağırır. panik! makro.

İşte hata mesajı:

Hata Özelliği

bu Hata özellik, hata türlerinin davranışını tanımlayan yerleşik bir özelliktir. bu Hata özellik, özel hata türlerini ve özel hata işlemeyi tanımlamak için işlevsellik sağlar.

Dosya bulunamadı hatasını temsil eden özel bir hata türü tanımlamanın bir örneğini burada bulabilirsiniz.

kullanmak std:: hata:: Hata;
kullanmak std:: fmt;
kullanmak std:: io:: Oku;

#[türet (Hata Ayıklama)]
yapıDosya bulunamadı(Sicim);

ima fmt:: Ekran için Dosya bulunamadı {
fnfmt(&öz, F: &mut fmt:: Biçimlendirici) -> fmt::Sonuç {
yazmak!(F, "Dosya bulunamadı: {}", öz.0)
}
}

ima Hata için Dosya bulunamadı {}

fndosya_oku(dosya yolu: &str) -> Sonuç<Sicim, Kutu<din Hata>> {
izin vermekmut file = std:: fs:: File:: open (file_path).map_err(|e| FileNotFound(biçim!("{}", e)))?;
izin vermekmut içindekiler = Sicim::yeni();
file.read_to_string(&mut içindekiler)?;
Tamam(içindekiler)
}

fnana() {
izin vermek sonuç = dosya_oku("dosya.txt");

kibrit sonuç {
Tamam(içindekiler) => yazdır!("{}", içindekiler),
hata(e) => yazdır!("Hata: {}", e),
}
}

Özel hata türü Dosya bulunamadı yapı Tür bir dosya yolu içerir ve Dosya bulunamadı tip uygular Görüntülemek kullanıcı dostu hata mesajları döndürme özelliği ve Hata Bunun bir hata türü olduğunu belirtmek için özellik.

İçinde dosya_oku işlev, Dosya bulunamadı hata türü, bir dosya bulunamadı hatasını temsil eder ve map_err yöntem std:: io:: Hatasını bir FileNotFound hatasına dönüştürür. Nihayet, kutu type, işlevin Error özelliğini uygulayan herhangi bir türü döndürmesine izin verir.

bu ana işlev çağırır dosya_oku dosya yolu ile çalışır ve dosyayı bulursa içeriğini konsola yazdırır. Aksi takdirde, hata mesajını yazdırır.

İşte var olmayan bir dosyanın sonucu:

Program Güvenliği İçin Rust'ın Sahiplik Modeline Güvenebilirsiniz

Rust'ın muhteşem hata işleme mekanizmasıyla birlikte Rust, programlarınızın bellek açısından güvenli olmasını sağlamaya yardımcı olan bir sahiplik modeli de kullanır.

Rust, programınız çalışmadan önce derleme zamanında bir ödünç alma denetleyicisi ile sahiplik kurallarını sağlar.