Java’cılar için Scala – 1 [Temel]
Scala da Java gibi JVM tabanlı bir dildir ve makinenizde JDK kurulumu yapıldıysa geliştirme ortamlarına Scala için pluginler ekleyerek geliştirmeye başlayabilirsiniz bu nedenle kurulumdan bahsetmeyeceğim.
Yazı boyunca zaman zaman Java ile karşılaştırmalar yapacağım için java bilmeniz faydalı olacaktır. Bu nedenle bu yazı programalamaya giriş için uygun olmayacaktır.
Öncelikle temel programalama ifadelerini ele alacağız. Amacımız bilenlerin daha hızlı adapte olması.
- Değişken Tanımlama ve Değer Atama
Scala da Java gibi bir main methoda sahip.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
object BasicsMain { def main(args: Array[String]): Unit = { var number = 100 number += 1 println(number) var number1 : Int = 100 number1 += 1 println(number1) var name: String = null name = "bilisimio" println(name) val surname = "Cem" surname = "dirman // Error: Reassignment to val surname. /*Compiler hata veriyor çünkü immutable bir değişken tanımı yaptığımız için değeri değiştiremiyorum.*/ val isTrue = true var isFalse: Boolean = false println(isTrue) val result = 25 + 25.5 * (33.3 / 3 ) - 27 println(result) } } |
Gördüğümüz gibi öncelikle noktalı virgül kullanımı artık yok. Değişken tiplerimiz ise Java’dan tanıdığımız tipler. Buradaki önemli nokta var ve val kullanımı. Yorum satırı olarak da yazdığımız şekilde val immutable olduğu için bir alt satırda compile timed hata alıyoruz ve ilk tanımı değiştirmemizi istiyor. Bir diğer nokta ise bazı tanımlarda değişken tiplerimizi belirlememiz. Bunu Scala bizim için kendisi yapıyor.
result değeri hesaplanırken hem integer hem de double değerler mevcut fakat Scala bu noktada bize zorluk çıkarmıyor. Java bu işlem için öncelikle dönüştürme yapmamız gerekirdi.
2. Operatörler
Java’da kullandığımız operatörler burada da geçerli fakat aşağıda farklı bir durum var.
1 2 3 4 5 |
println("bilisim.io " * 3) // bilisim.io bilisim.io bilisim.io |
String bir ifadeyi çarpma operatörü ile de kullanabiliyoruz. Java da ise toplama(+) operatörü ile string ifadeleri birleştirebiliriz.
3. Kontrol Yapıları
if/else yapılarını kullanımda fark olmasa da bu yapılarda sıkça kullandığımız string ifadeleri karşılaştırma noktasında farklılıklar mevcut. Java’da string ifadeleri karşılaştırırken == yerine equals methodunu kullanıyoruz. Bunun nedeni ise method ile değişkenin değerini karşılaştırmamız. Fakat Scala iki işlemin de aynı olduğunu söylüyor. Aşağıdaki linkte de sorulan bir soru, inceleyebilirsiniz.
https://stackoverflow.com/questions/24860919/use-instead-of-equals-for-string-comparison-in-scala
bir diğer yapımız olan switch/case yapısı burada match olarak karşımızda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
val day : Int = 5 val dayOfWeek = day match { case 1 => "pazartesi" case 2 => "salı" case 3 => "çarşamba" case 4 => "perşembe" case 5 => "cuma" case 6 => "cuma" case 7 => "pazar" case _ => "Geçersiz değer" // default } println("day of week: " + dayOfWeek) |
default olarak bildiğimiz kavram ise burada ‘_’ ile belirtiyoruz ve break kullanımı gördüğümüz üzere burada yer almıyor.
4. Dögüler
for döngüsünde iki kavram mevcut;
- to
- until
kavram İngilizce olduğu için belki anlamlı gelebilir fakat kullanım olarak beni şaşırttı.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
for ( i <- 1 to 10){ println(i) } for ( i <- 1 until 10){ println(i) } for(i <- 1 to 10 if i % 2 == 0){ println(i) } |
to keyword’u ile 10 dahil bütün sayıları yazdırırken, until ile 10’a kadar yani 9 dahil olmak üzere bütün sayıları yazdırcaktır ve gördüğünüz üzere i için değişken tanımı yapmadık.
bir diğer nokta da 3. for’un içine yazdığımız if koşulu. Bildiğimiz şekilde for döngüsüne zaten bizler de koşullar ekleyebiliyorduk fakat if keyword’u ile kullanmak benim için diğer bir farklı nokta oldu.
Bunun dışında while ve do while döngülerinin kullanımları aynı.
5. Fonksiyonlar
Burada yine bazı dillerde karşımıza çıkan def keyword’u mevcut. Java’da ise böyle bir keyword’a ihtiyacımız yok, dönüş tiplerini belirtmemiz yeterliydi.
Bildiğiniz gibi Java’da void keyword’u mevcut burada bunun karşılığı olarak Unit mevcut. Örnekleri incleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
object BasicsMain { def main(args: Array[String]): Unit = { val sumResult = sum(10,25.5) println(sumResult) println(trim(" bilisim.io ")) concat("bilisim") } def sum(number1 : Int, number2: Double): Double = number1 + number2 def trim(name: String): String = { name.trim } def concat(name: String): Unit = { println(name.concat(".io")) } } |
kodlara aşağıdaki linkten ulaşabilirsiniz.
https://gist.github.com/cemdrman/9b00a0ddfe4b9b9e542e1932ffc3e45a
Faydalı olması dileğiyle.