Ruby'e Giriş

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım Dağıtımlar
Tarayıcılar Programlama Linux ve Oyunlar

Konu başlıkları

Temel Bilgiler

İlk Adımlar

Ruby'e Göz Atalım

Ruby keşfimize interaktif Ruby konsolu (irb) ile başlıyoruz. Terminali açıp şunu yazın:

irb --simple-prompt

resim:001.gif

Devam etmeden önce çalışan bir irb olduğundan emin olun.

Hesap Makinesi olarak Ruby

Temelde Ruby'i hesap makinesi olarak kullanabilirsiniz. Şunu deneyin:

resim:002.gif

Ruby kullanmayı amaçladığınız tüm temel aritmetik operatörleri anlar:

Sembol 	Anlam
+ 	toplama
- 	çıkarma
* 	çarpma
/ 	bölme

irb'den çıkmak için terminalde exit komutunu kullanınız.

resim:003.gif

Bu bilgiler etrafında biraz alıştırma yapabilirsiniz. Bunu deneyin:

resim:004.gif

3'ü 2'ye bölmeye çalıştığınızda ne olacağına dikkat edin:

resim:005.gif

Ne oldu? Ruby sayıları iki farklı tipte sayıları anlar:

  • Tam Sayılar
  • Ondalık Sayılar

Ruby'de Sayılar

Tam Sayılar

Tam sayı 1, 2, -5, vb. gibi bütün sayılardır. Sadece tamsayılar üzerinden işlem yaptığınız zaman, Ruby size tamsayı olarak cevap verir.

3/2 = 1.5 ,olur fakat tam sayı olmadığı için Ruby cevabı 1 olarak verir.

Ondalık Sayılar

Ondalık sayı 3.14, 1.5, 3.0, vb. ondalık hanesi olan sayılardır. Ondalık sayılar ile işlem yaptığınız zaman Ruby size ondalık sayı olarak cevap verir. Örneğin:

resim:006.gif

Diğer İşletmenler

Bu bölümü sonlandırmadan, diğer 2 operatörede bir göz atalım:

Sembol 	Anlam
** 	Kuvvet
% 	Kalan

resim:007.gif

Kalan operatörü "%"'nin ondalık sayılar ile nasıl sonuç verdiğine dikkat edin. Bu örnekte 5.1 sayısında 2 adet 2 vardır ve 1.1 kalır.

Çok Büyük ve Çok Küçük Sayılar

Ruby çok büyük ve çok küçük sayıları kullanmakta çok başarılıdır. 192349562563447 sayısını saklamaya çalıştığınızı düşünün.

Okumak bile çok zor, İngilizce olarak "192,349,562,563,447" şeklinde yazarsınız. Ruby de buna benzer şekilde altçizgi ile yazar:

resim:008.gif

Ne istiyorsunz 17_000_000_000_000_000_000 ya da 0.000_000_000_000_321 mı? Normalde yazmak için bilimsel gösterim kullanırsanız şu şekilde yazılır: 1.7 x 1019 ve 3.21 x 10-13. Yine, Ruby size bir alternatif sunar:

resim:009.gif

Alıştırmalar

  1. Bir yılda kaç saat var?
  2. On yıllık bir sürede kaç dakika vardır?
  3. Yaşınız saniye olarak kaça denk gelir?
  4. Bu işlemin sonucu nedir? 3.24 * ((34/2) - 54)/33.4 * 3.4? Parantez kullanabileceğinize dikkat edin.
  5. Ondalık sayılar ile tam sayıları birleştirdiğiniz zaman ne olacağını düşünüyorsunuz? Şu işlemleri gerçekleyiniz:
  • 3.0 / 2
  • 3 / 2.0
  • 4 ** 2.0
  • 4.1 % 2

Cevap ondalık sayı mı yoksa tam sayı mı?

Dizgeler

Şu ana kadar sayıları anlattık... fakat ya harfler, metinler,yazılar ne olacak?

Harflerin gruplaşmış hali olan kelimelere dizge (string) denir.Bazı dizgeler şu şekildedir:

  • "Hello."
  • "Ruby rocks."
  • "5 benim favori sayımdır... seninki nedir?"
  • "Snoopy says #%^?&*@!"

Dizgeler ile Yapabilecekleriniz

