Etiket arşivi: fonksiyonel

Bölüm 1 : Scala Giriş

Nedir Bu Scala ?

Scala, hem nesne yönelimli hem de fonksiyonel programlama metodolojilerini içeren bir programlama dilidir.Scala’nın kendi derleyecisi olmasına rağmen Java Byte-Code üretebiliyor yani JVM üzerinde koşturabiliyorsunuz.Bu sayede java kütüphanelerini,framework’lerini,tool’larını rahatlıkla scala ile kullanabilirsiniz.

Scala ile kod yazarken java’nın boiler plate dediğimiz can sıkıcı işlerini yapmak zorunda kalmıyoruz.Bazı kısımlarda inanılmaz bir productivity sağlıyor.Geliştirme işini zevkli hale getirebiliyor.Tabi ilk başlarda eğer siz de benim gibi java gibi geleneksel dilleri kullanmışsanız zorlanıyor olacaksınız.Zamanla scala syntax’ına alıştıkça geliştirmenin java’ya göre daha hızlı ve zevkli olduğunu görürsünüz.Java da 10 satırda yapabildiğiniz işi scala ile bir satırda yapabiliyorsunuz.

Scalada kodunuzu hem compile hem de interpret edebiliyorsunuz.Scala’nın REPL (Read-Evaluate-Print Loop) dediğimiz bir yorumlayıcısı vardır.Teknik olarak REPL arka tarafta hızlı bir şekilde byte-code compile edip,byte-code’nin jvm tarafından execute edilmesidir.Bu geliştirciye, kodunu hızlıca çalıştırıp, hızlıca feedback almasına olanak sağlıyor.

Scala Yükleme

Scalayı bilgisayara yüklemek çok basit.

Windows için Install Scala For Windows kullanabilirsiniz.

Mac için

  • Mac için istediğiniz scala versiyonunu indirin.
  • İndirdiğiniz dosyayı bir dizine extract edin.
  • Aşağıdaki tanımlamları bash_profile dosyanıza ekleyin.
    export SCALA_HOME=/Users/mesutozen/Documents/scala-2.11.6
    export PATH=$PATH:$SCALA_HOME/bin
  • Komut satırından scala yazıp enter’a bastığınızda Welcome Scala yazısını gördüyseniz yükleme tamamdır
  • Scala Giriş

    Evet scala’yı install etmiş oldu.Şimdi biraz scala kodu çalıştıralım 🙂

    scala

    scala


    Solda kısaca 8 * 5 + 2 yazıp enter’a bastık.Ve scala, kodu interpret edip sonucu, tipi Int olan res0 değişkenine atayıp gösteriyor.Daha sonra bu değişkeni 0.2 ile çarptğımız da bunu Double değişkene atıyor,en son kısımda ise bir String ile birleştiriyoruz.Ve her seferinde scala işlemi yapıp uygun tipte bir değişkene atıyor.

    Dikkat ederseniz burada hiç bir tip tanımı yapmadık.Normal de java ile bunları yapabilmek için her seferinde type cast yapmamız gerekiyordu fakat scala bunu kendisi yapıyor.Bunu da değişkenlerin değerinden anlıyıp gerçekliyor.

    Screen Shot 2015-04-25 at 16.26.02
    Ayrca komut satırında res0. yapıp tab tuşuna bastığımızda scala bize bu değişken üzerinde çalıştırabileceğimiz methodların listesini veriyor.Değişken üzerinde methodu çağırdığımızda scala, ne yapıyor peki ? Scala interpreteri öncelikle expression’u read eder,daha sonra evaluate eder,sonra print eder ve sonraki expression’u read eder.İşte REPL dediğimiz yapı bu şekilde çalışıyor.

    Val ve Var Değişken Tanımlama

    Scalada kendi değişkenlerimizi aşağıdaki gibi val ve var kullanarak tanımlayabiliriz.

    Screen Shot 2015-04-25 at 17.05.36

    Değişken tanımlarken bu değişkenlerin tipini belirtmek zorunda değilsiniz.Scala,değişkene verdiğiniz ilk değerden değişkenin tipine karar veriyor.Bir değişkeni tanımlarken ilk değer ataması yapmadan tanımlayamazsınız.

    Scalada bir değişkeni val olarak tanımladığınızda bu değişkene daha sonra değer atayamazsınız.Yani bu sizin sabit’iniz(constant) oluyor.Javada bu final keyword’una denk geliyor.

    Bir değişkeni var olarak tanımladığınız da bu değişken üzerinden istediğiniz gibi değişiklik yapabilirsiniz.

    Yaygın Kullanılan Tipler

    Scala’da 8 adet numeric data tipi vardır.Byte,Char,Short,Int,Long,Float,Double ve Boolean.
    Dikkat ettiyseniz scalada javadaki gibi primitive type yok.Yani tüm tipler birer class.Böylelikle sayılar üzerinden method çağırımları yapabilirsiz.

    Aritmetik ve Operator Aşırı Yükleme (Overloading)

    Scaladaki aritmetik operatorlar aynen javadaki gibi çalışır.Fakat burada farklı olan şey bu operatorların aslında birer method olmaları.Örneğin, a+b aslında a.+(b)‘nin kısaltılmışıdır. + bir method adı.Benim için pek üzücü olmasa da scalada ++ operatoru mevcut değil.

    Fonksiyon ve Method Çağrımları

    Scala,methodlara ek olarak fonksiyonlara da sahiptir.Scalada matematiksel fonksiyonları kullanmak çok basittir.Javadaki gibi static call’lar yapmanıza gerek yok.

    pow(2,4) // 16.0
    min(3,Pi) // 3.0

    Bu fonksiyonlar scala.math paketinde tanımlıdır.import scala.math._ diyip kullabilirsiniz. “_” karakteri Javadaki “*” karakterine denk geliyor.

    Scalada parametre almayan methodları parantez kullanmadan kullanabilirsiz.Genel olarak,değişkenin değerini değiştirmeyen methodlar parametre almaz.

    “Scala”.distinct

    apply Methodu

    “Scala”(4) // ‘a’

    Yukarıdaki işlem için javada .charAt(4) şeklinde bir method çağrımı yapmamız gerekirdi.Ama scala sadece parantez kullanarak yapabiliyoruz.İlk gördüğümde vay arkadaş demiştim,nasıl yapıyor bunu 🙂 Peki scala bunu nasıl gerçekliyor ? () operatoru overloaded edildiğinden dolayı mı ?Hayır.Basitçe aslında String üzerinden apply methodunu call ediyoruz.Scalada StringOps class’ina baktığınızda aşağıdaki method tanımının olduğunu görürsünüz.

    def apply(n: Int):Char // Scalada geri dönüş değerinin tipini parantezlerin bitiminde “:” karakterinden sonra tanımlandığını görüyoruz.

    apply için başka bir örneği BigInt üzerinden verelim.

    BigInt(“555”) aslında BigInt.apply(“555”) işleminin kısaltılmışıdır.

    Şimdilik burada bitirelim.Artık Scala’nın ne olduğunu ve scala ilgili bazı temel bilgileri edinmiş olduk.Benim için faydalı oldu.Umarım sizler için de faydalı olur.

    EOF

    Kaynakça
    http://horstmann.com/scala/
    http://www.tutorialspoint.com/scala/scala_data_types.htm
    http://www.scala-lang.org/what-is-scala.html