Numaralandırmaları ve kalıp eşleştirmeyi anlamak Rust'ta esastır. Her ikisini de uygulamak için etkili teknikleri keşfedin.

Rust, işlemleri gerçekleştirmek için dizeler, tamsayılar ve değişkenler gibi temel veri türlerinden çeşitli veri türleri sağlar. sayıları vektörler ve diziler gibi bileşik veri türlerine, yapılar ve numaralandırmalar gibi bileşik veri türlerine yönlendirin.

Numaralandırmalar (numaralandırmalar), haftanın günleri ve gökkuşağının rengi gibi sabit bir değer kümesinin temsiline izin veren bir veri türüdür. Numaralandırmalar, bir değişken için olası değerler sınırlı ve bilindiğinde kullanışlıdır.

Rust'ta Numaralandırmaları Tanımlama

Rust'ta numaralandırma bildirmek şuna benzer: C#'ta numaralandırmaları bildirmek. kullanacaksın Sıralama adın ardından gelen anahtar kelime ve numaralandırmaları tanımlamak için bir küme kaşlı ayraç. Kıvrımlı parantez içindeki olası varyantları (varlıkları) ayırıcı olarak virgülle tanımlayabilirsiniz.

İşte haftanın günleri için bir sıralama:

SıralamaHafta içi {
Pazartesi,
Salı,
Çarşamba,
Perşembe,
Cuma,
Cumartesi,
Pazar,
}
instagram viewer

bu Hafta içi enum haftanın günlerini temsil eder. bu varyantlar günün adlarıdır ve ilişkili değerleri yoktur. Ayrıca, numaralandırmanızın varyantları herhangi biri olabilir. Pas veri türü.

Sıralamada yol ayırıcı (::) operatörünü kullanarak varyant adını belirterek varyantlara erişebilirsiniz.

izin vermek gün = Hafta içi:: Pazartesi;

// "day" değişkeninin statik olarak yazılan versiyonu
izin vermek gün: Hafta içi = Hafta içi:: Pazartesi;

Kod, şuraya erişmek istediğinizi belirtir: Pazartesi Weekday numaralandırmasının varyantı.

Numaralandırmaların Varyantları ve Ayrımcıları

Bir numaralandırmanın varyantları, adı verilen tamsayı değerlerle ilişkilendirilir. ayrımcı. Varsayılan olarak, ayırt edici değerler sıfırdan başlar ve sonraki varyantlar için 1 artırılır; ancak, her varyant için özel ayırt edici değerler belirtmek mümkündür.

Burada, değer atanan varyantlara sahip bir Hafta içi numaralandırma örneği verilmiştir.

SıralamaHafta içi {
Pazartesi = 1,
Salı = 2,
Çarşamba = 3,
Perşembe = 4,
Cuma = 5,
Cumartesi = 6,
Pazar = 7,
}

Hafta içi gün listesinin, haftanın her gününü temsil eden yedi çeşidi vardır ve her günün kendilerine atanmış bir değeri (ayrımcı olarak adlandırılır) vardır. Varyantlar, haftanın ilk gününden son gününe kadar sıralanmıştır.

Varyant adını kullanarak ayırt edici değere erişebilirsiniz.

fnana() {
yazdır!("Pazartesi: {}", Hafta içi:: Pazartesi gibii32);
yazdır!("Salı: {}", Hafta içi:: Salı gibii32);
yazdır!("Çarşamba: {}", Hafta içi:: Çarşamba gibii32);
yazdır!("Perşembe: {}", Hafta içi:: Perşembe gibii32);
yazdır!("Cuma: {}", Hafta içi:: Cuma gibii32);
yazdır!("Cumartesi: {}", Hafta içi:: Cumartesi gibii32);
yazdır!("Pazar: {}", Hafta içi:: Pazar gibii32);
}

bu yazdır! Ayrımcıları yazdırmak için makro kullanılır. Her baskı! makro çağrısı iki bağımsız değişken alır: bir biçim dizesi ve bir değer. Biçim dizesi, çıktının nasıl biçimlendirileceğini belirtir; değer yazdırılan gerçek değerdir.

Bu durumda, format dizgisi, haftanın gününün adını içeren bir dizge sabit değeridir ve değer, i32 tamsayı türü.

Rust numaralandırmaları tamsayılar olarak temsil edildiğinden, ancak belirli tamsayı türü numaralandırmanın boyutuna bağlı olduğundan i32'ye açık atama gereklidir. Varsayılan olarak Rust, numaralandırmadaki tüm ayrımcıları temsil edebilecek en küçük tamsayı tipini atar. Ancak bu durumda, değerleri i32 tamsayıları olarak yazdırmak istiyorsunuz, bu nedenle onları açıkça dönüştürmeniz gerekiyor.

İşte çalıştırmanın sonucu ana işlev:

Rust'ta Eşleşen Desenler

