Ders 3 - Scala Temel Syntax(sözdizimi)

2 Haz 2016 · 8 dk okuma süresi

Eğer Javayı iyi anladıysanız, Scalayı öğrenmeniz çok kolay olacaktır. Scala ve Java arasındaki en büyük sözdizimsel(syntactic-syntax) fark satır sonlarına gelen ; karakterinin isteğe bağlı olmasıdır. Scala programını düşündüğümüzde onu her bir metot ile çağrı yöntemiyle iletişim içinde olan objeler koleksiyonu olarak tanımlayabiliriz. Şimdi kısaca sınıf, obje ve metotların ne yaptıklarına ve anlık değişkenlerin(instant variables) anlamına bakalım.

  • Object - Objeler(nesneler) özelliklere(durumlara) ve davranışlara sahiptirler. Örneğin: Köpek; renk, isim, cins gibi özelliklere sahipken aynı zamanda; kuyruk sallama, havlama, beslenme gibi davranışlara da sahiptir. Bir obje(nesne), bir sınıfın örneğidir.
  • Class - Bir sınıf, obje tipinin desteklediği özellikleri/davranışları barındıran bir taslak olarak tanımlanabilir.
  • Methods - Metot temel olarak davranışlardır. Bir sınıf çokça metot barındırabilir. Mantıkların yazıldığı, verilerin idare edildiği ve bütün eylemlerin harekete geçirildiği yer metotların içerisidir.
  • Fields - Her objenin Fields(alanlar) olarak isimlendirilen sahip olduğu benzersiz anlık değişken(instant variables) dizisi vardır. Bir objenin özelliği(state-durum), o objeye atanan değerdir.

İlk Scala Programı:

İnteraktif Modda Programlama:

İnteraktif modu kullanarak yorumlayıcıya herhangi bir script dosyası göndermeden kodumuzu hızlıca çalıştırması için ilk olarak aşağıdaki adımı izliyoruz:

C:\>scala
Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.

scala>

Daha sonra scala> yazan yerin sağ tarafına aşağıdaki kodumuzu yazıyoruz ve Enter tuşuna basıyoruz:

scala> println("Hello, Scala!");

Bu size aşağıdaki sonucu verecektir:

Hello, Scala!

Script Modda Programlama:

Şimdi ekrana ‘‘Hello, World!” yazacak aşağıdaki kodu inceleyelim:

object HelloWorld {
  /* Bu benim ilk Scala programım.
  * Bu program ekrana 'Hello World' yazacak bir programdır.
  */
  def main(args: Array[String]) {
    println("Hello, world!") // Hello World yazdıran kod
  }
}

Şimdi üstteki kodları nasıl kaydedeceğinizi, derleyeceğinizi ve çalıştıracağınızı öğrenmek için aşağıda verilen adımları takip edin:

  • Notepadi açın ve üstteki kodları ekleyin.
  • Dosyayı HelloWorld.scala olarak kaydedin.
  • Komut istemini açın ve dosyayı kaydettiğiniz dizine gidin. Assume it is C:>
  • Komut istemine ’scalac HelloWorld.scala’ yazıp Enter tuşuna basarak kodunuzu derleyin. Eğer kodunuzda herhangi bir hata yoksa komut istemi sizi bir alt satıra atlatacaktır.
  • Bir üstte yazılan komut geçerli dizinde birkaç class dosyası oluşturacaktır. Oluşturulan bu dosyalardan birisi HelloWorld.class dosyasıdır. Bu dosya Java Virtual Machine (JVM) üzerinde çalışabilecek byte kodudur.
  • Şimdi ise programı çalıştırmak için komut istemine ‘scala HelloWorld’ yazınız.
  • Sonuç olarak pencerede ‘Hello, World!’ yazıldığını görmelisiniz.

      C:\> scalac HelloWorld.scala
      C:\> scala HelloWorld
      Hello, World!
    

Temel Syntax(Sözdizimi):

Scala dilini kullanırken aşağıda belirtilenleri aklınızda tutmanız çok önemlidir.

  • BüyüKüçük Harfe Duyarlı - Yani bu demek oluyor ki Scala dilinde Hello ve hello tanımlayıcıları farklı anlamlara gelebilir.
  • Sınıf(Class) İsimleri - Bütün sınıf isimlerinin ilk harfi mutlaka büyük harf olmalıdır..

Eğer sınıf ismini oluşturmak için birkaç kelime kullanılıyorsa, her kelimenin baş harfi büyük olmalıdır.

Örneğin: class MyFirstScalaClass

  • Metot İsimleri - Bütün metot isimleri küçük harf ile başlamalıdır.

Eğer metot ismi birkaç kelimeden oluşuyorsa ilk kelimeden sonraki kelimeler büyük harfle başlamalıdır.

Örneğin: def myMethodName()

  • Program Dosyasının İsmi - Program dosyasının ismi obje(object) ismi ile tamamen aynı olmalıdır.

Dosyayı kaydederken objenin(object) ismini kullanarak kaydetmelisiniz(unutmayın Scala büyük-küçük harfe duyarlıdır) ve dosya isminin sonuna ‘.scala’ uzantısını eklemelisiniz. (Eğer objeniz ile dosyanızın ismi eşleşmezse programınız derlenmeyecektir).

Örneğin: Objenin isminin ‘HelloWorld’ olduğunu varsayarsak, kaydedeceğiniz dosyanın ismini ‘HelloWorld.scala’ olarak kaydetmelisiniz.

  • def main(args: Array[String]) - Scala programı işlemeye her Scala programının zorunlu parçası olan main() metodundan başlar.

Scala Tanımlayıcılar(Identifiers):