Ruby dizgeler ile bir çok etkileyici uygulama yapabilmenize olanak tanır.

resim:101.gif

Bunu hatırlamak için güzel bir örnek var: '"hi " * 3' '"hi " + "hi " + "hi "' ile aynı anlama gelir, her ikisininde çıktısı şu şekildedir: "hi hi hi ".

Eğer "hi ": içeriside boşluğu unutursak neler olacağına dikkat edin.

resim:102.gif

Şimdi neler olacağını görelim:

resim:103.gif

Ruby "1" 'i görürse onu dizge olarak anlar, sayı olarak değil.

Dizgeler ile Daha Fazla Yapabilecekleriniz

Aşağıda metinler ile daha fazla yabaliceğiniz etkileyici uygulamalar var:

resim:104.gif

Alıştırmalar

  • Aşağıdaki kod satırının ne yapacağını tahmin edin:
>> 'hello'.length + 'world'.length

Bunu deneyin.

  • Dizgeler ile ilgili daha başka örnekler yapın.

Eskiler için Yeni İsimler

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ıf vs Nesne

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


Class#method Gösterimi

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.

  • Bölme (/) tamsayılarda ve ondalık sayılarda aynı şekilde çalışmaz.
  • Toplama(+) tamsayılarda olduğu gibi dizgelerde de aynı şekilde çalışmaz.
  • Dizgeler tamsayıların ve ondalık sayıların sahip olmadığı bir çok yönteme sahiptir.( Örneğin capitalize, length, upcase, vb).

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.

Sınıflar Arası Dönüşüm

Yöntem İ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:

resim:201.gif

Alıştırmalar

  • 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?

Değişkenler

Değişken Nedir?

Değişken Ruby'nin belirli nesnelerle ilişkilendirdiği bir isimdir. Örneğin:

city = "Toronto"

Burada Ruby "Toronto" dizgesini city ismi(değişkeni) ile ilişkilendirir.

Ruby biri nesnelerden, diğeri onların isimlerinden oluşan iki masa yapar, ve Ruby city değişkeninden "Toronto" dizgesine doğru bir ok çizer gibi de düşünebilirsiniz.

Ruby city ismini oku takip ederek ulaştığı "Toronto" ile ilişkilendirir.

Dikkat: Değişken isimleri küçük harf ile başlamak zorundadır.

Değişkenler ile Çalışmak

Değişkenleri nesneleri yönettiğiniz yöntem ile yönetebilirsiniz.

resim:301.gif

Değişkenler bize bir avantaj sağlar, bilginin izini çok rahatlıkla sürmenize yardım eder. Şu yönergelerin verildiğini düşünelim:

  1. 2, 4 , 6 ve 8 birlikte topla
  2. Sonucu al ve 5'e böl
  3. 2,3 ve 4'ün çarpımlarını al
  4. Satır 3'te bulduğunuz cevaptan satır 2'de bulduğunuz cevabı çıkartarak sonucu bulunuz

Kesinlikle bunun için uzun bir ifade yazılabilir, ama bu şekilde yazılması daha basittir.

resim:302.gif

Kısayollar

Aşağıdaki örneklerde ifadeleri görebilirsiniz:

num1 = num1 / 5
num2 = num2 - num1

Bu tip ifadeler çok bilindiktir ve Ruby bunun için size bazı kısayollar önerir: Örnek Kısayol Anlam

var = var + 2 	var += 2 	var sayısına 2 ekleyin
var = var - 3 	var -= 3 	var sayısından 3 çıkarın
var = var * 6 	var *= 6 	var sayısını 6 ile çarpın
var = var / 2 	var /= 2 	var sayısını 2 ilebölün
var = var** 3 	var **=3 	var sayısının kübünü alın
var = var % 4 	var %= 4 	var sayısının 4'e göre modülünü alın

Bu örnekler şu şekilde yazılabilirler

resim:303.gif

Sabitler vs Değişkenler

Sabitler değişkenler gibidir. Tek fark olarak Ruby'e sabitlerin değerinin değişemeyeceğini söylüyorsunuz. Eğer bir sabitin değerini değiştirmek isterseniz Ruby sizi uyaracaktır.

Değişken tanımlar gibi sabit tanımlıyorsunuz, tek fark ilk harfinin büyük harf olması gerekiyor.

