Scala Dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Scala Dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

27 Ekim 2010 Çarşamba

Scala Giriş – 3

Dersi http://www.mediafire.com/?a5r51l8281ayqaw burdan PDF olarak indirebilirsiniz.

Demetler ( Tuples )

Demetlerde listeler gibi değişmezdir fakat burda listelerden şöyle bi farkı var.Listelerde sabit bir tipte oluştururken tüm listeyi yani List[Int] mesela, demetlerdeyse böyle bir zorunluluğumuz yok.
Demetleri Tuple[Int,String] vs. şeklinde oluşturabiliriz.

Şimdi hemen bir demet nasıl oluşturulur bakalım.

val abukSubukSeyler = ("Cem","1",3,89.2,"e") // Gördüğünüz gibi demet oluşturmak bu kadar basit
Bunu Tuple[String,String,Int,Double,Char] şeklinde düşünün.

Demetimizden herhangi bir öğeye ulaşmak istersek.

val abukSubukSeyler = ("Cem","1",3,89.2,"e")
println(abukSubukSeyler._4)

Bize 89.2 sonucunu döndürür.Sebepte demetlerde sıra 1 den başlıyor , listeler gibi 0 dan değil.Bunu demet_adı._N şeklinde düşünebilirsiniz.N ' inci eleman.
Hem burda şöyle Bir şey de düşünebilirsiniz.Neden listelerdeki gibi istediğimiz sıradaki elemanı
demet_adı(eleman_sırası) şeklinde kullanmıyoruz diye.Burdaki neden de Listelerde tek tip eleman var fakat demetlerde birden fazla değişik eleman olduğu için biraz daha değişik biçimde ulaşıyoruz.
Demetler için Listelerin metodlarını geçerlidir , kullanabiliriz.

Sets ve Maps

Sets
Sets(kümeler) hem değiştirilebilir(mutable) , hemde değişmez olarak(immutable) olarak kullanabilir.Bunları Arrayler mutable ve Listeler (immutable) olarak düşünebilirsiniz.

Değişmez kümeler oluşturmak istersek

var immutableSet = Set("Cem",2,3,4,5) // kümemizi oluşturduk.
immutableSet += "scala" // scala adlı yeni öğe ekledik.Bunu immutableSet = immutableSet + scala şeklindede yapabilirdik.
println(immutableSet.last) // son öğesini ekrana yazdır dedik.Tabi bunu yaptıktan sonra last metodunu silip tüm kümeye bakın.

Değişebilir küme oluşturmak istersek.

Tek yapmamız gereken en üste import scala.collection.mutable.Set 'i eklememiz lazım.
var mutableSet = Set("Cem",2,3,4,5)
immutableSet += "scala"
println(immutableSet.last) // bu sefer sonuca bakın ve ikisi arasındaki fakrı görün.

Şimdi bu mutable ve immutable Setler arasındaki fark nedir açıklayalım.İlk setimizde dikkat ettiyseniz import ile Set'i eklemedik.Zaten compiler(derleyici) bunu otomatik olarak
import scala.collection.immutable.Set olarak algılıyor.Bizim eklememize gerek yok.
Ve burda iki Setin de “ + “ metoduna göre davranışları farklı.Nasıl derseniz? İmmutable Setlerde sadece mevcut Set'e öğeyi ekliyor.Mutable Setlerdeyse Öğeyi ekleyip yeni bir Set döndürüyor.


Maps (Mapler)
Mapler de , Setler gibi mutable ve immutable olarak oluşturulabiliyor.

Şimdi bir immutable Map oluşturmak istersek

val ilkMap = Map(1->"cem",2->"Cem",5->1,3->”Ezgi”)
println(ilkMap(5)) // 5 anahtarına sahip öğeyi yazdır.

Burda 1 , 2 ,5 diye giden sıra Keys(Anahtarlar) oluyor.”cem”,”Cem”,1,”Ezgi” olan sıraysa Values(Değerler) oluyor.

Mutable bir Map oluşturmak istersekte gene en başa import scala.collection.mutable.Map ekliyoruz

val ikinciMap = Map[Int,String]()
ikinciMap += (1 -> "cem")
ikinciMap += (2 -> "Ecem")
ikinciMap += (11 ->"Özgür")
println(ikinciMap(11)) //şeklindede oluşturabiliriz.

Fakat burda fark Keylerin Int tipinde , Values larınsa String tipinde olcağını belirtiyoruz.Mesela 11 inci keyin değerini tırnak içine almadan 5 yapın ve sonucu görün.


