Ruby Methodlar (Fonksiyonlar) nasıl tanımlanır?

ergin (2539) 8 yıl önce sordu

Ruby' de Method Definition (Fonksiyonlar) nasıl tanımlanır?

Ruby' de Methodlara parametre nasıl geçilir?

Ruby' de Methodlara Varsayılan Argümanlar (Default Arguments) nasıl atanır?

Toplam 1 cevap


ergin (2539) 8 yıl önce cevapladı

Diğer tüm programlama dillerinde olduğu gibi Ruby programlama dilinde de Methodlar (Fonksiyonlar) ufak program parçacıklarının veya ifadelerin bir araya toplanmasında oluşur.

Örneğin bildiğimiz matematik fonksiyonları yerine bundan böyle yerine method kullanacağız. Ruby neredeyse Obje (Nesne) ve Methodlardan (Method)  oluşur.

Ruby' de Method Definition'a yani nasıl method tanımlanır;

def uzmanim
  "Merhaba Ruby"
end

uzmanim     # "Merhaba Ruby"

def ve end anahtar kelimeleri arasına method’un adı geldi. Önce method’u tanımladık, sonra çağırmış olduk.

Ruby'de herşey mutlaka geriye birşey döndürür. Bu durumu açıklamak gerekirse genel olarak method’lar zincir olarak çalıştığı için, method denen şey de aslında bir fonksiyon ve fonksiyon denen şey de bir dizi işlemin yapılıp geriye sonucun döndürdüğü bir yapıdır.

Pek çok programlama dilinde fonksiyondan birşey geri dönmek için return kullanılır. Ruby'de de kullanılır ama zorunlu değildir. Yukarıdaki def uzmanim örneğinde return kullanmamamıza rağmen geriye Merhaba döndü.

Ruby'de methodlar içerisindeki çalıştırılan en son satırın değerini döndürür. Ancak siz daha öncesinde özellikle return anahtar kelimesi ile bir sonuç dönmezseniz. Bir örnekle konuyu açıklamak gerekirse;

def ilkornek
  m = "Merhaba"
  u = "Uzmanım"
end

def ikinciornek
  m = "Merhaba"
  u = "Uzmanım"
  return "Return Uzmanım"
end

puts ilkornek      # Sonuç : Uzmanım
puts ikinciornek   # Sonuç : Return Uzmanım

İşte bu Ruby'nin özelliğidir. Kodu okurken bunu bilmezsek kafamız çok karışabilir.

 

Ruby' de def ile tanımlanan method’u, undef ile yok edebilirsiniz.

def ornek
  "Merhaba"
end

ornek      #  "Merhaba"

undef ornek

ornek      #  undefined local variable or method 'ornek' for main:Object (NameError)

Görüldüğü gibi undefined local variable or method .. Object (NameError) hatasını verdi.

 

Ruby' de Methodlar argüman yani parametre alabilir. Fonksiyona, doğal olarak parametre geçebilirsiniz.

def ornek(ad)
  "Merhaba #{ad}"
end

ornek("ergin")      #  "Merhaba ergin"

aynı örneği aşağıdaki gibi de yazabiliriz:

def ornek adiniz
  "Merhaba #{adiniz}"
end

ornek "ergin"    #  "Merhaba ergin"

Method’u tanımlarken ve çağırırken parantez kullanmadık! Bu alışmanız gereken önemli konulardan birisidir.

Bazı durumlara, argüman alan method çağırırken, argümanın tipine göre, eğer parantez kullanmadan çağırma yaparsanız warning alabilirsiniz.
 

Ruby'de Method  Argümanlarına varsayılan  (Default Arguments) değerler atayabilirsiniz. Bu, eğer methoda gönderilmesi beklenen argüman gelmemişse otomatik olarak değer atama yapmayı sağlamaktadır.

def ornek(adim="ergin")
  "Merhaba #{adim}"
end

ornek                           #  "Merhaba ergin"
ornek ("uzmanım")    # "Merhaba uzmanım"

Parametre geçmeden çağırdığımızda, tanımladığımız varsayılan (default) değer atandı.

 

Değişen Sayıda Argümanlar (Variable-Length Arguments) Bazı durumlarda method’a değişken sayıda olarak parametre geçmek gerekebilir. Bu durumda argümanın başına * işareti gelir. Bu sayede o argüman artık bir dizi (Array) haline gelir.

def ornek(*isimler)
  "Merhaba #{isimler.join(" , ")}"
end

ornek("ergin")                                     #  "Merhaba ergin"
ornek("ergin", "mert", "akın")            #  "Merhaba ergin , mert , akın"

ornek "ruby", "java", "c#", "visual basic"  # => "Merhaba ruby , java , c# , visual basic"

Diğer bir kullanımı ise;

def numara(bir, iki, *diger)
  p "ilk sayınız: #{bir}"
  p "ikinci sayınız : #{iki}"
  p "diğer sayılarınız : #{diger.join(",")}"
end

numara 5,10,50,75
# çıktılar
# ilk sayınız: 5
# ikinci sayınız : 10
# diğer sayılarınız : 50,75