resim:304.gif

Not: City bir "sabittir"dir, bunun değeri hala değiştirilebilir. Sabit olmak sadece değerinin değiştiğinde Ruby'nin sizi uyarması anlamına gelir. Aşağıda görülecektir.

resim:305.gif

Alıştırmalar

  • Bu kısayolların dizgeler için çalışacağını düşünüyor musunuz? Bunu deneyiniz:
var = "hello "
      var = var + "world"

      var += "world"
  • Burada ne olacağını düşünüyorsunuz?
string = "hi"
      string *= 3

Deneyin ve sonucu nasıl açıklarsınız?

Program Yazmak

Tebrikler! Şuana kadar uzun bir yol kat ettiniz ve artık program yazmak için hazırsınız.

Hello World

Bir metin editörü açıp şu satırı giriniz:

puts "Hello World"

Dosyayı hello.rb olarak kaydedin ve şu şekilde çalıştırın:

ruby hello.rb

resim:401.gif

puts bir isimdir ve dizge sınıflı bir nesne yaratacaktır. Satır terminal ekranına yazılır..

Burada başka bir örnek var:

resim:402.gif

Ne yaptığımıza dikkat edin. name bir dizgedir. Daha önce gördüğümüz gibi bu diğer dizgelere eklenebilir.

Not: Ruby ile program yazdığınız zaman sadece puts komutu ile terminal ekranına yazı yazdırılabilir.

Diğer Bir Örnek

Son bölümde bunu irb'de yazmıştık:

resim:403.gif

Bunu bir dosyaya koyun. Daha sonra kaydedip çalıştırın.

resim:404.gif

Bilgisayarın "The answer is 20" diye yazmasını istersek. Şu şekilde kodlayabiliriz:

puts "The answer is " + num2  # --> Error

Sadece dizgeleri dizgelere ekleyebiliriz. Tam sayı num2'nin dizgeye dönüştürülmesine ihtiyacımız var. Bunu Integer#to_s yöntemi ile yapabileceğimizi biliyoruz:

resim:405.gif


Programları Çalıştırılabilir Hale Getirmek

Eğer Linux ya da Unix kullanıyorsanız, ruby programlarınızı çalıştırılabilir hale getirebilirsiniz, böylece onlarda diğer programlar gibi çalışabilirler.

İlk olarak Ruby'nin sisteminizde nerede kurulu olduğunu öğrenmeniz gerek.Terminalde 'which ruby' ile bunu öğrenebilirsiniz:

resim:406.gif

Önüne '#!' ( "sharp bang" olarak okunur) ekleyerek ve programınızın ilk satırı yaparak şu satırı ekleyin:

resim:407.gif

Şimdi 'chmod +x prog.rb' komutu ile programı çalıştırılabilir hale getirebilirsiniz.('+x' "çalıştırılabilir" anlamına gelir).

resim:408.gif

Uyarı: Bunu doğru bir şekilde yazdığınıza ve de programınızın ilk satırı olduğuna emin olun.

  • '#!' 'nin üzerinde boş bir satır varsa, bu çalışmayacaktır.
  • '#!' 'den önce bir boşluk varsa,bu çalışmayacaktır.

Alıştırmalar

  1. Bir önceki bölümün alıştırmalarını tekrar çözün fakat bu sefer irb kullanmayın.
  2. Şu programı sonlandırın:
     name = "Daniel"
     age = 24

Böylece program ekrana "Daniel 24 yaşındadır" iletisi yazsın.

İyi Programlama Teknikleri

Bir çok eğitici belge size nasıl program yazılacağını anlatır fakat, nasıl iyi program yazılacağını anlatmaz.

İyi değişken isimleri seçin. Burada değişken isimleri seçerken düşünmeniz gereken noktalar vardır.

Anlamlı isimler

Değişken ismi nesnenin içeridiği bilgiyi karşılamalıdır. Bazı örnekler var:

İyi Kötü
Age
Student
Name a
Count foo
Sum xwy
Product

Çoklu kelimeli isimler.

Değişken isimlerini birden fazla kelimeden seçmekten korkmayın. Sadece bunları okunur kılın.

Bunu yapmanın iki yolu var::

  • studentAge
  • student_age

