Programlamada Değerlendirme Kriterleri (call-by-value,call-by-name)

Armağan Ersöz —  5 Mayıs 2014 — 1 Comment

Yeni yeni Scala ile uğraşmaya başladım daha ilk derslerden fonksiyonların değerlendirme stratejileri üzerine yararlı birkaç video izledim. Üzerine bu stratejileri biraz araştırdım ve Scala’da en çok gündeme gelen call-by-value ve call-by-name stratejilerini burada paylaşmak istedim. Bunu öğrenmek benim için çok yararlı oldu. Ben her zaman şuna inanıyorum. Maharet sadece kodu yazmakta değil, arkada nelerin döndüğünü de bilmektedir.

O yüzden bu 2 stratejiden kısaca bahsedeceğim. Yazacaklarım çok detaylı değil öğrendikçe paylaşacağım.

Not: Eğitimi bitirdiğimde yazıyı editleme hakkını kendimde saklı tutuyorum 🙂

Öncelikle fonksiyonları tanımlayalım.

call-by-value tekniği nasıl çalışıyor?

Bu örnekte yorumlayıcı(interpreter), fonksiyonları uygulamadan önce fonksiyonların argümanlarını birer değere indirgiyor.  Bu yöntem call-by-value yöntemi.

Şimdi call-by-name yöntemine bakalım.

Bu tipte ise öncelik fonksiyonların uygulanması. Value’ya indirgemek 2. Planda kalıyor.
Bu biraz basit bir fonksiyondu. Şimdi biraz daha karmaşıklaştıralım.
Bir değer döndürmenin yanında ek bir işlem daha yapan fonksiyonlar ile çalışalım. (a function with a side-effect)

İki farklı stratejiyi de görmek için iki farklı türde fonksiyon tanımlayalım.

Şimdi çıktılara bakalım;

Farkettiğiniz üzere callByName fonksiyonunun çıktısında ‘calling something’ bir kez, diğerinde 2 kez yazılmış. Neden?

Çünkü; callByValue fonksiyonu parametresini önce değere indirgiyor. Yani something() fonksiyonunun değerini  callByValue fonksiyonuna parametre olacak yazıyor.Sonra fonksiyonu çağırıyor. Fakat callByName’de durum farklı. Önce değere indirgemek yerine fonksiyonları uyguluyor. Uygulanacak fonksiyon kalmayınca değere indirgemeye başlıyor.

Son örnek olarak da Scala’cı abimiz Martin Odersky’ın güzel bir örneği var.

Sonuç olarak; yazdığınız fonksiyonların hangi değerlendirme kriterlerinden geçtiğini ve programınız için kullanmanız gereken değerlendirme kriterini bilmek faydalı olacaktır diye düşündüm. Umarım anlaşılır olmuştur.

Not: Örnekler Scala syntax’i ile yazılmıştır.

Kullandığım referanslar:

http://www.scala-lang.org/docu/files/ScalaByExample.pdf

http://stackoverflow.com/questions/13337338/call-by-name-vs-call-by-value-in-scala-clarification-needed

Armağan Ersöz

Armağan Ersöz

Posts Twitter

Genelde web uygulamaları geliştiren özgür yazılım destekçisi bir yazılımcı. Java, Spring ve JSF en sevdiği oyuncaklar. Biraz DBA'liğe meraklı. Kadıköylü. Şu an Avustralya'da yaşıyor.

One response to Programlamada Değerlendirme Kriterleri (call-by-value,call-by-name)

  1. Teşekkür ederim. 🙂
    Örnekler StackOverFlow’da gördükten sonra bir de buradaki açıklamayı okuyunca güzelce oturdu.

    Sevgiler..

Yorum yapmak için