Dosya'dan Satır Okuma
İlk önce import scala.io.Source diyerek satır okumak için Source classımızı ekliyoruz.

val dosya = "/home/dyrnade/cem.log"
if (dosya.length > 0) {
for (line <- Source.fromFile(dosya).getLines){
println(line) }
}else{
Console.err.println("HATA! Lütfen Dosya Adını Doğru Yazınız..!")
}

Burda ilk dosya değişkenini oluşturup Başlangıç Dizininde oluşturduğum “cem.log” adlı log dosyasının yolunu belirttim.Daha sonra if diyip dosya.length dedik ve dosyayı açtık.Daha sonra
for (line <- Source.fromFile(dosya).getLines) diyerek line adlı değişkene Source.fromFile(dosya).getLines diyerek açtığımız dosyayı Source nesnesine bağlayıp getLines diyerek satırları okuduk. println(line) diyerekte okuduğumuz satırları yazdırdık.Sonra da
else{
Console.err.println("HATA! Lütfen Dosya Adını Doğru Yazınız..!")
}

Eğer bi hata varsa HATA! Lütfen Dosya Adını veya Yolunu Doğru Yazınız..! diye ekrana çıktı vermesini sağladık

Scala Giriş - 2

Dersi http://www.mediafire.com/?8y61t3xky3dxevh burdan indirebilirsiniz


Listeler

Scala'da listeleri oluşturmak için bir çok yöntem var.
İlk önce Listeleri import etmemiz lazım. “ import scala.List “ ifadesiyle ekliyoruz.

val liste = List(1,2,3,4) dediğimizde liste adında ve 1,2,3,4 elamanlarından oluşan bir liste oluşturcağımızı List ifadesiyle belirtelerek oluşturmuş olduk.

val liste = List(1,2,3,4) // Birinci listemizi oluşturduk
val liste1 = List(5,6,7) // İkinci listemizi oluşturduk
val listebirlesimi = liste:::liste1 // Burda yaptığımız işlemse oluşturduğumuz iki listeyi birleştirdik.
println(listebirlesimi) // Ve oluşturduğumuz listelerden oluşan yeni liste (listebirlesimi) 'yi yazdırdık

Burda dikkat ederseniz birleştirme işlemini “ ::: “ operatörü veya metodu ile yaptık.
Çalıştırdığımızda da bize “ List(1, 2, 3, 4, 5, 6, 7) “ sonucunu döndürür.

İstersek bir listenin başına öğe ekleyerekte yeni bir liste oluşturabiliriz.

val liste = List(1,2,3,4) // listemizi oluşturduk
val liste1 = 1::liste // 1 ' i , “ :: “ operatoruyle listemize ekledik ve “ liste1 ” adlı yeni liste oluşturduk
println(liste1) // yeni listemizi yazdırdık.

Siz burda bu işlemi birden fazla öğe eklemeyi deneyerek “val liste1 = 4::7::1::liste” şeklinde deneyin.Ve ya listenin sonuna eklemeye çalışarak “val liste1 = liste::1::2” şeklinde deneyin ve sonuçları görün.

Listelerimizi “ val liste = List(1,2,3,4) “ bu şekilde oluşturuyorduk.İstersek bunu “ val liste1 = 1::2::3::4::Nil “ şeklinde de oluşturabiliriz.
Şimdi burda diceksiniz Nil ne işe yarıyor. Burda Nil boş bir liste anlamında ve listenin son elemanı sonlandırıcısı şeklinde düşünebilirsiniz.Nil ifadesini silin ve sonucu görün.

Bazı liste metodları ve kullanımı

Boş bir liste oluşturmak.
List() veya Nil

Sırasını verdiğimiz liste elemanını yazdırmak.

val liste1 = 1::2::3::4::Nil
println(liste1(3)) // Burda liste1(3) diyerek üçüncü sıradaki elemanı ekrana bas diyoruz.Fakat burda şöyle bişey var.Listelerde sıra 0 ' dan başlıyor.Yani 0 ıncı elamanın karşılığı listeden “ 1 “ oluyor.

String Listelerindeki elemanların sayısını , karakter sayısına göre bulmak

val liste = List("Cem","Can") // String tipinde listemizi oluşturduk iki elemanlı.
println(liste.count(a => a.length==3)) // Burda liste.count diyerek elemanları saycağımızı belirttik.
Fakat (a => a.length==3) ifadesiylede a adlı bi değişken oluşturup bunun karakter sayısı 3 olan elemanları bul “ a.length==3 ” diyerek count metoduna koşulumuzu belirttik.Yani burdaki işlem karakter sayısı 3 olan eleman sayısını bize ver dedik.
Siz burda 3 ü 5 yapın deneyin veya daha çok eleman ekleyip deneyin.