Ben ikinci şıkkı tavsiye ederim fakat bu size kalmış.


irb Kullanın

irb kullanmaktan vazgeçmeyin. Size ilk olarak irb gösterdim çünkü bir sebebi vardı. Program yazarken irb penceresi açık olsun ve bazı durumlarda oraya gidip denemeler yapabilirsiniz.

Bu irb 'nin tasarım sebebidir. Eğer bunu bilgece kullanabilirseniz, bu sizi daha iyi programcı yapar.

Sabitleri Kullanın

Eğer bir değeriniz var ve bu değer hiç değişmeyecek ise herzaman sabitleri kullanın. Bu yol ile Ruby size bazı olası hataları yakalanızda yardımcı olur.

Bazı örnekler:

Pi = 3.14159265
    Electron_mass  = 9.109e-31
    Speed_of_light = 3e8
    Earth_Sun_distance = 5.79e10

sayısal değerleri direk olarak yazmayın. Kodunuzun daha açık olması için sabitleri kullanın.

Örneğin, dairenin alan formülü A=πr2 dir. Burada r yarıçapWhere r is the radius. Kodunuz bu formüle olabildiğince benzemelidir.

İyi Kötü
PI = 3.14159265 area = 3.1416*radius**2
area = PI*radius**2

Akış Kontrolü

Döngüler

Şimdi bilgisayar programlamanın etkileyici bir yönü olan döngüler ile tanışacaksınız.

Favori metin editörünüzü kullanarak, şunları yazınız:

resim:2001.gif

Bu kod parçalarının ne yapacağını tahmin edebilir misiniz?Dosyayı loops.rb olarak kaydedip çalıştırın.

resim:20002.gif

Gördüğünüz gibi döngü içeriği 4 defa çalıştırıldı.Bu Ruby'nin sunduğu en temel ileri döngüdür.

Sayma

Burada başka bir örnek var. Şimdi değişken bilgilerimizi kullanarak 1'den 5'e kadar olan sayıları ekrana yazalım.

resim:2003.gif

Integer#to_s yönteminin tamsayıları dizgeye çevirdiğini hatırlayalım, böylece bunu "count = " dizgesine ekleyebiliriz.

Bunu çalıştırdığınızda aşağıdaki gibi bir çıktı alırsınız:

resim:2004.gif

Sayıların Toplamı

1'den 11'e kadar olan tüm sayıların toplamını bilmek istediğimi düşünün. 1'den 11'e kadar olan sayıları elde etmeyi yeni öğrenmiştik,tek ihtiyacımız olan bu sayıları birbirleri ile toplamak.

resim:2005.gif

Buna benzer bir çıktı alırsınız:

resim:2006.gif

Çoklu Satır Durumu

Son örnekteki puts komutu bir dereceye kadar uzun ifadeleri destekler. Peki ya çok uzun bir satır yazarmak isterseniz ne olur?

Ters slash -\- kullanrak satırları parçalayabilirsiniz.irb'deki şu örneği inceleyiniz:

resim:2007.gif

Buradaki '=> nil' ifadefi basit olaral puts komutunun birşey döndürmediğini anlatır. Diğer bir deyişle eğer siz şunu yazsaydınız:

variable = puts "hello"

Böylece variable hiçbirşey ile son bulacaktı. Ve Ruby'nin hiçbirşey için olan nesnesi nil'dir.

puts komutunu ikiden daha fazla sayıda satır üzerinde parçalama yapılırsa neler olabileceğine dikkat ediniz. Öğrendiğimiz bilgileri kullanarak programımızdaki bu satırları tekrardan yazalım:

resim:2008.gif

Aslında bu çıktıyı istediğiniz gibi kullanabilirsiniz:

resim:2009.gif

İkaz. Programınızın satırlarını yukarıdaki gibi yapmanıza gerek yok. Ben yukarıdaki gibi yaptım çünkü bu şekilde daha güzel görünüyor. Bu programı çalıştırdığınızda şunları göreceksiniz:

resim:2010.gif

Uyarı: Ters slash '\' hersatırdaki son karakter olmalıdır. Eğer bir boşluktan sonra koyarsanız hata uyarısı alırsınız.

Daha Fazla Örnek

Geriye doğru saymayı deneyin.

