Author : Armağan Ersöz

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.

Fonksiyonel programlama dillerinde yaygın teknik; fonksiyonları mümkün olabilecek en alt fonksiyonlara ayırarak problemi çözme yönündedir. Yineleme yani ” recursion” fonksiyonları da bu noktada en iyi çözümlerden biridir. Yineleme fonksiyonu bildiğimiz üzere kendi kendini çağıran fonksiyondur.

Fakat yineleme fonksiyonları performans açısından yavaştır. Sebebi ise; fonksiyonlar, kendini her çağırdığında bellekte yeni bir yer açılır ve bu tarz fonksiyonlar, çağrılar sonucunda dönen değerleri kullanarak hesaplama yaptığı için hesaplama yapılana kadar tüm parametreler ve dönüş değerleri bellekte tutulur. Daha açık bir şekilde ifade edersek; son yineleme de dahil olmak üzere tüm yinelemeler bir değer döndürdükten sonra hesaplama yapıldığı için tüm değerler işlem sonuna kadar bellekte tutulur.

Böyle bir yöntem kullanınca da bellek fazla kullanıldığı için “StackOverflowException” ile karşılaşmak kaçınılmaz oluyor.

Okumaya devam edin...

Yeni yeni Scala ile uğraşmaya başladım daha ilk derslerden fonksiyonların evaluation 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.

 def suare(x: Double) = x * x

def sumOfSquares(x: Double, y:Double) = square(x) + square(y)
Okumaya devam edin...