Sırasını belirttiğimiz elemandan itibaren elemanları yazdırmak

val liste = List("Cem","Can","Özgür","Fırat","Oguz")
println(liste.drop(1)) // 1inci sıradaki eleman Can olduğuna göre Can'dan başlıycak ve son elemana kadar olan tüm elemanları ekrana basıcak.Sırayı değiştirerek kontrol edebilirsiniz.

Bir elemanın listede olup olmadığını kontrol etmek

val liste = List("Cem","Can","Özgür","Fırat","Oguz")
println(liste.exists(a=> a == "Fırat")) //exists ifadesiyle kontrol ediyoruz ve “Fırat” ' ı kontrol ettik.Bize “true” sonucunu döndürür.

String Listelerindeki elemanları , karakter sayısına göre bulmak

Hatırlarsanız count ile elemanların sayısını buluyorduk burdaysa direkt elemanları buluyoruz.
val liste = List("Cem","Can","Özgür","Fırat","Oguz")
println(liste.filter(a=> a.length == 5 )) // filter metoduyla 5 karakterdan oluşan elemanları ekrana yazdıyoruz.

Belirlenen bir harfe göre tüm listeyi kontrol etme

Baş harfe göre kontrol etmek istersek
val liste = List("Cem","Can")
println(liste.forall(a=> a.startsWith("C"))) //forall ile hepsi için diyerek startsWith metoduylada “C”
ile başlıyor mu diye kontrol ediyoruz.Bize “true” sonucunu döndürür.Burda “C” yi “c” ile değiştirip sonucu görün.

Son harfe göre kontrol etmek istersek
val liste = List("Cem","Can")
println(liste.forall(a=> a.endsWith("m"))) // Bize “false” döndürür çünkü sadece Cem öğesi “m” ile bitiyor.

Herbir elemanı print ile yazdırmak

val liste = List("Cem","Can")
println(liste.foreach(a=> print(a)))

Bunu daha kısayoldan
val liste = List("Cem","Can")
println(liste.foreach(print)) // bu şekildede yapabiliriz Hiçbir farkı yok.

İlk elemanı yazdırmak

val liste = List("Fırat","Özgür","Oğuz")
println(liste.head)

Son eleman hariç tüm listeyi yazdırmak

val liste = List("Fırat","Özgür","Oğuz")
println(liste.init)

Son elemanı yazdırmak

val liste = List("Fırat","Özgür","Oğuz")
println(liste.last)

Listenin boş olup olmadığını kontrol etmek

val liste = List("Fırat","Özgür","Oğuz")
println(liste.isEmpty) // false cevabını döndürür

Listenin kaç elemandan oluştuğunu bulmak

val liste = List("Fırat","Özgür","Oğuz")
println(liste.length)

İlk eleman hariç tüm listeyi yazdırmak

val liste = List("Fırat","Özgür","Oğuz","Cem")
println(liste.tail)

Liste elemanlarının sırasını ters çevirerek yazdırmak

val liste = List("Fırat","Özgür","Oğuz","Cem")
println(liste.reverse) // Sonuç “ List(Cem,Oğuz,Özgür,Fırat) “ olur.

Belirlediğimiz karakter uzunluğunda olan elemanları listeden silmek

val liste = List("Fırat","Özgür","Oğuz","Cem")
println(liste.remove(a => a.length==5))

Listeyi Stringe dönüştürmek

val liste = List("Fırat","Özgür","Oğuz","Cem")
println(liste.mkString(",")) // Sonuç “ Fırat,Özgür,Oğuz,Cem “ olur.Burda yaptığımız listeyi stringe dönüştürüp aralarına virgül koymak.Siz virgülü farklı bir karakterle değiştirebilirsiniz.Mesela “ * “

Tüm elemanlara yeni bir karakter veya karakter grubu eklemek

val liste = List("Fırat","Özgür","Oğuz","Cem")
println(liste.map(a => a + "cem")) // Sonuç “ List(Fıratcem, Özgürcem, Oğuzcem, Cemcem) “ olur

Elemanları istediğimiz şekilde alfabetik olarak sıralamak

val liste = List("ahmet","Cem","oğuz","Özgür")
println(liste.sort((s,t)=> s.charAt(0).toLowerCase > t.charAt(0).toLowerCase))

