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.
İ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!
Ş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:
Sonuç olarak pencerede ‘Hello, World!’ yazıldığını görmelisiniz.
C:\> scalac HelloWorld.scala
C:\> scala HelloWorld
Hello, World!
Scala dilini kullanırken aşağıda belirtilenleri aklınızda tutmanız çok önemlidir.
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
Eğer metot ismi birkaç kelimeden oluşuyorsa ilk kelimeden sonraki kelimeler büyük harfle başlamalıdır.
Örneğin: def myMethodName()
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.
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 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 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 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ı 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`
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 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!")
}
}
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.
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)
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}