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

0

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?

ergin ergin (2539)
6 yıl önce sordu

    Toplam 1 Cevap


    1

    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


     

    ergin ergin (2539)
    6 yıl önce cevaplandı

      üyelik gerektirir

      Cevap yazabilmek için üye girişi yapmalısınız.

      Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
      uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol