Ruby tanınmış bir programlama dilidir. Sadelik ve üretkenliği artırmayı amaçlar. Aynı zamanda tamamen nesne yönelimli bir programlama dilidir. Ek olarak Ruby, okunması doğal ve yazılması kolay, zarif bir sözdizimi ile birlikte gelir.
Herhangi bir programlama, çeşitli veri türlerinin yönetilmesini gerektirir. Bir veri türü, belirli bir veri sınıfını tanımlar. Makineye programdaki verileri nasıl işlemesi gerektiğini söyler. Veri türleri, verilerle ne yapılabileceğini (gerçekleştirilebilecek işlemler dahil) belirlemek için çok önemlidir. Bu eğitimde, Ruby'de bulunan veri türlerini daha derinlemesine inceleyeceğiz. Ayrıca dinamik yazımı da keşfedeceğiz. Bu özelliği kullanarak Ruby, açıkça bildirmeden bir değişkenin veri türünü otomatik olarak belirleyebilir. Başlayalım!
Gereksinimler
Bu kılavuzda gösterilen adımları uygulamak ve hayata geçirmek için aşağıdaki bileşenlere ihtiyacınız olacak:
- Düzgün yapılandırılmış bir Linux sistemi. Şunun hakkında daha fazla bilgi edinin: CloudSigma üzerinde kişisel bir Ubuntu sunucusu kurma.
- Düzgün yapılandırılmış bir Ruby geliştirme ortamı. Şuna göz atın: Ubuntu üzerinde Ruby kurulumuna ilişkin resmi belgeler (APT kullanarak).
Ruby'deki veri türleri
Ruby, herhangi bir programlama dilinde karşılaşacağınız tüm yaygın veri türlerini barındırır: tamsayılar, ondalıklı sayılar, dizeler, diziler, semboller, hash'ler vb. Sırada, Ruby'nin çeşitli veri türleriyle nasıl çalışılacağına dair genel bir bakış sunacağız.
Adım 1 – Tamsayılar
Matematiğe benzer şekilde, tamsayılar bilgisayar programlamada tam sayılardır. Değer pozitif, negatif veya 0 olabilir. Değer aralığı aşağıdaki gibidir:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
Ruby'de tamsayıları deneme zamanı. İlk örnek, ekrana basit bir tamsayı yazdırmaktır:
|
1 2 |
print 99 print "\n" |
Sırada, bir tamsayı değişkeni ile çalışacağız. Burada, sample_int değişkeni bir tamsayı değeri (99) içerir ve print işlevi değişken değerini ekrana yazdırır:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
Tamsayılarla matematik işlemleri de yapabiliriz. Aşağıdaki örnek, iki tamsayının basit bir toplamını göstermektedir:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
Büyük sayılarla çalışırken, okumayı kolaylaştırmak için genellikle virgül (,) kullanırız. Örneğin, daha iyi okunabilirlik için bir milyon (1000000), 1,000,000 olarak yazılır. Virgül kullanımı yasak olsa da Ruby, alt çizgi ( _) karakterinin sınırlayıcı olarak kullanılmasına izin verir. Aşağıdaki örneğe bir göz atın:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
Alt çizgilerin kullanılması, özellikle büyük tamsayı değerleriyle çalışırken kodun okunabilirliğini artırır.
Adım 2 – Ondalıklı Sayılar
Bir ondalıklı sayı (veya kısaca float) bir gerçel sayıyı temsil eder. Matematiksel tanıma benzer şekilde, gerçel sayılar rasyonel veya irrasyonel olabilir. In Ruby, a float is basically a number containing a decimal point.
Ekrana bir float değeri yazdırmayı deneyelim:
|
1 2 |
print 55.66 print "\n" |
Sıradaki örnek, bir float değişkeni tanımlamayı göstermektedir:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
Float değerleri ve değişkenleri üzerinde çeşitli matematiksel işlemler de gerçekleştirebiliriz. Aşağıdaki örnek, iki float sayısının basit bir toplamını göstermektedir:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
Bir float ile bir tamsayıyı toplarsak ne olur? Elde edilen değer float olacaktır. Aşağıdaki örnekte, 55.0 tam bir sayı olmasına rağmen float olarak kabul edilir:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
Adım 3 – Boolean
Boolean'lar , matematiğin mantık dalının doğruluk değerlerini temsil eder. Ruby'de Boolean veri türleri iki değerle temsil edilir: true ve false:
-
Büyüktür
-
100 > 99: true
-
99 > 100: false
-
-
Küçüktür
-
500 < 999: true
-
999 < 500: false
-
-
Eşittir
-
10 == 10: true
-
9 == 99: false
-
Sayılara benzer şekilde, bir true veya false bir değişkendeki değer. Aşağıdaki örnek bu özelliği göstermektedir:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
Adım 4 – Stringler
Programlamada, bir string bir karakter dizisi (harfler, sayılar ve semboller) olarak temsil edilir. Ruby'de stringler tek tırnak ( ') veya çift tırnak ( ") içinde yer alır. Ruby'de string kullanımını zaten detaylı bir şekilde ele almıştık, bu yüzden bu kısa bir bölüm olacak.
Aşağıdaki örnek, Ruby'de temel bir hello world programıdır:
|
1 |
print "hello world!\n" |
Stringleri değişkenlerde de saklayabiliriz. Aşağıdaki örnek ayrıca string birleştirmeyi de içermektedir:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
Adım 5 – Diziler
Dizi (array), aynı veri tipindeki öğelerden oluşan sabit boyutlu bir koleksiyonu saklayabilen bir veri yapısıdır. Aynı veri tipindeki değişkenlerin bir koleksiyonu olarak da düşünülebilir. Çoğu modern programlama dilindeki en temel veri yapılarından biridir.
Ruby'de bir dizi şu şekilde tanımlanır:
|
1 |
[value_1, value_2, …, value_N] |
Şimdiye kadar tartıştığımız diğer tüm veri tiplerinden (integer, float ve string) bir dizi oluşturmak mümkündür. İşte bazı örnekler:
-
Integer: [-5, 0, 5]
-
Float: [-9.99, -6.99, -3.99, 0, 3.99]
-
String: [“the”, “quick”, “brown”, “fox”]
Aşağıdaki örnek tüm bu dizi türlerini uygulamaktadır:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
print fonksiyonu bir diziyle karşılaştığında, tüm diziyi ekrana yazdırdığına dikkat edin. Daha fazla kolaylık sağlamak için, dizilerle genellikle değişken olarak karşılaşırsınız. Kodu güncelleyelim:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
Şimdi, dizilerin bireysel öğeleriyle çalışabiliriz:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
Ruby'de dizilerin indeks değerinin 0 ile başladığını unutmayın.
Kolaylık sağlamak amacıyla, Ruby'deki diziler, ilk ve son öğeleri yazdıran .first ve .last metotlarıyla birlikte gelir:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
Ruby'de dizilerin ilginç bir özelliği daha vardır. Aynı anda farklı veri türlerini barındırabilirler. Örneğin, stringleri, sembolleri ve hatta diğer dizileri saklayabilirsiniz:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
Step 6 – Symbols
In Ruby, a symbol, bir etiket veya tanımlayıcı gibi davranan özel bir veri türüdür. Semboller değiştirilemez (immutable), yani değiştirilemezler. Semboller, herhangi bir değer atamadan değişken tanımlıyormuş gibi görünürler.
Here’s an example of a symbol:
|
1 |
:time_zone |
Genellikle semboller önemli bir şeyi tanımlamak için kullanılır. Ancak diğer durumlar için dizeler fazlasıyla yeterlidir.
Nesne yönelimli bir dil olan Ruby, dizeler aynı olsa bile her şeye benzersiz bellek konumuna sahip bir nesne olarak davranır (dizeler dahil). Ancak, bir sembole başvurduğunuzda, programın her yerinde aynı nesnedir, yani aynı bellek konumudur.
Step 7 – Hashes
Bir hash, anahtar ve değerlerden oluşan sözlük benzeri bir koleksiyondur. Çoğu zaman hash'ler, örneğin bir kullanıcı hakkındaki bilgiler gibi ilgili verileri depolamak için kullanılır.
İşte bir hash için hızlı bir örnek. Bir kullanıcının kullanıcı adını ve şifresini içeren bir user_info hash'i oluşturduk:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
Bir anahtar-değer çiftinin değerlerini almak için anahtarı kullanmamız gerekir. Aşağıdaki örnek bu süreci göstermektedir:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
Ruby ayrıca biraz farklı sözdizimleri kullanarak bir hash tanımlamaya da izin verir ( : yerine =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
Bu sözdizimi yapısı, diğer dillerde kullanılan sözdizimine benzer, örneğin, JavaScript. Bu sözdizimi yapısında anahtarlar sembol olarak tanımlanır. Bu yüzden değere erişmek için "username" yerine şunu kullanıyoruz: username kullanıyoruz.
Dinamik Türleme
Bir değişken tanımlarken açıkça bir veri türü atamak zorunda olmadığımızı zaten fark etmiş olabilirsiniz. Bunun yerine, değişkenin değeri veri türünü belirler. Ruby, tür denetiminin çalışma zamanında gerçekleştirildiği dinamik türleme kullanır. Buna karşılık, statik türleme programlama dillerinde (örneğin C/C++) veri türleri derleme sırasında belirlenir.
Aşağıdaki örnekte, dyn_var değişkenine atanan tüm değerler geçerlidir:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
Dinamik türlemeli dillerde, farklı veri türlerini depolamak için mevcut bir değişkeni yeniden kullanmakta özgürüz. Burada, bu durumu göstermek için önceki örnek güncellenmiştir:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
Bu örneğin gösterdiği gibi, her yeni değer atandığında, dyn_var değişkeninin veri türünü anında değiştirir. Bir veri türünü diğerine dönüştürürken kullanışlıdır. Aşağıdaki örnek bunu göstermektedir:
|
1 2 3 4 |
print "enter length: " length = gets.chop length = length.to_f puts length |
Burada,
-
Klavye girişleri dize (string) olduğundan, length başlangıçta bir dizedir.
-
İstediğimiz değer bir ondalıklı sayı (float) olduğundan, dize değerini to_f yöntemini kullanarak ondalıklı sayıya dönüştürüyoruz.
-
Değer değişikliği nedeniyle, length değişkenine float veri türü atanır. Değerini ekrana yazdırdığımızda gördüğümüz şey budur.
İki farklı veri türünü birbirine karıştırmaya çalışırsak ne olur? Ruby bir hata verecektir. Bir göz atın:
|
1 |
print 9 + "77" |
Veri Türü Tanımlama
Ruby'de her şey bir nesne olarak ele alınır. Ruby'deki her nesne class metodu ile birlikte gelir. Çağrıldığında, bu metot kaynağın hangi veri türünde olduğunu söyler. İşte class metodunu kullanmaya yönelik bazı örnekler:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
Veri türünü belirlemenin bir başka yolu da kind_of? metodunu kullanmaktır. Bu metot, nesnenin veri türünü sorgulanan veri türüyle karşılaştırır ve bir Boolean değer döndürür. Aşağıdaki örnekte buna göz atın:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
Benzer şekilde, başka bir is_a? metodu daha vardır; bu metot veri türünü karşılaştırır ve bir Boolean değer döndürür. Tek fark metodun etiketidir. Ancak, geliştiricilerin okuması ve anlamlandırması biraz daha kolay olduğu için bu tercih edilebilir. Önceki örneği ile güncelleyin:is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
Son Düşünceler
Herhangi bir programlama diliyle çalışmak, o dilin desteklediği veri türlerini iyi anlamayı gerektirir. Bu kılavuzda, Ruby programlamasında kullanılan en yaygın veri türlerini inceledik. Tam sayıları (integer), ondalıklı sayıları (float), dizeleri (string), sembolleri (symbol), Boolean'ları ve hash'leri (örneklerle) ele aldık ve gösterdik.
Ruby'yi keşfetmenize yardımcı olacak blogumuzdaki diğer eğitimlere göz atın:
- Ubuntu 20.04 üzerinde RVM ile Ruby on Rails Kurulumu
- PostgreSQL ile Ruby on Rails Kurulumu
- Ubuntu 21.04 üzerinde Ruby on Rails Uygulaması ile MySQL Kullanımı
- CloudSigma PaaS'ı Keşfetmek: Ruby PaaS Barındırma Hizmetleri Nasıl Kullanılır?
Keyifli Kodlamalar!




































Yorumlar
Henüz yorum yapılmamış. İlk siz olun.