Collections and Type Inference

Merhaba arkadaşlar, bu yazımda Collection ve type inference konularına değiniceğim biraz.

Java Generics ifadelerin tip güvenliğini sağladığını biliyoruz. Scala type inference olduğu için Java Generics’lerden daha güvenlidir diyebiliriz.

Scala collectionsları iki gruba ayırabiliriz. Bunlar; mutable ve immutable collections. Mutable collectionslar update edilebilir yada genişletilebilir. Ekleme, çıkarma vs. gibi işlemler yapılabilir. İmmutable collectionslar ise değiştirilemez, daha çok sabit olarak adlandırılır.

Scala collectionlar scala.collection paketi altında bulunur. Bu paket altında da scala.collection.mutable ve scala.collection.immutable paketleri bulunmaktadır.

 

scala.collection.immutable : Bu paket altındaki collectionslar create edildikten sonra değiştirlemeyeceğini garanti eder. Farklı zamanlarda collectionsa erişilince aynı elementleri yield(ürün) eder.

scala.collection.mutable : Collectionslar üzerinde operasyonlara izin verir.

Collectionlar strict(sıkı) yada lazy(tembel) olabilir. Scala collections default olarak strict’dir.

Scala collections’da bir çok class ve trait(interface) bulunur. Mutable ve immutable collactionlar için main trait Iterable(sıralı) trait’dir.

2015-01-24 16:13:00

collections.mutable

* Scala collection hiyerarşisine bakabilirsiniz.

Scala Lists

Array’a benzerdir. Aynı tip elementler içerir. İki farklı özelliği vardır. Birincisi immutable’dır  yani sonradan değiştirilemez , diğeri ise linkedlist yapıdadır. Oysa array’ler flat(düz)’dırlar.

 0 ) java.util._ ifadesi Java deyiminde ki java.util.* ile aynıdır. util paketi altındaki tüm classları import eder.

1 ) Birinci ArrayList ifadesi explicit olarak declare edilmiş tip olarak. Fakat gereksizdir.

2 ) İkinci declarasyonda type inference ‘in avantajını görebiliriz.

Scala generics’leri java generics’den neden daha güvenlidir ona bir bakalım;

Scala is vigilant about the type of the object you instantiate . Örneğe bakarsak list1  Int tipinde bir listeye işaret etmekte, list2 ise ArrayList olmasına rağmen unspecified type’dır. Bu durumda Scala aslında ArrayList[Nothing] tipinde bir liste oluşturur. İlk listeyi ikinci listeye atamaya çalıştığımızda type mismatch hatası alırız.

* Nothing, Scala da her classın subclass’ıdır.

Peki spesific bir type belirtmeden nasıl ArrayList oluştuturuz? Any reference ile oluşturabiliriz.

Yukarıdaki kod içerisinde list1 ArrayList[Int] , list2 de ArrayList[Any] tipindedir. Ayrıca iki tane ref1 ve ref2 referansı oluşturduk.  Any type, Scala type’daki en süperclass’dır.

* ref2 = ref1 ifadesi doğrudur ve compile olur. Java’daki tabir ile integer bir sayıyı Object referansa atamış olduk. Ancak collection atamasını yapamadık. Scala buna izin vermez , keyfi olarak bir collectionsu başka bir referansa atayamayız. Gerekçelerine daha sonra değinicem. Scala collectionslar bu yüzden Java genericslere göre daha type safe’dir.

ListExample.object

 

List, ekleme ve silmenin hızlı yapıldığı veri yapısıdır. Fakat index olarak erişmede o kadar hızlı değildir.

Sort edelim;

Daha anlaşılılır ve functional olarak yapalım;

Scala Sets 

Set data structure , duplicate veriyi engeller. İki tip Set vardır; mutable ve immutable. Scala default olarak immutable olanını kullaır. Eğer mutable olan Set tipini kullanmak istiyorsanız explicit olarak scala.collection.mutable.Set import etmelisiniz.

Birçok method bulunmakla beraber bazı methodlara değinebildim.

Yazımı burada sonlandırmak istiyorum, bir sonraki yazıda list ve set ile birlikte map collectiona da değinmeye çalışacağım.

Mutlu kalın , kod’la kalın ve bol bol çay için

Yazımı çay hakkındaki bir söz ile bitirmek istiyorum

…yazsam okusam okusam yazsam biri devamlı çay verse bana…

Ömer Lütfi Ege

Bir sonraki yazıda görüşmek üzere.

~ Alican Akkus

 

 

1157 Total Views 2 Views Today