Alt Yordamlar
Altyordam, belirli bir iş yapan bir dizi program ifadesinin bir birim altında toplanmasıdır. Altyordamlar, farklı programlama dillerinde prosedür, fonksiyon, metot, alt program vb. farklı isimler almaktadır [1].
Altyordam kavramı, Ruby gibi nesneye yönelik programlama dillerindeki metot kavramıyla benzerlik gösterir. Metotlar, çağrım yöntemleri ve sınıflarla ilişkileri bakımından alt yordamlardan farklılık gösterirler [2].
Metotlar
Ruby’de iki parametre alan basit bir metot tanımı ve metodun parametre ile çağrımı gösterilmiştir:
def azalt(deger1, deger2)
deger1 -= 1
deger2 -= 1
end
a = 1;
b = 10;
azalt(a, b);
puts a; # Değer değişmez, a=1
puts b; # Değer değişmez, b=10
|
- Metot Dönüş Değeri
Ruby’de metotlar return ifadesi ile döndürdükleri değeri belirtmek zorunda değillerdir. Ruby’de metot dönüş değeri metotta işletilen son ifadenin sonucudur [3].
Ruby’de metotlar birden fazla değer dönebilirler [3].
Ruby’de metotlar def ifadesi ile tanımlanır undef ifadesi ile de tanımsız hale getirilebilirler [3].
Metot Argümanları/Parametreleri
Ruby’de basit bir metot tanımı virgüllerle ayrılmış şekilde sayısız parametre alabilir [3].
- Ön Tanımlı (Default) Parametre Değeri Belirtme
Ruby'de metotta tanımlı parametrelere ön tanımlı (default) bir değer belirtebiliriz. Bu ön tanımlı değerler, metot çağrıldığında işletildiği için dinamik değer de alabilirler [3].
def ilkharfler(s, uzunluk=1)
s[0, uzunluk]
end
ilkharfler("Ruby", 3) # => "Rub"
ilkharfler ("Ruby") # => "R"
|
- Opsiyonel Parametreler
Bazen metotlara opsiyonel ve keyfi sayıda parametre verme ihtiyacı olabilir. Ruby’de bunu yapabilmek için bir parametrenin önüne * koymak yeterlidir. Böylece bu opsiyonel parametre sıfır veya daha fazla değere sahip bir dizinin referansı haline gelir [3].
# Maksium değeri bul
def maksimum(ilk, *digerleri)
# İlk verilen değerin en büyük olduğunu kabul et
maks = ilk
# opsiyonel paramterlere daha büyüğünü bulmak için tek tek bak
digerleri.each {|x| maks = x if x > maks }
# En buyuk değeri dön.
maks
end
|
Yukarıda tanımlı maksimum fonksiyonuna bir dizi parametre olarak verilmek istenirse ve dizinin değerlerinin fonksiyondaki parametrelere sırasıyla dağıtılması istenirse yine * operatörü kullanılabilir [3]. Örneğin:
dizi = [3, 2, 1]
m = maksimum (*dizi) # ilk = 3, digerleri =[2,1] => m=3
|
- Blok Fonksiyon Parametresi
Ruby’de fonksiyonlar direkt olarak parametre geçilemese de , blok fonksiyon isimli özel bir çağrım yöntemi ile bir nevi fonksiyon çağrımı yapılabilir [3]. Örneğin:
def seri(n, m, c, &b) # &b: blok fonksiyon
i = 0
while(i < n)
b.call(i*m + c) # Blok fonksiyonu çağır
i += 1
end
end
seri(5, 2, 2) {|x| puts x }
|
- Parametre Geçirme Yöntemi
Ruby'de fonksiyona verilen parametrenin değeri geçirilir (pass by value) [4]. Genelde karıştırılsa da parametrenin sadece değerinin geçirilmesi nesneler için de geçerlidir. Şöyle ki, nesneler ise aslında gerçek bir değer tutmayıp, hafızada bir referansı tutarlar, fonksiyona parametre olarak da bu referansın değeri geçirilir. Bu sayede nesne üzerinde değişiklik yapılabilir ancak nesne başka bir nesneye atanamaz. Bu açıdan Ruby Java’ya benzer [4,5].
- Parametre Tipleri ve Tip Kontrolü
Ruby dinamik tipli (dynamically typed) bir dil olduğu için metotlarda parametre tipi belirtilmez. Paramtre tipindeki bir uygunsuz durum ancak parametre işletildiğinde hata verir[6].
- Fonksiyon Aşırı Yüklemesi (Overloading)
Ruby’de aynı isimli iki fonksiyon tanımlanamaz [7].
[1] "Subroutine”, http://en.wikipedia.org/wiki/Subprogram. [Erişim Tarihi: 23 Mayıs 2014].
[2] Sebesta, R.W., Concepts of Programming Languages, Pearson Education, 2012.
[3] Flanagan D., Matsumoto Y., The Ruby Programming Language, O'Reilly Media, 2008.
[4] “Ruby - Parameters by reference or by value”, 3 Nisan 2014, http://stackoverflow.com/a/22827949/878710. [Erişim Tarihi: 23 Mayıs 2014].
[5] “Is Java “pass-by-reference” or “pass-by-value”?”, 12 Ağustos 2011, http://stackoverflow.com/a/7034719/878710. [Erişim Tarihi: 23 Mayıs 2014].
[6] “Ruby Programming/Syntax/Literals”, Wikibooks, http://en.wikibooks.org/wiki/Ruby_Programming/Literals . [Erişim Tarihi: 23 Mayıs 2014].
[7] “Ruby Overloading Methods”, http://rubylearning.com/satishtalim/ruby_overloading_methods.html. [Erişim Tarihi: 23 Mayıs 2014].
NOT: YTÜ - İleri Programlama Dili Dersi 2014 1. Dönem Ödevi Çerçevesinde Hazırlanmıştır.
NOT 2: Ruby 1.9 baz alınmıştır.
Hiç yorum yok:
Yorum Gönder