Şimdi burda kafanız karışmasın.(s,t) adında değişkenlerimizi oluşturduk.Daha sonra charAt(0) demek ilk harf ve toLowerCase demeklede küçült dedik.Yani ilk harfi küçült.Sonra “ > “ dedik bu burda önemli.” > “ demek ile “ < “ demenin arasında şöyle bir fark var.Elemanları alfabe sırasına göre mi yoksa alfabe sırasının tersine göre mi sıralıcağımızı söyledik. “ > “ ile alfabe sırasının tersine göre elemanları sırala demek oluyor.Daha sonrada tekrar t.charAt(0).toLowerCase dedik.

17 Ekim 2010 Pazar

Scala Giriş : 1. Bölüm

Dersi PDF olarak http://www.mediafire.com/?zvgdrbcewryky48 burdan indirebilirsiniz.


Merhabalar,
Şimdi Scalayı genel yapısını tanıycaz daha sonra derinlemesine dalıcaz.
İlk olarak şu fonksiyonları söyleyim.Ekrana yazdırmayı print veya println ile yapabiliriz.Açıklama satırlarını // veya /* */ ile oluşturabiliriz.

Değişken Tanımlama 
Scala'da değişken tanımlamak için bir çok yöntem var.

İlk olarak 
val değişken_adı = "cem" dediğimizde değişken_adı adında bi değişken tanımladık ve değerini cem yapmış olduk.

İkinci olarak
val değişken_adı :String = "cem"  diyerek tanımlıyoruz.Fakat burda ":String" ifadesiyle değişkenin tipini belirtiyoruz.Sizde şunu deneyin val değişken_adı :String = 12
sonucu görün.

Üçüncü olarakta
val değişken_adı  :java.lang.String = "cem" olarakta tanımlayabiliyoruz.İkinciyle aynı.

Fonksiyon Tanımlama

    def max(x: Int, y: Int): Float = {
      if (x > y) x
      else y
    }
  

Şimdi bu fonksiyonun yapsını açıklayalım.Burda def ile maxDeger adında bi fonksiyon oluşturcağımızı söyledik ve iki parametre belirttik Int tipinde ve sonrada :Float = { diyip sonucun ne tipte olcağını söyledik.Float dediğimiz için virgüllü sayı şeklinde sonuc vericek.Int deseydik tam sayı şeklinde.String dersek nolcağını siz deneyin.Ve ya x'in tipini Float yapın deneyin.(Virgüllü Sayılar Scala'da virgül ile değil nokta ile belirtilir.Yani (1.2) şeklinde mesela)
Sonrada fonksiyon içinde if kullanıp koşula göre çıktı vermesini sağladık.
Fonksiyonu nası kullanırız derseniz fonksiyonun hemen altında println(max(11,4)) diyin ve çalıştırın.

Örnek kullanım:

def max(x: Float, y: Int): Double = {
      if (x > y) x
      else y
    }
println(max(1.2F,2))
Burda 1.2F diye belirtmemizin sebebi Float tipinde olduğunu belirtmek için "F" yazdık 1.2F şeklinde.Yazmazsak hata verir Double tipinde algıladığı için.

Array(Dizi) Tanımlama :
Arrayleri'de bir çok şekilde oluşturabiliriz.Mesela

val array_adı = new Array[String](eleman_sayısı) şeklinde oluşturabilceğimiz gibi
val array_adı : Array[String] = new Array[String](eleman_sayısı) şeklindede oluşturabiliriz.

Örnek kullanım-1: 

val programlamaDili :Array[String] = new Array[String](4)
programlamaDili(0) = "Java"
programlamaDili(1) = "Scala"
programlamaDili(2) = "Ruby"
programlamaDili(3) = "Lisp"
for (i <- 0 to 3)
 print(programlamaDili(i))

Şimdi burda naptık açıklayalım.Önce arrayimizi tanımladık burda problem yok.Sonrada arrayimizin elemanlarını tanımladık.Yani programlamaDili(0) diyerek Dizinin ilk elamanını kullancagımızı belirttik ve bunun değerinin "Java" olcağını söyledik.Bi de burda şunu söyleyelim (4) diyerek eleman sayısını belirtiyoruz dedik fakat dizilerde eleman sırası 0 ile başlar.Yani birinci elemana programlamaDili(0) diyerek ulaştık 3üncü elemanaysa programlamaDili(2) diyerek.
Sonrada for döngüsü oluşturduk ve bu for döngüsünde i diye bi değişken tanımladık."<-" operatörlerinin burdaki anlamıysa ; sol tarafında değiken , sağ tarafındaysa arancak değişkenler için diyebiliriz.Biraz karışık oldu ama yani burda bunu i'yi arrayimizdeki 0'ıncı elemandan 3üncü elemana kadar tara gibisinden bişey.Umarım yanlış ifade etmiyorum.0 to 3 'te 0'dan 3'e kadar anlamında.Burda peki neden 0 to 3 yerine "programlamaDili" diyerek arrayimizin adını yazmadık.Çünkü elemanları indexlerine göre yazdırcagımız için Int tipinde olmak zorunda diyelim.Daha sonrada ztn elemanları yazdırdık print(programlamaDili(i)) diyerek.Sizde 0 to 3 değilde 3 to 4 deneyin veya 1 to 3 deneyin sonuçları görün.

