Neden Scala?

Türkiye Scala Kullanıcıları Topluluğu

* Google Groups - Scala-turkiye
* Github 
* https://github.com/organizations/scala-turkiye    

Anahatlar

Gelişim

Scala Neydi?

Nesne Yönelimli

case class Person(name:String, age:Int)
val p = Person("ali", 15)

Fonksiyonel Programlama

 val lon = List(1,2,3,4)
 val aon = Array(1,2,3,4)
 val added1 = lon.map(x => x + 1)
 val added2 = aon.map(x => x + 2)
 lazy val connection = //db baglantisi ac.

Güçlü Tip Sistemi

type Complex = HashMap[Int, List[Set[Person]]]
val ds = new Complex
val age = post.getData("age").toInt // Compile hatasi!!
val age2 =  post.getData("age").getOrElse(0) 

Tanımlar

Yatay ölçekleme (Scala out/Scale down)

Dikey ölçekleme (Scale up)

Parallelism

Concurrency (Eş zamanlılık)

Concurrency problemi

var x = 0
async { x = x + 1 }
async { x = x * 2 }
// muhtemel sonuçlar 0, 1, 2

Concurrency problemi

Senkronizasyon maliyeti

Threaded vs Evented

Threaded sunucular

Blocking Scala kodu

// Apache HttpClient ile example.com'dan bir istek yapılıyor.
val client = new HttpClient()
val method = new GetMethod("http://www.example.com/")

// executeMethod blocking, senkron bir çağrıdır
val statusCode = client.executeMethod(method)

// Bu satır çalıştığında example.com'dan cevap alındığından eminiz.
println("Server responsed with %d".format(statusCode))

Sınırsız thread oluşturmanın dezavantajları

Thread yaşam döngüsü maliyeti

Sınırsız thread oluşturmanın dezavantajları

Kaynak tüketimi

Sınırsız thread oluşturmanın dezavantajları

Kararlılık

Evented sunucular

Non-blocking Javascript kodu

var callback = function(data) {
  console.log("Callback fired with: " + data);
};

$.get('/example', callback);

// Bu satır çalıştığında uzak servis çağrısıdan büyük ihtimalle henüz cevap dönmemiş olacak. 
console.log('Bu satır callbackten önce çalışabilir!');

Play Framework ile async örneği

object ProxyController extends Controller {

  def proxy = Action {
    val responseFuture: Future[Response] = WS.url("http://example.com").get()

    val resultFuture: Future[Result] = responseFuture.map { resp =>
      Status(resp.status)(resp.body).as(resp.ahcResponse.getContentType)
    }

    Async(resultFuture)
  }

}

Play Framework ile async örneği

// Paralel 3 adet servis çağrısı yapılıyor.
val fooFuture = WS.url("http://foo.com").get()
val barFuture = WS.url("http://bar.com").get()
val bazFuture = WS.url("http://baz.com").get()

for {
  foo <- fooFuture
  bar <- barFuture
  baz <- bazFuture
} yield {
  

  Ok(...)
}

Türkiye'de Scala Kullanımı

Dünya Scala ve Play Kullanımı

Scala Trendler 1

Scala Trendler 2

Scala Trendler 3

Scala @ VNGRS - Bookish.com

Ekip