Neden Scala?

Merhabalar! Bu yazımda Scala’nın onu tercih sebebiniz olabilecek birkaç avantajından bahsetmek istiyorum. Merhaba Scala! yazımda ve Kim? sayfamda biraz bahsettiğim gibi Linovi’de çalışıyorum ve Scala’yı öğrenmeye/kullanmaya burada başladım. Scala ile ilgili şirketimin tercihleri ve benim kişisel görüşlerimi göz önünde bulundurarak birkaç başlık halinde anlatacağım.

Java ile Yakın İlişki

Java en yaygın programlama dillerinden bir tanesi. Java ile yapılabilecekler gerçekten oldukça fazla. Çok çeşitli ortamlarda da çalışabiliyor. Haliyle Java ile yazılmış dünya kadar kütüphane, araç ve çözüm var. Ancak eğer siz bir şekilde Java ile geliştirme yapmıyorsanız, geliştirdiğiniz dilden başka bir dilde yazılmış bir kodu kullanmak ya ek çaba gerektirecektir ya da mümkün değildir. Scala ile geliştirme yapacak olursanız böyle bir sorunla karşılaşmazsınız. Scala da tıpkı Java gibi JVM üzerinde çalışır. Scala kodunuzla birlikte Java kodu yazabilir, Scala kodunuzda Java kütüphanelerini doğrudan kullanabilir ve Java’yı çalıştırabildiğiniz bir ortamda Scala’yı da çalıştırabilirsiniz. Gördüğünüz gibi, bir nedenden dolayı Java’yı değil başka bir dili tercih etmek durumundaysanız, Scala’nın Java ile bu yakın ilişkisi sizin için avantajlı olabilir. Şirketimin Scala tercihinde de Java ile olan bu ilişki önemli bir etken. Örneğin yoğun olarak kullandığımız Amazon’un AWS (Amazon Web Services) isimli bulut (cloud) hizmetleri için hazırlanmış arayüzler ve kütüphaneler Java ile yazılmış durumda ve biz Scala kodumuzla birlikte sorunsuzca kullanabiliyoruz.

Yüksek Performanslı, Eşzamanlı İşler

Scala ile Akka teknolojilerini kullanarak eşzamanlı (concurrent), dağıtık (distributed) ve yüksek performanslı sistemler geliştirebilirsiniz. Evet, Akka teknolojilerini Java’da ve başka dillerde de kullanabiliyorsunuz ama bu teknolojileri Scala ile de sorunsuzca kullanabilmek yine bir avantaj. Hatta Scala’nın (fonksiyonel programlama gibi) farklı yetenekleriyle de birleşince bu teknolojileri Scala ile kullanmak daha kolay ve etkili olabiliyor. Linovi’de Akka’nın aktörlerini Scala ile kullanıyoruz.

Fonksiyonel Programlama

Scala birden fazla programlama paradigmasını/modelini destekleyecek şekilde geliştirilmiş. Nesne yönelimli programlama modelini tıpkı Java’daki veya başka bir nesne yönelimli programlama destekleyen dildeki gibi kullanabiliyorsunuz. Hatta bunun üzerine iyileştirmeler de yapılmış. Bunlara ek olarak Scala ile nesne yönelimli programlamadan oldukça farklı olan fonksiyonel programlama modelini de kullanabiliyorsunuz. Scala bu iki temel programlama modellerini başarılı şekilde harmanlamış. Dilin size sunduğu birçok kütüphanede ve arayüzde fonksiyonel programlama özellikleri ve tekniklerinden yararlanılmış. Hatta – daha önce bahsetmiştim – Scala birçok yerde sizi fonksiyonel programlama yapmaya teşvik ediyor. İlerleyen yazılarımda Scala ile daha çok kodlama yaptıkça bunun detaylarına ineceğim.

Kısa ve Öz Sözdizimi

