Ruby Sınıflarına Giriş

Ruby-Eğitim-Serisi

Merhaba arkadaşlar,  geçtiğimiz haftalarda Ruby’de Enumeratörler ve Döngülerden bahsetmiştik, bu haftaki dersimizde ise Ruby’de Sınıf(Class) kullanımına giriş yapacağız.

Bu dersimizde daha çok tanımlardan ziyade örnekler üzerinden gideceğiz. Hemen nasıl bir Sınıf(Class) oluşturabiliriz bunun üzerinde duralım.

Ruby’de sınıf oluştururken diğer dillerde olduğu gibi Class ön ekini kullanıyoruz ve ardından sınıfımızın ismini belirliyoruz. Kullanımını şeklini aşağıda görebilirsiniz.

Ekran Resmi 2014-12-25 12.27.52

Yukarıdaki kod satırlarında Araba isminde Sınıf oluşturduk.

Çoğu dilde olduğu gibi Ruby’de de bir Constructor’ımız var, bu Constructor Ruby’de Initialize olarak tanımlanıyor.

Ekran Resmi 2014-12-25 12.39.22

Yukarıdaki kod satırlarında Araba isminde bir Sınıf oluşturduk ve Constructor‘ında bir adet renk isminde sınıf değişkeni tanımladık.

Not: Ruby’de sınıf içerisinde kullanacağımız değişkenlerde değişkenin önüne @ işareti koymamız gerekiyor. Bu değişken sınıfın örnek değişkenleri olarak tanımlanıyor.

Ekran Resmi 2014-12-25 12.47.33

Şimdi oluşturduğumuz bu sınıftan yeni bir instance üretelim.

Not :Ruby’de diğer dillerdeki new ön eki ile değil de Sınıf’a eklenen new metodu ile yeni bir Instance üretiliyor ve ardından ilgili Constructor’a yönlendiriliyor.

Artık Sınıfımızı oluşturduk ve içine de bir adet değişken tanımladık şimdi Instance‘ını oluşturduğumuz objeden belirlediğimiz renk değişkenini getirmesini isteyelim.

Ekran Resmi 2014-12-25 12.51.52

Yukarıdaki kod satırlarında, oluşturmuş olduğumuz Araba sınıfının 1 adet Instance‘ini aldık ve oluşan yeni obje yardımıyla renk değişkenine ulaşmaya çalıştık.

Az önceki örnekte Ruby’nin bize göstereceği herhangi bir değer olmayacak çünkü hata ile karşılaşacağız. Ruby’de Sınıflara gönderdiğimiz tüm yönergeler aslında bir metod beklentisi içindedir.  Yani doğrudan Sınıf içindeki değişkenlere erişimimiz yoktur. Nasıl erişim sağlayacağımıza aşağıda bir göz atalım.

Ekran Resmi 2014-12-25 13.33.58

Evet arkadaşlar şimdi yukarıdaki kod satırlarının çıktısı ‘kırmızı’ olacak, çünkü az öncede bahsettiğimiz gibi oluşan yeni Instance aracılığı ile renk değişkenini istediğimiz zaman Ruby, metod beklentisi içerisindeydi, bizde sınıfımızın içerisine renk isminde bir metod tanımlayarak geriye renk ismindeki değişkenimizi göndermesini sağladık.

Yukarıda bahsettiğimiz konuları baz alırsak aklımıza şöyle bir soru gelebilir, “Acaba oluşturduğum her bir değişken için, dışarıdan ulaşılmasını istiyorsam getter ve setter larını yazmak mı zorundayım ?”, Bu soruya Ruby “Hayır değilsiniz.” diyerek bize aşağıdaki kullanımı öğretiyor. 🙂

Ekran Resmi 2014-12-25 13.38.33

Evet yukarıda da gördüğünüz gibi artık attr_accessor ifadesini kullanarak renk değişkenine ulaşılabilmesi ve dışarıdan düzeltilebilmesini sağlamış olduk. Burada attr_accessor ile beraber attr_reader ve attr_writer ifadeleri de var. Eğer attr_reader ile beraber değişken adımızı verirsek değişkenimiz sadece dışarıdan okunabilir olacaktır, attr_writer ifadesini kullanırsak da sadece dışarıdan yazılabilir durumda olacaktır.

Ruby’de sınıfların içinde belirlenen tüm metodlar var sayılan olarak public tanımlanırlar. Eğer metodlarımız üzerinde herhangi bir private veya protected işlem yapmak istersek aşağıdaki kullanımı tercih edebilirsiniz.

Ekran Resmi 2014-12-25 13.49.31

Yukarıdaki kod satırlarında da gördüğünüz gibi private ifadesinin altındaki tüm metodlar private olacaktır.

Ruby’de static metod tanımlamak da oldukça kolay, hemen kodumuzu yazalım ve incelemeye başlayalım.

Ekran Resmi 2014-12-25 13.56.52

Yukarıdaki kod blogunda da gördüğünüz üzere metodumuzun başına self. ifadesini ekleyerek metodumuzun static olmasını sağlayabiliyoruz.

 

Evet arkadaşlar bu haftaki dersimizin de sonuna geldik. Derslerimizin yazılı içeriği, çektiğimiz videoların özeti niteliğinde olabiliyor ve bazen yazılı olarak ifade edemeyeceğimiz konular da ortaya çıkabiliyor, bu yüzden videoları da izleyerek derslere devam etmenizi tavsiye ederim.

 

Onur Eren Elibol Yazar Hakkında

  • Mert Demirok

    Ruby eğitimi güzel olmuş.Devamını bekliyoruz. Teşekkürler…