Bazı noktaları açıklayalım. Burada bazı örnekler var.

Geriya Sayma

Bu programı yazın:

resim:2011.gif

Program bunu üretir:

resim:2012.gif

Değişken Sayıda Yinelemeyi Sayma

Bu döngüler değişkenler ile birlikte çalışır.

Bu örnekte bir sayının faktöriyel'ini hesaplayacağız. Bir sayının faktöriyeli olan n sayısı şunların çarpımıdır:

1 x 2 x 3 x ... x n

Bunun sembolü n!'dir. Bu örnekte faktöriyeli hesapladık.

6! = 6 x 5 x 4 x 3 x 2 x 1 = 720

Aşağıdaki uygulamayı yazıp programı çalıştırın:

resim:2013.gif

Alıştırmalar

  1. 1'den 1000'e kadar olan tamsayıların toplamı kaçtır?
  2. 10'dan 100'e kadar olan tam sayıların toplamı kaçtır?
  3. Buradda daha zor bir soru var.

Şu şekilde devam eden bir şarkı var:

On the first day of Christmas, my true love sent to me a partridge in a pear tree.
On the second day of Christmas, my true love sent to me two turtle doves and a partridge in a pear tree.
... 

Eğer bu Noel'in 12 günü içinde devam edecek olursa, gerçek aşkınız Noel boyunca kaç adet hediye yollar?

İpucu: Birbirlerinin içerisinde döngülere ihtiyacınız var).

Kullanıcı Girişi Yapmak

Kullanıcıyı selamlayan bir program yazalım. Kullanıcıya adınız sorcağız ve ardından 'hello' diyeceğiz.gets yöntemi ile dizge olarak kullanıcı girdisi alınır.

resim:3001.gif

Bunu kaydedip çalıştırın:

resim:3002.gif

Ne oldu? Niçin bir sonraki satıra gitti?

Bir sonraki satıra gitti çünkü yeni-satır karakteri girdiniz. Yeni satır karakteri de bastığınız Enter tuşudur.

irb 'yi çalıştırın ve gets satırını yazın. Bilgisayar isim için beklerken giriş yapın ve daha sonra neler olacağına dikkatle bakın:

resim:3003.gif

Dizgenin sonundaki "\n" karakteri de nedir?

"\n" burada yeni-satır karakteri simgeler. Bu karakter siz klavyeden Enter tuşuna bastığınızda yollanır.

İpucu: irb'yi kullanıp neler olduğunu nasıl incelediğimize dikkat edin. Programın sizin istediğiniz şekilde gitmediği durumlarda irb. kullanmak iyi bir çözüm yolu olabilir.

Sıkıntı Veren Yeni Satır!

Pekala, biz sorunun ne olduğunu biliyoruz. Peki bu sinir bozucu yeni satırdan nasıl kurtulacağız?

Ruby dizgileri bu gibi durumlar için String#chomp yöntemi ile birlikte gelir.irb 'ye geri dönelim ve uygulama içerisinde görelim.

resim:3004.gif

Güzel !String#chomp yöntemi size dizgeyi yeni satır olmadan geri verdi.

resim:3005.gif

name değişkeninin hala yeni satırı içerdiğine dikkat edin.still contains the new-line. chomped_name değişkeni ise biizn istediğimiz kısımdır. Fakat neden hala diğer değişken de ekranda görünüyor? Düzenlemek için şu yol kullanılır:

>> name = name.chomp

Artık name değişkeninden yeni satır ayrılmış oldu.

Programımıza Geri Dönüş

Artık programımıza geri dönebilir ve hatayı düzeltebiliriz.

resim:3006.gif

