Geri Dön
Rust için adlandırılmış ve isteğe bağlı argüman önerisi
SiTech AI Team2 წთ. საკითხავი

Rust için adlandırılmış ve isteğe bağlı argüman önerisi

botahamec.dev'deki yazı, Rust'ın en can sıkıcı eksiğinin adlandırılmış ve isteğe bağlı argümanlar olduğunu savunuyor; Dart, C# ve TypeScript'i karşılaştırıp kendi pre-RFC'sini sunuyor.

botahamec.dev'deki yazı, Rust'ın en can sıkıcı eksiğinin adlandırılmış ve isteğe bağlı argümanların yokluğu olduğunu savunuyor. Yazar yazıyı kendi pre-RFC'siyle bitiriyor.

Diğer diller bunu nasıl çözüyor

Grafik arayüzler için tasarlanan ve bileşenlerinde çok sayıda isteğe bağlı parametre bulunan Dart, adlandırılmış parametreleri süslü parantezlere alıyor; varsayılan değerlere ve `required` niteleyicisine izin veriyor — yazar bunu ele alınan diller arasında en iyi çözüm sayıyor. C#'ta her parametre adlandırılabilir veya varsayılan değer alabilir, yeter ki bu değerler zorunlu parametrelerden sonra gelsin. TypeScript'te adlandırılmış parametreler tek bir anonim nesnenin çözümlenmesini gerektiriyor, yani alan adları iki kez yazılıyor; yazar bunu gereksiz laf kalabalığı sayıyor.

Bu eksikliğin Rust'a maliyeti

Rust'ta alışılmış çözüm, `Default` uygulayan ayrı bir parametre yapısı tanımlamak ve çağrıyı `..Default::default()` ile bitirmek. Yazara göre bu, TypeScript sürümünden bile kötü: türler anonim değil, türün kendi varsayılanından farklı değerler ayrı bir fonksiyon gerektiriyor ve yöntem ancak her parametrenin varsayılanı varsa işliyor.

Üç isteğe bağlı parametre için standart kitaplıktaki `HashMap`'in sekiz kurucusu var; aralarında `new`, `with_capacity` ve `_in` varyantlarıyla `with_hasher` bulunuyor ve fonksiyon sayısı üstel olarak artıyor. Sıralamayı karıştırmak da kolay: `fn print(text: &str, bold: bool, italics: bool, underline: bool)` içinde ikinci ve üçüncü argümanın yer değiştirmesi metni fark edilmeden kalın yapar.

Yazarın önerisi

Pre-RFC, adlandırmayı parametre adının önündeki `pub` anahtar sözcüğüyle isteğe bağlı hâle getiriyor: `fn print_labeled_measurement(pub value: i32, pub unit_label: char = 'm')`; böylece çağrı `print_labeled_measurement(value: 5)` olabiliyor. Adlandırılmış argümanlar konumsallardan sonra gelmeli, ancak kendi aralarında yeniden sıralanabilir ve varsayılan değer alabilirler: `const` fonksiyonlarda ifade sabit olmalı, normal fonksiyonlarda varsayılan örnekleme sırasında hesaplanır. Trait'ler adlandırılmış parametre kullanabilir, uygulamalar adları yinelemek zorundadır; fonksiyon işaretçileri ve `Fn` trait'leri konumsal kalır.

Diğer öneriler ve açık sorular

Yazar daha zayıf bulduğu önerileri de ele alıyor: yapı alanları için varsayılan değerler (artık Nightly Rust'ta; kendisi `feluments` adlı bir polyfill kitaplığı yazmış), dil ekibinin uygulanmasını fazla zor bulduğu yapısal kayıtlar, varsayılan değer yerine aşırı yükleme öneren uzun bir Rust Internals Forum pre-RFC'si, başında nokta olan sözdizimi ve C# tarzının kopyalanması. Adlar isteğe bağlı olduğu için güvenlik disiplin meselesi olarak kalıyor; öneriler Clippy lint'i ya da gelecek bir sürümde adları zorunlu kılmak. Açık kalanlar: argüman sırası, `pub` anahtar sözcüğü ve varsayılanların her zaman `const` olup olmaması.

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.