Bu yazıyı okuyorsanız muhtemelen Scala dışında bir dil kullanıyorsunuzdur. Hatta o dilin Java olma ihtimali de oldukça yüksek. 🙂 Java ile geliştirme yapmışsanız bilirsiniz ki bazen basit bir iş için bile çok fazla kod yazarız. Benzer şeyleri tekrar tekrar yazarız ve yaptığımız işler büyüdükçe bu durum biraz can sıkmaya başlar. Scala geliştirilirken, bu gibi can sıkıcı durumlardan kurtulmak için birçok noktada neyin gerçekten gerekli olduğu, neyin ise aslında gereksiz olduğu ve atılabileceği üzerinde düşünülmüş. Örnek olması için; bir İnsan sınıfı tanımlayan, 10 tane rastgele yaşlara sahip insan oluşturan, bunları listeleyen ve sonra yaşlarının toplamını gösteren bir kod yazdım. Aşağıda aynı kodun birbirine denk Java ve Scala ile yazılmış hallerini görebilirsiniz.

Java


class Insan {
private int yas;
public Insan(int yas) {
this.yas = yas;
}
public int yas() {
return yas;
}
@Override public String toString() {
return "Insan(" + yas + ")";
}
}
class NedenScala {
public static void main(String[] args) {
Random rastgele = new Random();
Insan[] insanlar = new Insan[10];
for (int i = 0; i < 10; i++) {
insanlar[i] = new Insan(rastgele.nextInt(30) + 5);
}
System.out.println("İnsanlar:");
for (Insan insan : insanlar) {
System.out.println(insan);
}
System.out.println("Yaşları toplamı:");
int toplam = 0;
for (Insan insan : insanlar) {
toplam += insan.yas();
}
System.out.println(toplam);
}
}

view raw

NedenScala.java

hosted with ❤ by GitHub

Scala


case class Insan(yas: Int)
object NedenScala {
def main(args: Array[String]) {
val insanlar = for (i <- 1 to 10) yield Insan(scala.util.Random.nextInt(30) + 5)
println("İnsanlar:")
insanlar foreach println
println("Yaşları toplamı:")
println(insanlar.foldLeft(0)(_ + _.yas))
}
}

Aradaki farkı görüyorsunuz. 🙂 Kodun Scala halinde ileride detaylıca bahsedeceğim (tür çıkarımı/tahmini [type inference], sadece döngü olmayan for’lar [for comprehension], koleksiyonlar [collections], fonksiyonel programlama [functional programming], parçalı fonksiyonlar [partial functions] gibi) birçok Scala özelliğini kullandım. Her ne kadar örnek olsun diye uydurduğum bir kod olsa da Java’da, da Scala’da da geliştirme yapmış biri olarak farkın gerçekten de bu boyutlara ulaştığını söyleyebilirim. Scala’yı tercih etmemdeki kişisel nedenlerden birisi de bu Scala’nın bu öz (concise) yapısı.

Play Framework ve Web Uygulamaları

Yukarıda Akka’dan bahsederken anlattığım gibi, Scala ile web uygulamaları geliştirmek için Play Framework‘ü kullanabilirsiniz. Yine Akka gibi Play Framework de Java ile çalışabilmesine rağmen Scala ile daha kolay, keyifli ve etkili geliştirmeye olanak sağlıyor. Ayrıca Play Framework geliştiricileri önce Scala, sonra Java için geliştirme yapıyorlar diye biliyorum. Yani Play Framework kullanacaksanız Scala’nın Java’ya göre desteklenme konusunda bir avantajı var. Ayrıca Scala’daki implicit kavramı ve fonksiyonel programlama özellikleri gibi gelişmiş yapılar, web uygulamalarınızı geliştirirken size gerçekten çok yardımcı olabiliyor ve uygulamalarınızı daha etkin biçimde geliştirebiliyorsunuz. Linovi’de yüksek performanslı ve kaliteli web uygulamaları geliştirmeyi hedeflediğimiz için Play Framework’ü tercih ediyoruz. Çünkü Play Framework hafif ve iyi bir performansla çalışıyor. İlerleyen zamanlarda Scala ile Play Framework üzerine yazılar yazacağım.

Sonuç

Bu yazımda Scala ile ilgili “Neden Scala öğreneyim/kullanayım?”, “Neden Scala’ya geçeyim?” gibi sorularınıza cevaplar vermeye çalıştım. İnşallah anlattıklarım faydalı olmuştur.

Tekrar görüşmek üzere, hoşça kalın!