
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ı.
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.