Model eşleştirme, veri modellerini tanımlamak için kullanışlı bir Rust kontrol yapısı yapısıdır. Desen eşleştirme, aşağıdakilerle çalışırken özlü ve verimli kod yazmayı sağlar: gelişmiş veri yapıları veya karmaşık işlemler gerçekleştirmek.

kullanacaksın kibrit ardından gelen anahtar kelime => Sırasıyla desen için ayırıcı ve desen için işlem. Kalıp, hazır değerler, değişkenler ve işlev çağrıları dahil olmak üzere herhangi bir Rust ifadesi olabilir.

İşte bir eşleşme bildirimi örneği:

fnana(){
izin vermek x = 5;
kibrit X {
1 => yazdır!("bir"),
2 => yazdır!("iki"),
3 => yazdır!("üç"),

// kalıplardan hiçbiri eşleşmezse çalışır
_ => yazdır!("başka bir şey"),
}
}

bu ana işlev eşleşmeleri X birkaç desene karşı ve ardından değeri x'in değerine göre yazdırır. Alt çizgi (_) deseni, açıkça ele alınmayan durumlar için tümünü yakalama olarak kullanılan bir joker karakter desenidir.

Numaralandırmalar ve Model Eşleştirme

Numaralandırmalar ve kalıp eşleştirme, gelişmiş veri yapılarını tür açısından güvenli ve verimli bir şekilde ifade etmek ve bunlarla çalışmak için kullanışlıdır. Sabit bir değerler kümesi tanımlamak ve bu değerlerle çalışmak için kalıp eşleştirmeyi tanımlamak için numaralandırmaları kullanabilirsiniz.

İşte gökkuşağındaki renkler için bir sıralama:

SıralamaGökkuşağı {
Kırmızı,
Turuncu,
Sarı,
Yeşil,
Mavi,
çivit,
Menekşe,
}

Her varyantı Gökkuşağı enum gökkuşağının bir rengini temsil eder. Programın akışını gökkuşağının rengine göre kontrol etmek için desenleri değişkenle eşleştirmek için eşleştirme ifadesiyle desen eşleştirmeyi kullanabilirsiniz.

İşte Rainbow sıralamasından renk varyantını alan ve renge dayalı bir mesaj yazdıran bir işlev.

fnbaskı_rengi(renk: Gökkuşağı) {
kibrit renk {
Gökkuşağı:: Kırmızı => yazdır!("Renk kırmızı!"),
Gökkuşağı:: Turuncu => yazdır!("Renk turuncu!"),
Gökkuşağı:: Sarı => yazdır!("Renk sarı!"),
Gökkuşağı:: Yeşil => yazdır!("Renk yeşil!"),
Gökkuşağı:: Mavi => yazdır!("Renk mavi!"),
Gökkuşağı:: İndigo => yazdır!("Renk çivit mavisi!"),
Gökkuşağı:: Menekşe => yazdır!("Renk menekşe!"),
}
}

fnana() {
izin vermek renk = Gökkuşağı:: Mavi;
print_color (renk);
}

alabilirsin varyantlar asla inşa edilmez veya yukarıdaki kodu çalıştırmaya çalıştığınızda benzer uyarılar, çünkü Blue varyantı dışındaki diğer varyantlar bu kodda asla oluşturulmamıştır. Böylece, bu durumda kasıtlı olduğu için bu uyarıları güvenle yok sayabilirsiniz.

bu baskı_rengi işlevi, Rainbow enum türünden bir renk parametresi alır. Match deyimi, varyant adları aracılığıyla erişilen bir renk grubundaki renkle eşleşir. Ve son olarak, eşleşen renge göre mesaj yazdırılır.

Bir koşula dayalı birden çok dönüş değeri gibi karmaşık işlemler için kalıp eşleştirmeyi kullanabilirsiniz.

fnhesap_dalga boyu(renk: Gökkuşağı) -> u32 {
kibrit renk {

Gökkuşağı:: Kırmızı => 700,
Gökkuşağı:: Turuncu => 590,
Gökkuşağı:: Sarı => 570,
Gökkuşağı:: Yeşil => 510,
Gökkuşağı:: Mavi => 475,
Gökkuşağı:: İndigo => 445,
Gökkuşağı:: Menekşe => 400,
}
}

bu hesap_dalga boyu işlevi, Rainbow enum türünün bir renk değişkenini parametre olarak alır ve desenle eşleşen rengin dalga boyu olan işaretsiz 32 bitlik bir tamsayı döndürür.

Rust Ayrıca Özel Türler Oluşturmak İçin Yapılar Sağlar

Numaralandırmalar, özellikle alanların bilindiği ve kesin olduğu durumlarda, çeşitli işlemler için özel türleri tanımlamak için kullanışlıdır.

Rust, adlandırılmış alanlarla özel türler oluşturmak için kullanabileceğiniz yapılar da sağlar. Numaralandırmalardan farklı olarak yapılar, ayrı ayrı erişebileceğiniz ve değiştirebileceğiniz farklı türde alanlar tanımlamanıza izin verir.