Örnek değişkenleri bir at işaretiyle (@) başlar ve yalnızca sınıf yöntemleri içinde başvurulabilir. Yerel değişkenlerden farklıdırlar, çünkü herhangi bir belirli dürbün. Bunun yerine, sınıfın her örneği için benzer bir değişken tablosu saklanır. Örnek değişkenleri, bir sınıf örneği içinde yaşar, bu örnek hayatta kaldığı sürece, örnek değişkenleri de olur.
Örnek değişkenlerine o sınıfın herhangi bir yönteminde başvurulabilir. Bir sınıfın tüm yöntemleri aynı örneği kullanır değişken tablo, her yöntemin farklı bir değişken tablosuna sahip olacağı yerel değişkenlerin aksine. Bununla birlikte, örnek değişkenlere ilk önce bunları tanımlamaksızın erişmek mümkündür. Bu bir istisna oluşturmaz, ancak değişkenin değeri sıfır ve Ruby ile birlikte çalıştırırsanız bir uyarı verilir. -w değiştirmek.
Bu örnek, örnek değişkenlerin kullanımını gösterir. Unutmayın ki mesele içerir -w meydana gelmesi durumunda uyarı yazdıracak olan Ayrıca, sınıf kapsamındaki bir yöntemin dışında yanlış kullanıma dikkat edin. Bu yanlış ve aşağıda tartışılmıştır.
Neden @Ölçek değişken yanlış mı? Bu, kapsam ve Ruby'nin işleri nasıl uyguladığı ile ilgilidir. Bir yöntemde, örnek değişkeni kapsamı, söz konusu sınıfın belirli örneğini ifade eder. Ancak, sınıf kapsamında (sınıfın içinde, ancak herhangi bir yöntemin dışında), kapsam sınıf örneği dürbün. Ruby sınıf hiyerarşisini örnekleyerek uygular Sınıf nesneler, yani bir ikinci örnek burada oynamak. İlk örnek bir örneğidir Sınıf sınıf, ve burası @Ölçek gidecek. İkinci örnek, TestClassve işte burada @value gidecek. Bu biraz kafa karıştırıcı olur, ama asla kullanmamayı unutmayın @örnek değişkenler yöntemlerin dışında. Sınıf genelinde depolamaya ihtiyacınız varsa, @@ class_variables, sınıf kapsamının herhangi bir yerinde (yöntemlerin içinde veya dışında) kullanılabilir ve aynı şekilde davranır.
Normalde örnek değişkenlerine bir nesnenin dışından erişemezsiniz. Örneğin, yukarıdaki örnekte, t.value veya t. 'değeri örnek değişkenine erişmek için @value. Bu kuralların kapsülleme. Bu, alt sınıf örnekleri için de geçerlidir; teknik olarak aynı tür olmalarına rağmen üst sınıfa ait örnek değişkenlere erişemezler. Dolayısıyla, örnek değişkenlere erişim sağlamak için, erişimci yöntemler bildirilmelidir.
Aşağıdaki örnek, erişimci yöntemlerinin nasıl yazılabileceğini gösterir. Ancak, Yakut bir kısayol sağlar ve bu örnek size yalnızca erişimci yöntemlerinin nasıl çalıştığını göstermek için var olduğunu gösterir. Erişimci için bir tür ek mantık gerekmedikçe erişimci yöntemlerini bu şekilde yazılmış görmek genellikle yaygın değildir.
Kısayollar, işleri biraz daha kolay ve daha kompakt hale getirir. Bu yardımcı yöntemlerden üçü vardır. Sınıf kapsamında çalıştırılmalıdır (sınıfın içinde ancak herhangi bir yöntemin dışında) ve yukarıdaki örnekte tanımlanan yöntemlere çok benzer şekilde yöntemleri dinamik olarak tanımlayacaktır. Burada sihir yok ve dil anahtar kelimelerine benziyorlar, ama gerçekten sadece dinamik olarak tanımlayan yöntemler. Ayrıca, bu erişimciler tipik olarak sınıfın en üstüne gider. Bu, okuyucuya sınıf dışında veya alt sınıflar için hangi üye değişkenlerinin kullanılabileceği hakkında anlık bir genel bakış sağlar.
Bu erişim yöntemlerinden üçü vardır. Her biri, erişilecek örnek değişkenlerini açıklayan sembollerin bir listesini alır.
- attr_reader - gibi "okuyucu" yöntemleri tanımlamak isim Yukarıdaki örnekteki yöntem.
- attr_writer - gibi "yazar" yöntemleri tanımlamak yaş = Yukarıdaki örnekteki yöntem.
- attr_accessor - Hem "okuyucu" hem de "yazar" yöntemlerini tanımlayın.
Örnek Değişkenleri ne zaman kullanılır?
Artık örnek değişkenlerinin ne olduğunu bildiğinize göre, bunları ne zaman kullanıyorsunuz? Örnek değişkenleri, nesnenin durumunu temsil ettiklerinde kullanılmalıdır. Öğrencinin adı ve yaşı, notları vb. Geçici depolama için kullanılmamalıdır, yerel değişkenler bunun içindir. Ancak, çok aşamalı hesaplamalar için yöntem çağrıları arasında geçici depolama için kullanılabilirler. Ancak bunu yapıyorsanız, yöntem kompozisyonunuzu yeniden düşünmek ve bunun yerine bu değişkenleri yöntem parametrelerine dönüştürmek isteyebilirsiniz.