Bütün Scala bileşenleri için isim gereklidir. Tanımlayıcılar(identifiers); objeler, sınıflar, değişkenler ve metotlardır. Anahtar kelimeler(keywords) tanımlayıcı(identifier) olarak kullanılamazlar ve tanımlayıcılar(identifiers) büyük küçük harfe duyarlıdır. Aşağıda Scala tarafından desteklenen Dört çeşit tanımlayıcı(identifiers) vardır:

Alfanümerik Tanımlayıcılar(Alphanumeric identifiers)

Alfanümerik tanımlayıcılar birçok harfin, rakamın veya harfin takip edebileceği, harf veya alt çizgi ile başlar. ‘$’ karakteri Scala dilinde anahtar kelime olarak rezerve edildiği için tanımlayıcılar da kullanılmamalıdır. Aşağıdakiler legal olan alfanümerik tanımlayıcılardır:

age, salary, _value,  __1_value

Aşağıdakiler ise illegal alfanümerik tanımlayıcılardır:

$salary, 123abc, -salary

Operatör Tanımlayıcılar(Operator identifiers)

Operatör tanımlayıcılar bir veya birden fazla operatör karakterinden oluşabilir. Operatör karakterleri; +, :, ?, ~ veya # karakterleri gibi basılabilir ASCII karakterleridir. Aşağıdakiler legal operatör tanımlayıcılardır:

+ ++ ::: <?> :>

Scala derleyicisi iç süzgecinde operatör tanımlayıcılarını legal Java tanımlayıcılarına çevirmek için $ karakterini kullanır. Örnek olarak :-> tanımlayıcısı derleyici kısmında $colon$minus$greater olarak temsil edilecektir.

Not: $ işaretinden sonraki ‘colon’, ‘minus’, ‘greater’ kelimeleri; sırasıyla ‘iki nokta’, ‘tire’, ‘büyüktür’ kelimelerinin İngilizce karşılıklarıdır.

Karışık Tanımlayıcılar(Mixed identifiers)

Karışık tanımlayıcılar devamında alt tire ve operatör karakterinin devam ettirdiği alfanümerik karakterlerden oluşur. Aşağıdakiler legal olan karışık tanımlayıcılardır:

unary_+, myvar_=

Burada, unary+_ metot isimi olarak kullanılmıştır ve unary + operatörünü tanımlamıştır. _myvar_=_ ise metot ismi olarak kullanılmıştır ve atama operatörünü tanımlamıştır.

Literal Tanımlayıcılar

Literal tanımlayıcı isteğe bağlı dize olmakla beraber aşağıda görüldüğü gibi tırnakların(backtick) arasına yazılır. Aşağıdakiler legal literal tanımlayıcılardır:

`x` `<clinit>` `yield`

Scala Anahtar Kelimeleri(Keywords):

Aşağıdaki listede Scala tarafından rezerve edilen kelimeler gösterilmektedir. Bu rezerve edilen kelimeler sabit(constant), değişken(variable) veya diğer tanımlayıcı isimlendirilmesinde kullanılamaz.

abstract case catch class
def do else extends
false final finally for
forSome if implicit import
lazy match new null
object override package private
protected return sealed super
this throw trait try
true type val var
while with yield  
- : = =>
<- <: <% >:
# @    

Scala Yorum Satırları(Comments):

Scala Javaya çok benzer şekilde tekli ve çoklu yorum satırlarını destekler. Çoklu yorum satırları iç içer olabilir fakat uygun şekilde iç içe olmalıdır. Scala derleyicisi tarafından kabul edilmeyen karakterler de dahil olmak üzere bütün karakterleri yorum satırlarında kullanabilirsiniz.

object HelloWorld {
  /* Bu benim ilk Scala programım.
  * Bu program ekrana 'Hello World' yazacak bir programdır.
  * Burası çoklu yorum satırına örnektir.
  */

  def main(args: Array[String]) {
    // Hello World yazdırma kodu
    // Ayrıca burası da tekli yorum satırıdır.
    println("Hello, world!")
  }
}

Boş Satırlar ve Boşluklar(Blank Lines and Whitespace):

Sadece boşluk karakterlerinden oluşan bir satır(yorum satırları dahil) Scala tarafından boş bir satır olarak kabul edilir ve tamamen göz ardı edilir.

Yeni Satır Karakteri(Newline Characters):

Scala ifadelerin(statement) noktalı virgülle(;) veya yeni satıra geçerek sonlandırılabildiği satır yönetimli bir dildir. İfadelerin sonuna gelen noktalı virgül çoğunlukla isteğe bağlıdır. Eğer satır üzerinde tek ifade varsa ihtiyacınız yoktur ama istiyorsanız yine de noktalı virgül ekleyebilirsiniz. Fakat alttaki örnekteki gibi tek satır üzerine birkaç ifade yazacaksanız noktalı virgül kullanmalısınız:

val s = "hello"; println(s)

Scala Paketleri(Packages):

Paket, kod modüllerine verilen isimdir. Örneğin, Lift utility paketi şudur: ‘net.liftweb.util’. Paket deklarasyonu altta gösterildiği gibi kaynak kodun yorum satırı olmayan ilk satırındadır:

package com.liftcode.stuff

Geçerli derleme kapsamında referans edilebilen Scala paketleri içe aktarılabilir(import). Aşağıdaki ifade scala.xml paketinin içeriğini içe aktarır:

import scala.xml._

Tek bir sınıf(class) ve objeyi de(object) içe aktarabilirsiniz. Örneğin:, scala.collection.mutable paketinden HashMap içe aktarılıyor:

import scala.collection.mutable.HashMap

Tek bir paketten birden fazla sınıfı veya objeyi içe aktarabilirsiniz. Örneğin, TreeMap ve TreeSet scala.collection.immutable paketinden içeri aktarılıyor:

import scala.collection.immutable.{TreeMap, TreeSet}