Giriş Rust, Rust kitabını sunmasına rağmen anahtar kelimesini anlamakta zorlandım. Kendime "Bu sorunu yaşayan tek kişi ben miyim?" diye sordum. Hızlı bir Google araması yalnız olmadığımı doğruladı. mut Sonuç olarak anahtar kelimesinin detaylı açıklamasını sunmak amacıyla bu yazıyı yazmaya karar verdim. Bu makale Python veya JavaScript gibi üst düzey dillerden gelenlere yöneliktir. mut Değişkenler Rust'ta değiştirilemeyen bir değişken oluşturmak için basitçe yazmanız yeterlidir . Çok basit. Daha sonra değiştirilebilecek bir değişken oluşturmak istiyorsanız, anahtar sözcüğünü sonra eklemeniz yeterlidir. Rust'ın niyetlerin netliğini teşvik eden yararlı bir geleneği var. let x = 1337 mut let anahtar sözcüğünün eklenmesi, başkalarına bu değişkenin kodun başka bir yerinde değiştirileceğini bildirir. Tamam aşkım. mut Hadi görselleştirelim. Burada iki değişken var, ve . let mut x = 1337 let y = 42 Referanslar Şu anda her şey basit. Ancak referanslarını kullanırken işler biraz karışmaya başlar. Biraz oluşturalım. mut let mut x = 1337; let y = 42; let x_ref = &mut x; let y_ref = &y; İki referans oluşturdum (veya Rust açısından "ödünç aldım"). Bunlardan biri değiştirilebilir bir referans, diğeri ise salt okunur bir referanstır. Bunun için yine bir şema oluşturalım. Verilen şemada 2'si referans olan 4 değişkenim var. Her iki referans değişkeni de değişmezdir ve sonra anahtar sözcüğüne sahip değildir; bu, onların işaret ettiği şeyi değiştiremeyeceğim anlamına gelir. Ancak yine de referans verdikleri değeri değiştirebilirim. let mut *x_ref = 777; Bunu yazarsanız Rust derleyicisi şikayet etmeyecek ve değeri (ref'in kendisi değil) olarak değişecektir. Ancak şemada değişkenlik seçeneğinden yoksun olduğunu gösteren kırmızı bir kare var. Peki neden atıfta bulunduğu değeri değiştirebilirim? x 777 x_ref Let şemasına geri dönelim. let x_ref = &mut x İlk beyaz blok şu adı içerir: . İkincisi bana o değişkende saklanan tür hakkında bilgi veriyor. Tam haliyle, herhangi bir örtülü tür açıklaması olmadan aşağıdaki gibi yazabilirim: x_ref let x_ref: &mut i32 = &mut x; Bunu şu şekilde yorumlayabilirim: adında, tutacak ve bunu değişkenindeki değerine hemen başlatacak oluşturalım. x_ref i32 değiştirilebilir bir referans x i32 değiştirilebilir referansla değişmez bir değişken Bu, işaret ettiği değeri değiştirebileceğim ancak referansın değerini (veya adresini) değiştiremeyeceğim anlamına gelir. Başka bir deyişle, şöyle bir şey yazamam: let x_ref: &mut i32 = &mut x; let mut z = 0; x_ref = &mut z; // Not allowed! Şemalar açısından yukarıdaki kod bloğunda okun gösterdiği yönü değiştirmek istiyorum. Ancak değişkeni değiştirilebilir olsa bile oku değiştiremiyorum çünkü sorun değişmezliğinde yatıyor. z x_ref Ok yönünü değiştirmek için değişkeninde saklanan adresi değiştirmem gerekiyor. Ancak değişken değişmez olduğundan bunu yapamam. x_ref Hadi yapalım! let mut x: i32 = 1337; let mut x_ref: &mut i32 = &mut x; // I've added mut before x_ref let mut z = 0; x_ref = &mut z; // Allowed! Burada çevresinde çok fazla örneği var, değil mi? Bunları anlatalım. x_ref mut : adında değiştirilebilir bir değişken oluşturuyorum, bu da değerini daha sonra değiştirebileceğim anlamına geliyor. let mut x_ref x_ref : Değişkenin tipindeki bazı değerlere değişken referans(lar) içereceğini belirtiyorum. &mut i32 i32 : değişkenini ödünç alıyorum (referans alıyorum). &mut x x Daha sonra adında bir değişken oluşturdum ve ona değerini atadım. Daha sonra yazdığımda yalnızca değerlerine referans tutabilen değişken bir değişken olduğunu anladığımı belirttim. z 0 x_ref = &mut z x_ref i32 tipi olduğundan adresini değişkenine atayabiliyorum. adresini elde etmek için sözdizimini kullandım. z i32 x_ref z &mut z Şema. Zihinsel Numara İfadedeki öğesine bir göz atın, biraz açık görünebilir, ancak… = let mut x_ref = &mut x; … Bunu, ifadeyi iki alt ifadeye bölen bir bölücü olarak görüyorum (özellikle 90 derece döndürürseniz): sol ve sağ. Sol taraf bilgi verirken sağ taraf bize bilgi verir. değişkenin kendisi hakkında değer hakkında Değeri değiştirmek için referans operatörünü kullandığımda... * *x_ref = 100; ... değişkeninin değerini değiştirmiyorum. Bunun yerine referans aldığı değeri değiştiriyorum. x_ref x_ref Değiştirilemez Referanslar Daha önce sık sık kullanıyordum. Peki ya bazılarını atlarsam? mut let i = 1; let j = 2; let mut k = &i; Burada değerini değiştirebilir miyim? Bölücü tekniğini kullanarak cevaplamak oldukça basittir. değerini değiştirebilirim (sol tarafta görüyorum), ancak değer (sağ tarafta) değişmez bir referanstır (burada yok). i k mut i mut Öyleyse… let i = 1; let j = 2; let mut k = &i; k = &j; // This is legal. *k = 3; // This is not. Şema. Çözüm Bu makalede anahtar sözcüğünün ve referanslarının nüanslarını inceledik. bir referans ile referansı tutan değişken bir arasında bir ayrım olduğunu unutmayın. Bizim numaramız mı? mut Değişken değişken Rust'taki ödevleri daha iyi anlamak için işaretini zihinsel ayırıcı olarak kullanmak. Bu basit görselleştirme birçok karışıklığı ortadan kaldırabilir. = Mutlu kodlama!