thiserror
Özel hata türleri
thiserror, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Özel Hatalar Neden Kullanılır?
Kitaplıklar, çağıranların belirli başarısızlıklara tepki verebilmesi için anlamlı hata türleri sunmalıdır. Bunları elle yazmak çok fazla kalıp kod gerektirir. thiserror kasası bu kodu sizin için üretir.
thiserror Ekleme
Bunu bir bağımlılık olarak ekleyin. Çalışma zamanında ek maliyeti olmayan bir türetme makrosu kasasıdır.
[dependencies]
thiserror = "1.0"Bir Hata Enum'u Tanımlama
Her varyantın farklı bir başarısızlığı temsil ettiği bir enum üzerinde Error türetin. #[error("...")] niteliği Display iletisini sağlar.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Alanları Mesaja Yerleştirme
İleti dizesi adlandırılmış veya konumsal alanlara başvurabilir; böylece hata metni bağlam taşır.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ConfigError {
#[error("missing key: {key}")]
Missing { key: String },
#[error("value {0} out of range")]
OutOfRange(i32),
}Display ve Error'ı Otomatik Oluşturma
Türetme işlemi hem Display'i (iletimlerinizden) hem de std::error::Error'ı otomatik olarak uygular. Elle impl blokları yazmanız gerekmez.
Kaynak Hatayı Sarma
#[from], From impl'i oluşturarak ? işlecinin temel hatayı sizin türünüze dönüştürmesini sağlar. #[source] ise nedeni belirtir.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AppError {
#[error("io failure")]
Io(#[from] std::io::Error),
#[error("parse failure")]
Parse(#[from] std::num::ParseIntError),
}? ile Kullanma
#[from] sayesinde ? işleci standart hataları otomatik olarak AppError türünüze dönüştürür.
fn read_number(path: &str) -> Result<i32, AppError> {
let text = std::fs::read_to_string(path)?; // io::Error -> AppError
let n: i32 = text.trim().parse()?; // ParseIntError -> AppError
Ok(n)
}Kaynak Zinciri
Bir hatayı sardığınızda thiserror, nedeni Error::source aracılığıyla sunar; bu da günlük kaydı ve hata ayıklama için eksiksiz hata zincirleri oluşturmayı sağlar.
transparent Hatalar
#[error(transparent)], hem Display'i hem de kaynağı sarılmış hataya iletir; bu, aracı bir varyant için kullanışlıdır.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}thiserror Ne Zaman Kullanılır?
Şu durumlarda thiserror kullanın:
- Bir kitaplık yazıyorsanız
- Çağıranların belirli hata varyantları üzerinde eşleştirme yapması gerekiyorsa
- Kararlı ve türü belirli bir hata API'si istiyorsanız
Yalnızca hataları üst katmanlara iletmek istediğiniz uygulamalarda anyhow genellikle daha basittir.
Varyantlar Üzerinde Eşleştirme
Hata gerçek bir enum olduğundan çağıranlar, her başarısızlık türüne farklı tepki vermek için üzerinde match kullanabilir.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Kısa Kontrol
#[from] niteliği bir thiserror enum'unda ne oluşturur?
Özet
thiserror kasasını öğrendiniz:
#[derive(Error)], Display ve Error impl'lerini oluşturur#[error("...")], alanları mesaja yerleştirerek iletileri tanımlar#[from], kaynak hatalardan?ile dönüşümü etkinleştirirtransparent, sarılmış hataya iletim yapar- Türü belirli kitaplık hata API'leri için idealdir
Sıkça Sorulan Sorular
“thiserror” dersi ücretsiz mi?
Evet — “thiserror” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“thiserror” dersinde ne öğreneceğim?
Özel hata türleri Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“thiserror” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.