Ruby'e Giriş
From Lapis Wiki
Bu makale NASIL bölümü serisinin bir parçasıdır
|
| MasaÜstü • Donanım • Ağ • 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
Devam etmeden önce çalışan bir irb olduğundan emin olun.
Hesap Makinesi olarak Ruby
Temelde Ruby'i hesap makinesi olarak kullanabilirsiniz. Şunu deneyin:
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.
Bu bilgiler etrafında biraz alıştırma yapabilirsiniz. Bunu deneyin:
3'ü 2'ye bölmeye çalıştığınızda ne olacağına dikkat edin:
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:
Diğer İşletmenler
Bu bölümü sonlandırmadan, diğer 2 operatörede bir göz atalım:
Sembol Anlam ** Kuvvet % Kalan
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:
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:
Alıştırmalar
- Bir yılda kaç saat var?
- On yıllık bir sürede kaç dakika vardır?
- Yaşınız saniye olarak kaça denk gelir?
- Bu işlemin sonucu nedir? 3.24 * ((34/2) - 54)/33.4 * 3.4? Parantez kullanabileceğinize dikkat edin.
- 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.
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.
Şimdi neler olacağını görelim:
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:
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:
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.
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:
- 2, 4 , 6 ve 8 birlikte topla
- Sonucu al ve 5'e böl
- 2,3 ve 4'ün çarpımlarını al
- 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.
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
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.
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.
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
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:
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:
Bunu bir dosyaya koyun. Daha sonra kaydedip çalıştırın.
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:
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:
Önüne '#!' ( "sharp bang" olarak okunur) ekleyerek ve programınızın ilk satırı yaparak şu satırı ekleyin:
Şimdi 'chmod +x prog.rb' komutu ile programı çalıştırılabilir hale getirebilirsiniz.('+x' "çalıştırılabilir" anlamına gelir).
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
- Bir önceki bölümün alıştırmalarını tekrar çözün fakat bu sefer irb kullanmayın.
- Ş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:
Bu kod parçalarının ne yapacağını tahmin edebilir misiniz?Dosyayı loops.rb olarak kaydedip çalıştırın.
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.
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:
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.
Buna benzer bir çıktı alırsınız:
Ç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:
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:
Aslında bu çıktıyı istediğiniz gibi kullanabilirsiniz:
İ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:
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:
Program bunu üretir:
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:
Alıştırmalar
- 1'den 1000'e kadar olan tamsayıların toplamı kaçtır?
- 10'dan 100'e kadar olan tam sayıların toplamı kaçtır?
- 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.
Bunu kaydedip çalıştırın:
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:
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.
Güzel !String#chomp yöntemi size dizgeyi yeni satır olmadan geri verdi.
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.
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:
Bu güzel olmadı mı? Bu kodları yazıp çalıştırın:
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:
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:
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:
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:
- if city eşitse (==) "Toronto", drinking_age'i 19 olarak belirle.
- 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:
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:
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:
- Eğer age 60 ya da daha üzeri ise , yaşlılık ödeneği verilir.
- Eğer doğru değilse, fakat age 14 ya da daha üzeri ise, genç ödeneği verilir.
- Eğer doğru değilse, fakat age 2'den fazla ise, çocuk ödeneği verilir.
- 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.
Bunu yazın ve programı çalıştırın. Aşağıdaki gibi bir ekranla karşılaşmanız gerekir:
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:
Bu programa bir göz atalım:
- count değişkeni 0 olarak belirleniyor.
- count değişkeni < 10 olduğu sürece döngü içerisinde kalınıyor.
- 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.
- 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:
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:
'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.
- 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.
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





























































