HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Ruby günlüğü - gün 5

En son Ruby'de nesne mantığını iyice kavramıştım ve öğrendiklerimi buraya not etmiştim. Bugün biraz değişkenler hakkında not tutacağım. Değişkenler; stringler, integerlar ve bilumum her türlü veriyi atayabileceğimiz yer tutuculardır. Yapılan atama işleminden sonra bellek içerisinde kendilerine yer edinirler ve çağırıldıkları taktirde kolayca kullanılabilirler.

serhat = 2011
puts serhat

Örneğin burada serhat isimli bir değişken yarattık ve ona 2011 değerini atadık. Daha sonra onu yazdırdığımızda 2011 sonucunu alacağız.

Her dilde olduğu gibi Ruby içinde bazı değişken tanımlama kuralları var. Örneğin değişkenler isimleri tek parçalı olmalıdır. Yani diyebiliriz ki değişken isimleri tanımlarken sözcük parçaları veya heceler arasında boşluk olmamalıdır.

  • serhatdundar
  • serhat2011dundar
  • serhat11dundar33
  • serhat dundar

Değişkenler yalnızca alfabe karakterleri ile veya alt çizgi ile başlayabilirler. Örneğin:

  • SerhatDundar
  • serhatdundar
  • _serhat
  • 1serhat
  • 7fx3dsmax

Değişken isimleri yalnızca rakamlar, alfabe karakterleri ve alt çizgi içerebilirler.

  • !serhatçokyasa
  • _buyukadamsinvesselam
  • ruby_guzel_bir_dil_sene2011
  • ah_ruby_vah_ruby_sen_neymissin_be_abi?

Değişkenler case-sensitive'dir. Yani büyük-küçük harf değişken tanımlarken önemlidir. Değişken isimlerinde Türkçe karakter kullanabilirsiniz, ancak kullanmanızı tavsiye etmem. Neden mi? Konuyu dağıtmayalım, buna sonra değiniriz.

Basit bir değişkenler örneği yapalım;

sene = 2011
olumyili = 1938
fark = sene - olumyili
print "Ataturk ", fark, " yildir aramizda yok. "
puts "Atam izindeyiz !"

sene değişkenimiz 2011 değerini tutuyor, olumyili değişkeni ise 1938 değerini tutuyor. fark değişkeni ise sene değişkeninden olumyili değişkenini çıkartıyor. Daha sonra ekrana bastırıyoruz.

Kötü Programcılık

Bir örnek daha;

x = 50
y = x * 200
z = x + y
puts z

Bu kod parçası sorunsuz çalışacaktır, ancak kötü programcılığa güzel bir örnektir.

Hata 1: Gereksiz olduğu halde değişken tanımlamak! Programın hantallaşması için gayet geçerli bir sebep. Peki hata nerede? "z" değişkeni bu program içerisinde gereksiz bir şekilde tanımlandı. Oysa ki kodumuz şu şekilde olmalıydı;

x = 50
y = x * 200
x = x+y
puts x

Hata 2: Kodumuzu gereksiz bir şekilde uzattık, kısatmalardan yararlanmadık. Oysa ki kodumuz şu şekilde olabilirdi;

x = 50
y = x * 200
x += y
puts x

Birçok dilde bu şekilde aritmetik kısatlama ifadeleri bulunur. Python'da buna bir örnektir. += operatörünü diğer aritmetik ifadeler içinde değiştirebilirsiniz -=, *=, /= gibi.

x += y nin anlamı, y'yi alıp x'e eklemektir.

Karşılaştırma İfadeleri ve Operatörleri

Mantık sahibi olmayan bir program, hesap makinasından farksızdır. Programlarımıza mantıklı düşünme imkanı sunmak için karşılaştırma operatörleri kullanırız.

Örnek 1:

x = 10
puts "cok ufak bir rakam bu" if x < 20
# Bu bir yazım stili

Şimdi burada durup bir inceleme yapalım. Eğer klasik yazım stillerine alışkın iseniz bu örnek size biraz garip gelmiş olmalı? Öncelikle puts yani ekrana yazdırma komutu çağırıyoruz, daha sonrasında şart ifadesini kuruyoruz? Ancak denediğimizde örnek çalışıyor. Nasıl yani?

Şöyle yazsak daha doğru olmaz mı?

x = 10
if x < 20
  puts "cok ufak bir rakam bu"
end

Bu noktada bir IDE kullanmanın önemini bir kez daha görüyoruz. Netbeans IDE hemen bana önerisini yaptı!

better-ruby-code-1

Yapılacak olan değişikliği de görebiliriz:

better-ruby-code-2

Fazla inat etmeden, IDE'nin lafını dinliyoruz.

Birde çift şartlı ifade örneği yapalım:

x = 10
puts "cok ufak bir rakam." if x > 0 && x < 20

Burada ki && ifadesinin anlamı aslında bildiğimiz andle özdeştir. Bu ifadeyi kaldırıp yerine and yazmanız durumunda değişen birşey olmayacaktır, ancak kısaltmalar iyidir demiştik.

Kodun Türkçe meali ise "Eğer x, 20'den küçük ve sıfırdan büyük ise ekrana "çok ufak bir rakam" yazdır." olacak.

Bir başka deyişle, "Eğer x 0 ile 20 arasında bir değer ise ekrana "çok ufak bir rakam" yazdır." olacak.

Peki işleri tersten yapmak istersek? "Değil" ifadesi nedir? Aslında oldukça basit unless ifadesi ile bunu sağlayabiliriz.

unless ifadesini if not olarak düşünebiliriz.

x = 21
puts "cok ufak degilsin." unless x > 0 && x < 20

Bu yöntem biraz tehlikeli.. Neden mi, buna şimdi değinmeyelim, ama tehlikeli olduğunu bilin.

Ruby'de "arada olma" durumu için güzel bir fonksiyon bulunmakta. Bu metodun adı between?. Sonda ki soru işaretini yanlışlıkla yazmadım, ismi between?.

x = 21
puts "bu deger araliklara uygun." if x.between?(10, 30)

Eşitlik (equality) durumu ise aynı Python'da olduğu gibi == ile kontrol edilir. Atama (assignment) için ise sadece bir tane eşittir (=) işareti kullanırız.

x = 24
puts "evet dogru!" if x == 24

Eşit olmama durumu ise yine Python'da olduğu gibi != ile kontrol edilir.

x=24
puts "esit degil" if x !=23

Bir de <=> ifadesi var, buna da kısaca göz atalım. x <=> y için; x ve y eşit ise 0 değerini döndürür, x daha büyük ise 1 değerini, y daha büyük ise -1 değerini döndürür.

|| ifadesi ile iki ayrık durumu denetletebiliriz, yani bu sefer arada olma gibi bir zorunluluk yok, örnekte daha anlaşılır olacak.

yas = 23
puts "Uye olmak icin yasiniz uygun degil" if yas > 70 || yas < 18

Çoklu kontrol işlemlerini parantezler ile sınıflandırabiliriz;

cinsiyet = "erkek"
yas = 21
puts "Yasiniz uygun degil beyefendi" if cinsiyet == "erkek" && (yas < 18 || yas > 70)

Bu günlük bu kadar. Başarılar.


Share this post!


Blog Comments powered by Disqus.