Scala 101 gibi bir yazı

Selam arkadaşlar,

İşyerinde yine bir teknolojik atılım gerçekleştirdik ve JVM üzerinde çalışan fonksiyonel ve nesne yönelimli dil olan Scala’yı projelerimizde kullanmaya başladık.

Açıkçası ne zamandır fonksiyonel dilleri kullanmak istiyordum ama fırsatım olmuyordu, javascriptte jquery kullanmaktan öteye gidememiştik. Sonuç olarak Scala kullanmaya başlayarak zihinsel haritamızda büyük bir atılım yapmış olduk.

Peki fonksiyonel programlama nedir? Çok kısa bir tanımla açıklama gerekirse, programlarınızı statementlar yerine fonksiyonlar olarak düşünmektir. Yani mümkün olduğu kadar en küçük birimlerin fonksiyonlardan oluşması olarak adlandırabiliriz. Bu tanımdan hareketle fonksiyonel dillerin bunu sağlayabilmesi için fonksiyonları temel veri yapılarından sayması gerekir. Bu sağlandığında fonksiyonları parametre olarak kullanabilir, değişkenlere atayabilir, gerektiğinde çağırabilirsiniz. Bir diğer gerekli özellik ise, fonksiyonların sadece aldığı parametrelere göre dönüş değerleri üretmesidir. Yani gönderdiğiniz parametrelerde değişiklik yapılmamalıdır.

Bunlardan yola çıkarak Scala’daki (diğer fonksiyonel dillerde de kullanılmakta olan) bir kaç temel özellikten bahsedeyim.

  1. Fonksiyon literalleri : Scala da sadece fonksiyon tanımlamak zorunda değilsiniz, şunu da yapabilirsiniz: val ekle = (x: Int, y: Int) => x + y . Bu aşamada fonksiyonu istediğiniz zaman çağırabilir, diğer fonksiyonların içinde kullanabilirsiniz, parametre olarak geçebilirsiniz.
  2. map fonksiyonu : Bir liste üzerindeki tüm elemanlar üzerinde çalışıp, yeni bir liste üreten fonksiyon.
  3. filter fonksiyonu : Bir liste üzerindeki tüm elemanlar üzerinde çalışıp, verilen teste uygun olanlardan yeni bir liste üreten fonksiyon.

Bu 3 temel özellik ile yazdığınız programlar hem çok kısalır hem de anlaşılması daha kolay olur. Ufak tefek fonksiyonları birbirleriyle kullanarak çok anlamlı ve işlevsel programlar yazabilirsiniz. (Tıpkı Unix command line araçları gibi)

Map ve fonksiyon literallerine bir örnek :

scala> val l = List(1,2,3,4,5)

scala> l.map( x => x*2 )

res60: List[Int] = List(2, 4, 6, 8, 10)

Bunların üzerine daha çok gideceğiz ilerideki yazılarda, takibe devam!

Yıl Sonu

Selam arkadaşlar,

2012’yi bir kaç gün içinde arkamızda bırakıyoruz. Bazı şeylerin mukayesini yapmak, bazı şeylerin de niyetini ortaya koymak için aşağıda okuyacağınız yazıyı yazıyorum, buyrun efendim.

2012’deki ilk önemli gelişme iş değiştirmem oldu. Parkyeri’ndeki görevimden ayrılıp Pozitron’a geçtim. Sebebi ise tamamen maddiyat oldu. Aslında çok şeyler yapabileceğimiz bir ekiple beraber çalışıyorduk fakat benim ne yazık ki bekleyecek durumum yoktu. Pozitrondan da Fırat ve Meteyle görüştükten sonra gönlüm rahat bir şekilde yeni şirkette çalışmaya başladım. Pozitron’da çalışmaktan memnunum, hem kendimi yeni teknolojilerle geliştirmemi sağlayan hem de mücadele etmemi gerektiren yapısıyla mesleki açıdan beni canlı tutuyor. Bir de akşam 18:30’da çıkma şartı olmayaydı, çok daha iyi olacaktı.

2012’in diğer önemli gelişmesi ise hala Fatih ve Bünyaminle (şu sıralar bir de Bilgehanla) yürüttüğümüz iş dışı projeler. İlk olarak Nisan ayında wishjoin.com’u yayınladık. Arkadaşlar arasında kullanıyoruz şu sıralar : ). İlk bağımsız yayınladığımız web projesi olması açısından anlamı büyük. Şu anda sporapp.com üzerinde çalışıyoruz, fitness ile ilgili çok güzel içerikler sunacağımız bir site çalışması yürütüyoruz. Bekleyin : p

Pozitron ve diğer projeler ciddi anlamda zamanımı aldığıdan bu sene zamanın ne olduğunu  çok iyi anladım. Zamanın ne kadar çabuk geçtiğini, ne kadar değerli olduğunu, ne kadar geriye döndürülmez olduğunu ve yanlış harcamanın ne kadar kolay olduğunu bu sene öğrendim. Öncelikleri düzenlemek zorunluluğundan resmen eski sosyalliğimi kaybettim, arkadaşlarımı ihmal etmek durumunda kaldım. Şimdi bunun üstüne bir de fitness yaparak yaşadığım darboğazı biraz daha artırmaya dikkat ediyorum. (Manyaklar gibi sabah erken saatte kalkıp, saat 8’de spora gidiyor, oradan da işe gidiyorum:) ) 26 yaşına geldim, daha bu hayattan birşey anlamadım valla.

Bu arada ev yönetmenin ne kadar zor olduğunu da anladım bu sene. Ne kadar zor olabilir dediğiniz bir çok şeyin ne kadar stres dolu olduğunu ve sanırım olgunlaşmanın da biraz ne olduğunu gördüm. Sadece bir evi idare etmenin zorluğu karşısında ise daha ruhen ne kadar çocuk gibi olduğumu anladım. Bunun n tane sonucunu yaşadım, yaşamaya devam ediyorum.

Peki önümüzdeki sene bizleri neler bekliyor? Açıkçası işyerinde ve özelde çok güzel projelerimiz var, bunların sağlıklı bir şekilde sonlandırılmasını istiyorum. Ve bunun için de çok çalışmaya hazırım. Ama diğer yandan da kendime istediğim vakti ayırmak istiyorum. : ) Daha bir abajur alamadım ya salonuma : ). Bir sürü kitap okumak istiyorum, öğrenme ve okuma açlığım hiç gitmesin istiyorum. Bol bol rakı içmek istiyorum (hafta içi içmem ama bundan sonra :p ). Arkadaşlarımla bir arada olup, mutlu olmak istiyorum ulan. Çok mu şey istiyorum?

Bunlar da wishjoinden :

Duygusal hüzün, sevinç ve isteklerimi ise kendime saklıyorum, kusura bakmayın : ).

Herkese tüm güzel dileklerinin gerçekleştiği süper bir yıl diliyorum.