Bölüm 3 : Arrays & ArrayBuffer

Bu bölümde Scala Arrays yapılarına kısa bir giriş yapacağız.

1-) Fixed-Length Arrays

Scala’da sabit uzunlukta array tanımlamak için Array tipini kullanırız.
val nums  = new Array[ Int ](10)
//10 adet integer tipinde eleman içeren bir array.Tüm elemanların değeri 0
val a = new Array[String](10)
//10 adet String tipinde eleman içeren bir array.Tüm elemanların değeri null
val s = Array("Eleman1","Eleman2")
//2 elemanlı array
s(0) = "ElemanYeni"

s array’nin elemanları Array(“ElemanYeni”,”Eleman2″) olur

Array’in elemanlarına erişmek için Java’daki [] yerine () karakterlerini kullanırız.

Önemli ! : Array tanımlarken elemanları ilk değerle tanımladığımız new operatörünü kullanmamıza gerek yok.

JVM,bir Scala Array tipini Java Array olarak işler.Örneğin, Scala’da bir Array[Int] aslında Java int[] olarak temsil edilir.Aynı zamanda Scala Array, Java’daki Array’den daha fazlasıdır.Mesela, Scala Array generic tanımlanabilir.T tip parametresi veya abstract tip olmak üzere Array[T] şeklinde bir array tanımlayabiliriz Scala’da.

2-) Variable-Length Arrays / Array Buffers

Java’da boyutu değişebilir array tanımlamak için ArrayList kullanırız.Scala’da ise aynı işlevi ArrayBuffer ile sağlarız.

import scala.collection.mutable.ArrayBuffer
val aBuffer = ArrayBuffer[Int]()
//Ya da new ArrayBuffer[Int].Int tipinde eleman almaya hazır boş array buffer
aBuffer += 1
// += ile eleman ekleyebiliyoruz
aBuffer += (1,2,3,5)
// () ile aynı anda birden fazla eleman ekleyebiliyoruz array'e
aBuffer ++= Array(8,13,21)
// ++= operatörü ile herhangi bir collection dizisini array buffer'a ekleyebiliyoruz
aBuffer.trimEnd(5)
//trimEnd fonksiyonu ile son 5 elemanı array buffer'dan çıkarabiliriz

Diyelim ki bir Array tanımlamak istiyoruz ama boyutunu ne olacağını kestiremiyoruz.Bu durumda önce ArrayBuffer oluşturup,elemanları ekleyip daha sonra bu buffer üzerinde toArray fonksiyonun çağırarak Array oluşturabiliriz.

3-) Traversing Arrays and Array Buffers

Scala’da array elemanları içerisinde gezinmek Java’ya nispeten çok daha kolaydır.

for( i<-0  until a.lenght)

until methodu RichInt class’ının bir methodur.

0 until 10 aslında 0.until(10) çağrımıdır.Ve bu çağrım 0’dan 9’a kadar değer döner gider.Fakat 10 değerini dönmez.

Eğer index’e ihtiyaç duymuyorsak aşağıdaki gibi array’i gezinebiliriz.

for( elem <-  a )

4-) Transforming Arrays

Bu bölüme kadar hemen hemen Java’da yapabildiğimiz array işlemlerini gördük.Bu alt başlıkta Scala’nın Java oranla array işlemlerini nasıl basitleştirdiğini göreceğiz.

val aBuffer = ArrayBuffer[Int](1,2,3)
val result = for(elem<-aBuffer) yield 2 * elem // result = ArrayBuffer(2,4,6) değerlerini içerir

yield fonksiyonu orjinal tip ve değerlerden oluşan yeni bir collection oluşturur.Daha sonra bu yeni array’in her bir değerini 2 ile çarpıp result değişkenine atanır.

Scala’da collection yapıları üzerinde map ve filter methodlarını kullanabilriz.Örneğinde yukarıdaki işlemi aşağıdaki gibi de gerçekleyebiliriz.

val test = aBuffer.map( _ * 2)

map ile _ karakteri ile aBuffer array’nin her elemanını 2 ile çarpar ve geriye yeni bir array dönderir.Ayrıca collection üzerinde filter methodu ile array’in elemanların filtreyebiliriz.

val test 2 =aBuffer.filter( _ % 2 ==0 )

aBuffer array’nin 2 ile bölünebilen elemanlarını bulur ve yeni bir array’e atar.

5-) Common Algorithms

Scala’da toplama ve sıralama işlemleri için built-in fonksiyonlar vardır.

Array(1,7,2,9).sum //19

Array’daki tüm değerleri toplar. sum methodunu kullanabilmek için eleman tipleri numeric olmalıdır. Benzer bir şekilde min ve max methodları ile collection içerisindeki en küçük ve en büyük elemanları elde edebiliriz.

ArrayBuffer("scala","çok","kullanışlıdır").max //"kullanışlıdır" değeri döner
sorted methodu ile bir array veya arraybuffer içerisindeki elemanları sıralayabiliriz.
val b = ArrayBuffer(1,7,2,9) val bSorted = b.sorted //b değişmedi.bSorted ise (1,2,7,9) olur
Eğer collection üzerinde özel bir sorting yapmak istiyorsak,sortWith methodunu kullanabiliriz. val bDescending= b.sortWith(_ > _) // ArrayBuffer(9,7,2,1)

Son olarak eğer bir array/arrayBuffer dizilerinin elemanları print etmek istiyorsak bunun için mkString methodunu kullanabiliriz.

b.mkString(" and ")
//"1 and 2 and 7 and 9"

Scala’da array ve array buffer üzerinden kullanabileceğiz bir sürü method bulunmakta.Bunların hepsini burada anlatmaya yerimiz yetmez.Aşağıdaki linkten bu methodları inceleyebilrsiniz.

http://www.scala-lang.org/api/2.11.5/index.html#scala.collection.mutable.ArrayOps

6-) Multidimensional Arrays

Scala’da çok boyutlu array tanımlamak için ofDim methodunu kullanabiliriz.

val matrix = Array.ofDim[Double](3,4)
//Double tipinde 3 satır ve 4 kolonlu bir array.

Array’in elemanlarına erişmek için veya değer atamak için parantez çiftlerini kullanabiliriz.

matrix(satır)(kolon) = 42

 

Yazdığımız kod örneklerini github üzerinden inceleyebilirsiniz.

https://github.com/mstzn36/scala-examples

 

EOF

Kaynakça
http://horstmann.com/scala/
http://www.scala-lang.org/api/2.11.5/index.html

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s