Scala classes for Java primitives & tuples and multiple assignments

Merhaba arkadaslar, bu yazımda Java’da kullandığımız primitive tiplerin Scaladaki karşılığı(yada tam tersi düşünülebilinir) ile tuples ve multiple assigment konularına değinicem.

Scala classes for Java primitives

Öncelikle Scala’da primitive tip diye birşey olmadığını bilelim. Java’daki int,char,double vs. gibi primitive tipler Scala’da yoktur.

Java’daki autoboxing mekanizması bize bir örnek olabilir. Autoboxing sayesinde object bekleyen bir methoda primitive parametre gönderebiliyoruz. Ancak Java’da 2.toString() gibi methodu çağıramayız.

Scala herşeye obje gibi davranır. Bu 1 sayısı da olabilir yada “1” gibi bir tek karekterlik string de olabilir. Scala’nın herşeye obje gibi davranmasından dolayı 1.toString() yada 1.equals() gibi methodları çağırabilir.

Aslında şu vardır. Java’daki int, double, short gibi primitive tiplerin yerine Scala’da Int, Double, Short (ilk harfleri büyük olacak şekilde) tipleri vardır.

* Yukaridaki kod’da Scala.Int olan capacity objesi Scala tarafından java’daki int olarak davranılır. Ve bu runtime’da gerçekleşir. Bu type conversion gerçekleşirken runtime sırasında performans kaybı yaşanmaz.

* Yine 1.to(3) yada 1 to 3  dediğimizde Scala arka planda intWrapper() methodunu çağırmaktadır. Bu method Int tipini scala.runtime.RichInt ‘e çevirir ve ardından to() methodunu çağırır.

* RichInt, RichDouble, RichBoolean gibi sınıflar wrapper class olarak düşünülebilinir. Java’daki primitive ve String’e karşılık gelir.

Scala class hiyerarşisinde en tepede Any sınıfı bulunmaktadır. Diğer tüm sınıflar bu sınıfın alt sınıfıdır. Java’daki Object sınıfı gibi düşünülebilir. Any sınıfında == , !=, equals, hashcode ve toString() gibi methodlar bulunur. ==, != final’dır, override edilemez.

Any classı 2 kola ayrılmaktadır. Bunlar; AnyVal ve AnyRef sınıflarıdır. Aslında value ve reference olarak ayrılır desek daha doğru olur.

AnyVal, 9 adet value type içerir. Bunlar; Byte, Short, Char, Int, Long, Float, Double, Boolean, ve Unit. İlk 8 type Java’daki primitive tiplere karşılık gelmektedir. Unit ise void gibi düşünülebilinir. Sınıf hiyerarşisi ve data type’lara daha sonra detaylıca değinmeyi düşünüyorum, şimdilik yeterli

Tuples and Multiple Assignments

Method’dan birden fazla parametre return etmeyi amaçladığımızı düşünelim. Örneğin; Ad, Soyad ve Email döndürmek istiyoruz. Java ile bunu birkaç yol ile yapabiliriz.

Bunlar; [] dizi , ArrayList yada bir Person sınıfı oluşturup class instance’ı döndürmek olabilir.  Ancak bunları yapmak biraz zor, gereksiz ve saçmadır( bence ) . Scala ile bunu kolayca yapabiliriz çünkü Scala tuple(demet) ve multiple assigments yapısını desteklemektedir.

Tuple ; İmmutable’dir ve farklı tipte veri içerebilir.

* Yukarıdaki method bize birden fazla ve farklı tipte değer döndürüyor.

* Şu şekilde methoddan birden fazla değer alabiliriz;

* Tuple içeriğine şu şekilde de ulaşabiliriz. person._X   burada X bir sayıdır ve 1 den baslar methoddan dönen değişken sayısına kadardır.

* Ayrıca şu şekilde de veri alabiliriz;

* Aklımıza şu gelebilir; Eğer return olunan sayıdan daha az yada daha fazla değişken ile karşılarsak methodu ne olacağı sorusudur. Bu tip bir durumda compile error oluşacaktır. Örneğin şu şekilde methoddan veri aldığımızı varsayalım;

* Yukarıdaki kodu derlediğimizde şu hatayı görebiliriz; constructor cannot be instantiated to expected type; found : (T1, T2, T3) required: (String, String, String, Int) val (nick,nick2,email) = getPersonInfo(1)

* Kısaca bizden 3 String ve 1 Int değişken ile karşılamamızı istemektedir.

* Tuple multiple assignments dışında actor’ler arası mesajlaşma da kullanılmaktadır. Yeri ve zamanı geldiğinde onlara değiniceğiz insaAllah.

* Yazımı burada sonlandırmak istiyorum. Bir sonraki yazıda görüşmek üzere. ~ Alican Akkus

* Mutlu kalın , Kod’la kalın ve bol bol Çay için

 

1181 Total Views 1 Views Today