ProgramlamaRust geliştirici

Rust'ta dize okumak ve sayılara dönüştürmek (örneğin, String'den i32'ye) nasıl gerçekleştirilir? parse() metodunu kullanırken hangi sorunlar vardır ve dönüşüm hatalarını nasıl düzgün bir şekilde işleyebiliriz?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Rust'ta bir dizeyi sayıya dönüştürmenin standart yöntemi parse() metodudur. Bu, FromStr trait'ini uygulayan türlere uygulanabilir, örneğin String veya &str'yi i32, f64 ve diğerlerine dönüştürmek için.

Örnek:

let num: i32 = "42".parse().unwrap();

Ancak yanlış bir dize durumunda bir hata oluşur (Result::Err). Uygulamanın çökmesini önlemek için sonucu match ile işlemek önemlidir:

let input = "abc"; match input.parse::<i32>() { Ok(n) => println!("Sayı: {}", n), Err(e) => println!("Hata: {}", e), }

Parse metodu, türün belirsiz olduğu durumlarda türün açık bir şekilde belirtilmesi için "turbofish" (::<i32>) üzerinden türü destekler.

Yanıltıcı Soru.

Soru: .parse()'i derleme esnasında tür belirtmeden çağırmak mümkün mü ve doğru bir sonuç alınabilir mi?

Sıklıkla verilen cevap: Evet, eğer dize bir sayı içeriyorsa.

Doğru cevap: Hayır, derleme esnasında dönüşüm yapılacak tür bilinmelidir. Eğer tür çıkartılamıyorsa (örneğin, daha sonra açıkça kullanılmıyorsa) derleyici hata verecektir.

Yanlış kod örneği:

let x = "10".parse(); // Hata: hangi türe parse edileceği belirsiz

Düzeltmek için turbofish kullanın:

let x = "10".parse::<i32>().unwrap();

Konunun inceliklerinden dolayı yaşanan gerçek hata örnekleri.


Hikaye

Konfigürasyonun parse edilmesi modülünde hata işleme olmadan .parse().unwrap() bırakıldı. Kullanıcı ayarındaki bir yazım hatası, tüm uygulamanın üretimde çökmesine yol açtı.


Hikaye

Bir projede geliştiriciler türü açıkça belirtmemişlerdi (turbofish kullanmamışlardı) ve ara değişken geçici olarak kullanılmadığı için derleyici türü çıkartamadı, bu da derleme aşamasında zorlayıcı bir hataya yol açtı.


Hikaye

Bir projede, bir dizeden büyük bir sayıyı parse etmek için yanlışlıkla parse::<u8> uygulandı ve bu da taşma hatasına yol açtı. Hata, birkaç hafta kullanımdan sonra ve verilerin kaybedilmesi sonrasında fark edildi.