Öznitelikleri Ruby Koduyla Kullanma

Herhangi birine bak nesne yönelimli kod ve aşağı yukarı aynı kalıbı takip ediyor. Bir nesne oluşturun, o nesne üzerindeki bazı yöntemleri çağırın ve o nesnenin özniteliklerine erişin. Bir nesneyle başka bir nesnenin yöntemine parametre olarak iletmek dışında yapabileceğiniz başka bir şey yoktur. Ama burada endişelendiğimiz özellikler.

Nitelikler örnek değişkenler nesne nokta gösterimi ile erişebilirsiniz. Örneğin, Kişi Adı kişinin adına erişirdi. Benzer şekilde, genellikle aşağıdaki gibi özelliklere atayabilirsiniz: person.name = "Alice". Bu, üye değişkenlere (C ++ gibi) benzer bir özelliktir, ancak tam olarak aynı değildir. Burada özel bir şey yok, öznitelikler çoğu dilde "getters" ve "setters" kullanılarak ya da örnek değişkenlerden öznitelikleri alıp ayarlayan yöntemler kullanılarak uygulanır.

Ruby, özellik alıcıları ve ayarlayıcılar ile normal yöntemler arasında bir ayrım yapmaz. Ruby'nin sözdizimini çağıran esnek yöntemi nedeniyle hiçbir ayrım yapılmasına gerek yoktur. Örneğin, Kişi Adı

instagram viewer
ve Kişi Adı() aynı şeydir, isim sıfır parametreli yöntem. Biri bir yöntem çağrısına benziyor, diğeri bir öznitelik gibi görünüyor, ama ikisi de gerçekten aynı şey. İkisi de sadece isim yöntem. Benzer şekilde, eşittir işaretiyle (=) biten herhangi bir yöntem adı bir atamada kullanılabilir. İfade person.name = "Alice" gerçekten aynı şey person.name = (Alice), özellik adı ile eşittir işareti arasında boşluk olmasına rağmen, isim = yöntem.

Öznitelikleri kolayca kendiniz uygulayabilirsiniz. Setter ve getter yöntemlerini tanımlayarak, istediğiniz herhangi bir niteliği uygulayabilirsiniz. İşte bazı örnek kod isim bir kişi sınıfı için öznitelik. Bu adı bir @name örnek değişkeni, ancak adın aynı olması gerekmez. Unutmayın, bu yöntemlerle ilgili özel bir şey yok.

Hemen fark edeceğiniz bir şey, bunun çok fazla iş olduğudur. Sadece adında bir özellik istediğinizi söylemek çok şey yazmak isim erişen @name örnek değişkeni. Neyse ki, Ruby bu yöntemleri sizin için tanımlayacak bazı kolaylık yöntemleri sağlar.

İçinde üç yöntem vardır. modül sınıf bildirimlerinizin içinde kullanabileceğiniz bir sınıf. Ruby'nin çalışma zamanı ve "derleme zamanı" arasında bir ayrım yapmadığını ve sınıf bildirimlerinin içindeki herhangi bir kodun yalnızca yöntemleri tanımlamakla kalmayıp aynı zamanda çağrı yöntemlerini de kullanabileceğini unutmayın. Aranıyor attr_reader, attr_writer ve attr_accessor yöntemler ise, önceki bölümde kendimizi tanımladığımız ayarlayıcıları ve alıcıları tanımlayacaktır.

attr_reader yöntem kulağa nasıl geldiği gibi yapar. İstenen sayıda sembol parametresi alır ve her parametre için aynı adın örnek değişkenini döndüren bir "alıcı" yöntemini tanımlar. Böylece, bizim isim önceki örnekteki yöntemle attr_reader: ad.

Benzer şekilde, attr_writer yöntemi, kendisine iletilen her sembol için bir "ayarlayıcı" yöntemi tanımlar. Eşittir işaretinin sembolün bir parçası olması gerekmediğini, yalnızca özellik adının olması gerektiğini unutmayın. Biz değiştirebilirsiniz isim = çağrısıyla önceki örnekten yöntem attr_writier: ad.

Ve beklendiği gibi, attr_accessor ikisinin işi var mı attr_writer ve attr_reader. Bir özellik için hem bir ayarlayıcıya hem de alıcıya ihtiyacınız varsa, iki yöntemi ayrı ayrı çağırmamak ve bunun yerine aramak attr_accessor. Değiştirebiliriz her ikisi de isim ve isim = Tek bir çağrı ile önceki örnekten yöntemler attr_accessor: ad.

Ayarlayıcıları neden manuel olarak tanımlamalısınız? Neden kullanmıyorsunuz attr_ * yöntemleri her zaman? Çünkü kapsüllemeyi kırıyorlar. Kapsülleme, hiçbir dış varlığın, şirketinizin iç durumuna sınırsız erişime sahip olmaması gerektiğini belirtir. nesneleri. Her şeye kullanıcının nesnenin iç durumunu bozmasını önleyen bir arabirim kullanılarak erişilmelidir. Yukarıdaki yöntemleri kullanarak, kapsülleme duvarımızda büyük bir delik açtık ve bir isim için, açıkça geçersiz isimler bile olsa, her şeyin ayarlanmasına izin verdik.

Sıklıkla göreceğiniz bir şey, attr_reader bir alıcıyı hızlı bir şekilde tanımlamak için kullanılır, ancak nesnenin dahili durumu genellikle olmak istediği için özel bir ayarlayıcı tanımlanır okumak doğrudan iç durumdan. Ayarlayıcı daha sonra manuel olarak tanımlanır ve ayarlanan değerin anlamlı olup olmadığını kontrol eder. Ya da, belki de daha yaygın olarak, hiçbir ayarlayıcı tanımlanmamıştır. Sınıf işlevindeki diğer yöntemler, örnek değişkeni, alıcının arkasına başka bir şekilde ayarlar.

Şimdi bir yaş ve düzgün bir şekilde isim özniteliği. yaş özniteliği yapıcı yönteminde ayarlanabilir, yaş getter ancak yalnızca have_birthday yaşını arttıracak yöntem. isim özniteliğin normal bir alıcısı vardır, ancak ayarlayıcı adın büyük harfle yazıldığından ve İsim soyisim.

instagram story viewer