Bunu bu şekilde kullanabilceğimiz gibi istersekte;


Örnek kullanım-2:

val programlamaDili :Array[String] = new Array[String](4)
programlamaDili.update(0,"Java")
programlamaDili.update(1,"Scala")
programlamaDili.update(2,"Ruby")
programlamaDili.update(3,"Lisp")
for (i <- 0 to 3)
  println(programlamaDili.apply(i))    //Bu şekildede kullanabiliriz.

Son olarak istersek'te Arrayleri şu şekildede oluşturabiliriz :

Örnek kullanım-3:

val sayilar = Array(1,2,3,4,5) /* Direkt sayilar diye bi değişken tanımladık ve bunu Array(1,2,3,4,5) diyerek 5 elemanlı bi Array olduğunu tanımladık.Burda Array tipini belirtmiyoruz çünkü sayı girdiğimiz için otomatik olarak Int tipinde algıladı. */

val sayilar = Array(1,2,3,4,5)  
   println(programlamaDili(2)) /* burda tahmin etceğiniz gibi (1,2,3,4,5) arasından 2'yi yazdır demiyoruz. 2inci sıradaki elemanı yazdır dıyoruz. */

16 Ekim 2010 Cumartesi

Scala Programlama Dilini Birlikte Öğreniyoruz

Scala İçin Gerekli Ortamların Hazırlanması

Merhaba Arkadaşlar,Bundan sonra yeni bi seriye başlıyoruz.Scala programlama dilini birlikte öğrenmeye çalışıcaz.Ben nasıl bi yol izliyorsam öğrenirken hepsini birlikte yaşıycaz.Scala'dan bahsetmek gerekirse kısaca ; Scala , hem nesne yönelimli , hemde fonksiyonel programlamaya olanak tanıyan yeni nesil ve güçlü bi dildir.Gelecekte de bayağ büyük işler başarıcağı için şimdiden hobi amaçlı başlamayı düşündüm.Gerçi Java hariç diğer hepsi benim için hobi amaçlı diller :) Neyse işin hikayesini bırakalım da sadete gelelim.

Şimdi Scala JVM platformunda bi dil ve benim favorim NetBeanste kurulum yapıcaz.Anlatım Ubuntu için geçerlidir.

İlk olarak bize gerekenleri indirelim.http://www.scala-lang.org/downloads Burdan Scalayı indiriyoruz.Şu an 2.8.0 sürümünde.

İlk olarak indirdiğimiz Scala'yı herhangi bi yere açalım.Açtıktan sonra konsolu açalım ve konsolda "set $SCALA_HOME = /home/kullanıcı_adı/scalayı_çıkarttığınız_klasör/scala-2.8.0.final/bin/" bu bende "set $SCALA_HOME = /home/dyrnade/programming/scala-2.8.0.final/bin/" şeklinde.Bunu yazıp entera basın $SCALA_HOME adında değiken oluşturduk daha sonrada bunu PATH 'e ekleyelim.PATH'e bunu eklemek içinde "export PATH=$PATH: $SCALA_HOME" yazın ve tamamdır.Scala için işimiz bitti.

Şimdi daha sonra da (biraz acayip oldu bu laf :D ) NetBeans için eklentisini kuralım.İndirdiğimiz eklentiyi de bi yere açalım daha sonrada NetBeanste üst menüden Tools sekmesinden Plugins bölümüne tıklayın.Çıkan pencerede Downloaded sekmesine gelip Add Plugins diyin.Açılan pencerede de bu çıkarttığınız Scala eklentisinin klasörüne gelip klasör içindekilerin Hepsini CTRL+A ile seçip tamam diyin.Gerisi Next Next zaten.Sonunda başarıyla Scala için gerekli herşeyi kurmuş olduk :)

Kaynak :