Ruby daha önce kullandığımız öğeler için özel isimler kullanır. Örneğin ondalık sayıları anlatmak için Float kelimesini kullanır.
Daha farklı tanımlamalar:
Object:3 Sayısı ya da 'hello' dizgesi gibi sadece bir kısım veridir.
Class: Ruby tamsayılar,ondalık sayılar ve dizgeler gibi herşeyi sınıflara böler.
Method: Bunlar objecet'ler ile yapabileceklerinizdir. Örneğin tamsayıları birlikte toplayabilirsiniz, bu yüzden + bir yöntemdir.
Daha önce bildiğiniz şu sınıfları gördünüz:
| Eski İsim | Ruby Sınıfı |
|---|---|
| integer | Integer |
| decimals | Float |
| text | String |
Bir çok yöntem de gördünüz:
| Sınıf | Bazı Yöntemler |
|---|---|
| Integer | + - / * % ** |
| Float | + - / * % ** |
| String | capitalize, reverse, length, upcase |
Sınıflar ve nesneler arasındaki farkı anladığınızdan emin olun. Bir nesne bir parça veridir, sınıf ise veri tipidir.
Örneğin, 3 ve 5 farklı sayılardır. Bunlar aynı nesen değillerdir, fakar her ikisi de tamsayıdır bu yüzdende aynı sınıftadırlar.
| Nesne | Sınıf |
|---|---|
| 2 | Integer |
| -5 | Integer |
| 7.2 | Float |
| 3.14 | Float |
| 'hello' | String |
| 'world' | String |
Farklı sınıfların farklı yöntemleri olduğunu hatırlayın. Burada daha önce gördüğünüz bazı farklılıklar var.
Bu sebepten dolayı Class#method gösterilimini anlatmak istediğiniz yöntemi belirtmek için kullanırız. Örneğin Float#+ ve String#+.'dan ayırt etmek için Integer#+ 'i kullanabiliriz. Bunlara ek olarak String#upcase gösterilimi vardır ama Integer#upcase gösterilimi yoktur.
Ruby sınıflar arası dönüşüm için bazı yöntemlere sahip:
| Yöntem | Dönüşüm | |
|---|---|---|
| İlk | Son | |
| String#to_i | dizge | tam sayı |
| String#to_f | dizge | ondalık sayı |
| Float#to_i | ondalık sayı | tam sayı |
| Float#to_s | ondalık sayı | dizge |
| Integer#to_f | tam sayı | ondalık sayı |
| Integer#to_s | tam sayı | dizge |
Örnekler:
Ruby size nesnenin hangi sınıfa ait olduğunu söyleyebilir. Bunları irb de yazınız:
12.is_a?(Integer)
12.is_a?(Float)
12.is_a?(String)
'12'.is_a?(Integer)
'12'.is_a?(Float)
'12'.is_a?(String)
12.0.is_a?(Integer)
12.0.is_a?(Float)
12.0.is_a?(String)
Ne gibi farklılıklar gördünüz?
Bunları da girin.
12 + 12
'12' + '12'
'12'.to_i + 12
'12' + 12.to_s
12 * 12
'12' * 12
Umduğunuz sonuçları aldınız mı?
12, '12' ve 12.0 arasındaki farklılıkları nasıl açıklarsınız?