Burada Ruby hakkında düzenli bir açıklama var:

  1. chomp dizge yöntemidir(String#chomp).
  2. gets bir dizge ile döner.

Bundan dolayı,gets.chomp komutunu kullanarak String#chomp yöntemi ile gets komutundan geri dönecek olan dizgeyi ayırmak mümkündür. Diğer bir değişle şu şekilde yazılabilir:

resim:3007.gif

Bu güzel olmadı mı? Bu kodları yazıp çalıştırın:

resim:3008.gif

Alıştırmalar

  • İki kelime alıp bunları ters sırada ekrana aktaran bir program yazın.
  • Aşağıdaki gibi çıktısı olan bir program yazınız:

resim:3009.gif

Kullanıcının doğum tarihini şuanki tarihten yaşını çıkararak bulabilirsiniz. Bunları yaparken String#to_i yöntemini hatırlayın.

  • Bir cümle ve sayı soran program yazın, bu program girdiğiniz cümleyi ters olarak sayı kadar yinelemeli ekrana yazsın. Aşağıdakine benzer çıktı almalısınız:

resim:3010.gif

Bu programı yapmanın birden fazla yolu var, istediğiniz birini kullanın.

  • Bu satırın ne yapacağını düşünüyorsunuz?:
number  = gets.chomp.to_i

irb kullanarak deneyin.

  • Sayıyı kullanıcının girmesini gerektiren bir faktöriyel programı yazınız. Bu program aşağıdaki gibi çalışmalıdır:

resim:3011.gif

Koşullar

if durumu hangi koşulun sağlandığına bağlı olarak farklı eylemleri yapmanıza olanak tanır. Örneğin:

   drinking_age = 19
else
   drinking_age = 21
end

Bu şunu söyler:

  1. if city eşitse (==) "Toronto", drinking_age'i 19 olarak belirle.
  2. Diğer durumda (else), drinking_age'i 21 olarak belirle.

true ve false

Ruby true ve false için bir görüşe sahiptir. Bu en iyi şekilde örnekler ile açıklanabilir. irb'yi başlatıp şunları yazınız:

resim:4001.gif

if deyimi ifadenin ( örneğin 'city == "Toronto") true ya da false olmasına göre farklı değerler alır.

Uyarı: '=' ve '==' arasındaki farka dikkat edin. '=' atama operatörüdür. '==' karşılaştırma operatörüdür.

Çok Kullanılan Koşullar

Burada bazı en bilindik koşulların bir listesi var:

== eşit != eşit değil > büyük < küçük >= büyük veya eşit <= küçük veya eşit

Dizge Karşılaştırmaları

Bu operatörler dizgeler ile nasıl kullanılır?

ASCIIbetical sıralama nedir? ASCII karakter tablosu klavyedeki tüm karakterleri içerir. Bu karakterleri şu sıra ile listeler:

...012...789...ABC...XYZ...abc...xyz...

irb'yi çalıştırın ve şunları yazın:

resim:4002.gif

Not:irb'nin çalışmaları nasıl kolaylaştırdığına dikkat edin. Sizde bu gibi noktaları ilk defa irb üzerinde demenelisiniz. irb kullanımınızı bekleyen harika bir araçtır.

elsif

elsif birden fazla koşulu kontrol etmenize olanak tanır. Şu örneği inceleyin:

if age >= 60
    puts "Senior fare"
elsif age >= 14
    puts "Adult fare"
elsif age > 2
    puts "Child fare"
else
    puts "Free"
end

Örneği gözden geçirelim:

  1. Eğer age 60 ya da daha üzeri ise , yaşlılık ödeneği verilir.
  2. Eğer doğru değilse, fakat age 14 ya da daha üzeri ise, genç ödeneği verilir.
  3. Eğer doğru değilse, fakat age 2'den fazla ise, çocuk ödeneği verilir.
  4. Diğer durumlarda ödenek verilmez

Ruby bu koşullar kısmını birer birer göszden geçirir. İstediğiniz sayıda elsif deyimi kullanabilirsiniz.

Örnek - fare_finder.rb

Bazı noktaları daha açık hale getirmek için bu programı inceleyelim. Program yaşınızı soruyor ve cevabınızla ilintili olarak size bir ödenek tipi veriyor.

resim:4003.gif

Bunu yazın ve programı çalıştırın. Aşağıdaki gibi bir ekranla karşılaşmanız gerekir:

resim:4004.gif

Uyarı: elsif deyimini kullandığınız sıra için dikkatli olun. Sadece doğru olan ilk koşul çalıştırılacaktır. Bu örnek tehlikeyi örnekler:

age = 21

if age > 5
   puts "Older than 5"
elsif age > 10
   puts "Older than 10"
elsif age > 20
   puts "Older than 20"
elsif age > 30
   puts "Older than 30"
end

Bu programın çıktısı şudur:

$ ./example.rb
Older than 5
$

Burada age hem 10'dan hem de 20'den büyüktür. Sadece doğru olan ilk koşul çalıştırılmıştır.

Bu programın doğru şekilde yazılmışı şöyledir:

if age > 30
   puts "Older than 30"
elsif age > 20
   puts "Older than 20"
elsif age > 10
   puts "Older than 10"
elsif age > 5
   puts "Older than 5"
end


Alıştırmalar

  • Bu karakterleri ASCIIbetical sırada tekrardan düzenleyin:
2, u, A, 4, w, f, R, y
  • The ASCII tablosu klavyedeki tüm karakterleri içerir.irb kullanarak aşağıdaki tabloya uyan karakterleri bulunuz.
   1. 0'dan önce.
   2. 9'dan sonra fakat A'dan önce.
   3. Z'den sonra fakat a'dan önce.
   4. z'den sonra
  • Bir önceki sorudaki deneyiminizi kullanarak, karakter girdisi yapan ve aşağıdaki tablo içerisinde olup olmadığını söyleyen bir program yazın:
   1. 0'dan önce.
   2. 9'dan sonra fakat A'dan önce.
   3. Z'den sonra fakat a'dan önce.
   4. z'den sonra.

Prgoramı şu karkaterler için test edin:

$, +, ?, <, -, ~, :, %, ^, {, [

While Döngüleri

Artık koşulları biliyorsunuz, sıra diğer bir tip döngüye bakmaya geldi: while döngüsü.

Bu tip döngü şimdiye kadar gördükleriniz içerisindeki en güçlü olanıdır. Fakat bu döngü koşulları anlamış olmanızı gerektirir. En temel kullanımı şu şekildedir:

while cond
   ...
end

Burada cond son bölümde gördüğümüz bir koşuldur.

Sayma

Burada basit bir örnek var:

resim:5001.gif

Bu programa bir göz atalım:

  1. count değişkeni 0 olarak belirleniyor.
  2. count değişkeni < 10 olduğu sürece döngü içerisinde kalınıyor.
  3. Döngü içerisinde ekrana bir mesaj yazıyoruz ve count değişkenine 1 ekliyoruz. Artık count değişken değeri 1 oldu.
  4. count değişkeni < 10 olduğu sürece aynı işlemler tekrarlanıyor.

Bu count değişken değeri 10 oluncaya kadar tekrar ettirilir. Böylece döngümüzün çıkışı şu şekilde olur:

resim:5002.gif

Diğer bir değişle while döngüsü koşul doğru olduğu sürece döngüyü tekrar ettirir.ue. Bu sebepten dolayı ismi while

2'nin Kuvvetleri

'n.defa'. yineleme ile çok zor olan bazı uygulamalar while döngüsü ile çok basit bir şekilde gerçeklenebilir.

1000'den küçük olan 2'nin en büyük kuvvetini bilmek istediğimizi düşünün. Bu while döngüsü ile çok kolay bir şekilde yapılabilir:

resim:5003.gif

resim:5004.gif

'n.defa'. yineleme ile ne kadar zor olduğunu düşünün.

Alıştırmalar

  • Son programı tekrardan yazın, bu defa program en yüksek sayıyı sordun ve buna bağlı olarak da 2'nin kuvvetini hesaplasın.

resim:5005.gif

  • Aşağıdaki programı çalıştırın ve girdi olarak 1e10 yazın. Ne olur?

Eğer String#to_i yöntemini kullanırsanız, "1e10" 1 olarak dönüştürülür. irb 'yi açıp bunu deneyiniz.

resim:5006.gif

1e10 sayısının ondalıksayı olduğunuz görürsünüz. Bu yüzden String#to_f yöntemini kullanmalısınız.

Daha Fazla Yapı

Diziler

Dizi nedir?

for döngüsü

Bazı Dizi Yöntemleri

Adımlayıcılar

Döngü Olarak Adımlayıcılar

Tam Sayı Adımlayıcılar

Dizi Adımlayıcılar

Alıştırmalar

Çırpılar

Çırpı Nedir?

Bazı Çırpı Yöntemleri

Çırpı Adımlayıcıları

Alıştırmalar

Çeviren : Tutku " Titus" Dalmaz
Wiki'ye Aktaran : Alper " Xalphas" Orus