SlideShare uma empresa Scribd logo
1 de 76
Baixar para ler offline
The Kotlin
Programming Language


             Svetlana Isakova
What? Who? Why?
   A modern language
       Statically typed
       Object-oriented
       General-purpose

   Compiler
       JVM byte code
       JavaScript (not GWT)
                               2
What? Who? Why?
   A modern language
       Statically typed
       Object-oriented
       General-purpose

   Developed by JetBrains
       Open source
       Intended for industrial use
                                      3
Dynamic vs static typing

   Dynamically typed languages
       Easier to learn
       Easier to write small programs

   Statically typed languages
       Programs run much faster
       More powerful IDE
       Easier to support huge projects

                                          4
Scala as a candidate

   Goal
       statically typed
       JVM-targeted
       concise language

   Scala
       too complicated
       too implicit
       too difficult to create a good IDE
                                             5
Era of new industrial languages

   Ceylon   Red Hat / Jboss    (April 2011)
   Scala    Typesafe           (May 2011)
   Kotlin   JetBrains          (July 2011)
   xTend    Eclipse / itemis   (November 2011)




                                                  6
Kotlin “Hello, world”
 fun main(args : Array<String>) {
     Greeter().greet()
 }


 class Greeter(name : String = "world") {
     val greeting = "Hello, $name!"
     fun greet() {
         println(greeting)
     }
 }                                          7
Problems and Solutions

   Extending Existing APIs
   Handling Absent Values
   Case Analysis
   Multiple Implementation Inheritance
   Collection transformation
   Variance of Generic Types
   Builders

                                          8
Extending Existing APIs



                          9
Regular expression example
   Java
    Pattern p = Pattern.compile("d*");
    Matcher m = p.matcher("123");
    if (m.find())
        String result = m.group();


   Scala
    val r = "d*".r
    val result = r.findFirstIn("123")
                                        10
Scala: implicit conversions
val r = "d*".r
 

trait StringOps { 
  ...
  def r: Regex = new Regex(toString)
}
 

implicit def augmentString(x: String)
                    = new StringOps(x)
                                       11
Scala: implicit conversions
val r = augmentString("d*").r
 

trait StringOps { 
  ...
  def r: Regex = new Regex(toString)
}
 

implicit def augmentString(x: String)
                    = new StringOps(x)
                                       12
Scala: implicit conversions

    val r = "d*".r


   Conversion to 'StringOps' class:
       implicit
       requires a wrapper for each invocation




                                                 13
Functionality extension

   Java
    Collections.sort(list, comparator)


   Scala / Kotlin
    list.sort(comparator)


       'sort' is not declared in java.util.List
       'sort' can be autocompleted
                                                   14
Kotlin: extension functions

   list.sort(comparator)



   fun <T> List<T>.sort(c: Comparator<T>) {
        ...
    }



                                         15
Iterator for String

for (c in “abc”) {
    println(c)
}




 
                      16
Iterator for String

for (c in “abc”) {
    println(c)
}


class StringIterator(val s: String) :
                         Iterator<Char> {
    private var i = 0
    override fun next() = s[i++]
    override fun hasNext() = i < s.size
}
                                       17
Iterator for String

for (c in “abc”) {
    println(c)
}


fun String.iterator() =
                  StringIterator(this)



 
                                    18
Extension functions

   fun <T> List<T>.sort(c:
                   Comparator<T>) {...}
   fun String.iterator() =
                   StringIterator(this)

       non-virtual
       compile to a static function

                                       19
Extending APIs

   Scala
       implicit
       overhead on wrappers

   Kotlin
       functionality cannot be inherited




                                            20
Handling Absent Values



                         21
Java NPE problem

   if (order.getCustomer().       //NPE
          getInfo().getAge() >
              limits.getMinLegalAge()) {
     ... 
    }




                                      22
Java: @Nullable, @NotNull

   @NotNull Customer getCustomer() {
       ...
       return null; //warning, assertion
    }


   @Nullable Customer getCustomer() {...}


    getCustomer().getInfo() //warning, NPE
                                        23
Scala: Option type
   def getCustomer() : Option[Customer] 
    {…}
     

   order.getCustomer match {
       case Some(customer) =>
                    Some(customer.getInfo)
       case None => None
    }
     

                                         24
Scala: Option type
   def getCustomer() : Option[Customer] 
    {…}
     

   order.getCustomer match {
       case Some(customer) =>
                    Some(customer.getInfo)
       case None => None
    }
     

   order.getCustomer.map(_.getInfo)     25
Scala: Option type

   def getCustomer() : Option[Customer] {
      ...
      return null //no error
    }




                                        26
Scala: Option type

   def getCustomer() : Option[Customer] 
   order.getCustomer.map(_.getInfo).
                             map(_.getAge)
     

       extra objects, classes are created:
               Some(customer), Some(info), Some(age)
               classes for function literals
               objects for function literals
         


       inconvenient for debugging                 27
Kotlin: nullable types
   fun getCustomer() : Customer? { 
        ...
        return null
    }


   fun getCustomer() : Customer {
        ...
        return null //error
    }                                  28
Kotlin: nullable types
   fun getCustomer() : Customer? 


   getCustomer().getInfo()   error
     




   getCustomer()?.getInfo()   ok
     




     




                                      29
Kotlin: nullable types
   fun getCustomer() : Customer? 


   getCustomer().getInfo()   error
     




   getCustomer()?.getInfo()   // Info?
     







                                          30
Kotlin: nullable types
   fun getCustomer() : Customer? 



     




   getCustomer()?.getInfo()   // Info?
     







   val customer = getCustomer()
    if (customer != null) 
     




      customer.getInfo()       // Info
                                          31
Call chains

   Java
    order.getCustomer().getInfo().getAge()
     

   Scala
    order.getCustomer.map(_.getInfo).
                             map(_.getAge)
   Kotlin
    order.getCustomer()?.getInfo()?.getAge()
                                         32
“If not null” check
   Scala
    opt foreach { value =>
       operate(value)
    }


   Kotlin
    if (value != null) {
       operate(value)
    }                        33
Java Interop

   Scala
    val files = new File("test").listFiles()
    println(files.length) //NPE


   Kotlin
    val files = File("test").listFiles()
    println(files.length) //doesn't compile
    println(files?.size ?: "no files")
    println(files!!.size) //NPE
                                              34
Kotlin & Java interop

   @NotNull, @Nullable annotations

   “alternative headers”
    package java.util
    public trait List<E> :                   
                   java.util.Collection<E> {
      ...
      fun listIterator() :                   
           java.util.ListIterator<E>
    }                                      35
Handling absent values

   Scala
       overhead



   Kotlin
       inconvenient Java interop without alternative
        headers or annotations



                                                        36
Case Analysis



                37
Scala: pattern matching

 
 sealed trait Expr
 
 case class Num(value: Int) extends Expr
 case class Sum(left: Expr, right: Expr)       
                                 extends Expr


 
    def eval(e: Expr) : Int = 
 
      e match {
●

 

 
         case Num(v) => v
         case Sum(l, r) => eval(l) + eval(r)
      }
            




                                               38
Kotlin: smart casts
 
     trait Expr
 
     class Number(val value: Int) : Expr
     class Sum(val left: Expr, val right: Expr):
                                              Expr
 
     fun eval(e: Expr) : Int {
  
       if (e is Number) 
         return e.value     //smart cast
     
  if (e is Sum) 
 




    return eval(e.left) + eval(e.right)
 
 




       throw IllegalArgumentException(
                          “Unknown expression $e”)
     }                                         39
Kotlin: smart casts

 
     trait Expr
 
     class Num(val value: Int) : Expr
     class Sum(val left: Expr, val right: Expr):
                                              Expr
 
     fun eval(e: Expr) : Int =
  
       when (e) {
 
         is Num ­> e.value 
 
         is Sum ­> eval(e.left) + eval(e.right)
         else ­> throw IllegalArgumentException(
                          “Unknown expression $e”)
       }
                                               40
Multiple
Implementation
Inheritance

                 41
Scala traits

trait A {
  val a = print("A")
}

trait B {
  val b = print("B")
}

class C extends B with A {}

new C() 
                              42
Scala traits

trait A {
  val a = print("A")
}

trait B {
  val b = print("B")
}

class C extends B with A {}

new C() // prints BA
                              43
Scala traits

trait A {
  val a = print("A")
}

trait B extends A {
  val b = print("B")
}

class C extends B with A {}

new C() 
                              44
Scala traits

trait A {
  val a = print("A")
}

trait B extends A {
  val b = print("B")
}

class C extends B with A {}

new C() // prints AB
                              45
Scala traits

trait A {
  def foo()
}

trait B extends A {
  override def foo() = "B"
}

class C extends B {}

new C().foo()  //"B"

                             46
Scala traits
trait A {
  def foo()
}

trait B extends A {
  override def foo() = "B"
}

trait D extends A {
  override def foo() = "D"
}

class C extends B with D {}

new C().foo()  //"D"          47
Kotlin traits

   are more like Java interfaces
   methods can have bodies

   no state
   no linearization




                                    48
Kotlin traits
trait A {
    fun foo() = println("A")
}
 

trait B {
    fun foo() = println("B")
}
 


class C : B, A {} //doesn't compile
    
    
    
    
                                      49
Kotlin traits
trait A {
    fun foo() = println("A")
}
 

trait B {
    fun foo() = println("B")
}
 

class C : B, A {
    override fun foo() {
        super<B>.foo()
        super<A>.foo()
    }
}                              50
Collection
transformation


                 51
Scala collections

   Set(1, 2, 3).map(_ * 0) →  Set(0)


   "abc".map(_.toUpper)   →    "ABC"




                                        52
Scala collections

   Set(1, 2, 3).map(_ * 0) →  Set(0)


   "abc".map(_.toUpper)   →    "ABC"

   trait TraversableLike[+A, +Repr] {
    def map[B, That](f: A => B)(implicit bf: 
          CanBuildFrom[Repr, B, That]): That 
    }

                                           53
Kotlin approach


   'map', 'filter' always return immutable list




                                               54
Kotlin approach


   'map', 'filter' always return immutable list


   hashSet(1, 2, 3).map                
         {(i: Int) ­> i * 0}            
                      → List(0, 0, 0)



                                               55
Kotlin approach


   "abc".map {(c: Char) ­>             
                c.toUpper}   →     "ABC"



   fun String.map(                     
           f : (Char) ­> Char) : String


                                      56
Lazy computations

   Iterators are lazy
   set.iterator().map { … }.filter { … }




                                       57
Lazy computations

   Iterators are lazy
   set.iterator().map { … }.filter { … }


   Iterables are not lazy
   val lazySet = set.lazyMap { … }
    lazySet().filter { … }
    lazySet().filter { … }

                                       58
Variance
of Generic Types


                   59
Scala. Declaration site variance
   class List[+T] { 
      //only produces T
      def head() : T 
      def tail() : List[T]
    }
   class Comparable[­T] { 
      //only consumes T
      def compare(t1 : T, t2: T)
    }                              60
Kotlin. Declaration site variance
   class List<out T> { 
      //only produces T
      fun head() : T 
      fun tail() : List[T]
    }
   class Comparable<in T> { 
      //only consumes T
      fun compare(t1 : T, t2: T)
    }                               61
Use-site variance

fun <T> copy(from: Set<T>,           
                     to: Set<T>) {


  ...
}


copy(numbers, objects)

                                    62
Kotlin. Use-site variance

fun <T> copy(from: List<out T>,      
                      to: List<T>) {


  ...
}


copy(numbers, objects)

                                    63
Kotlin. Use-site variance

fun <T> copy(from: List<out T>,      
                      to: List<T>) {
  from.add(t) //error
  ...
}


copy(numbers, objects) 

                                    64
Scala. Use-site variance


def copy[T](from: Set[_ <: T],       
                       to: Set[T]) {
  ...
}


copy(numbers, objects)

                                    65
Scala. Existential types


def copy[T](from:
     Set[X] forSome { type X <: T }, 
                     to: Set[T]) {
  ...
}


copy(numbers, objects)
                                    66
Builders



           67
Builders in Groovy

html {
   head {
      title "XML encoding with Groovy"
   }

   body {
      h1 "XML encoding with Groovy"
      p "this format can be used as an
                alternative markup to XML"
      /* an element with attributes and text content */
      ahref:'http://groovy.codehaus.org'["Groovy"]
   }
}

                                                      68
Builders in Kotlin

html {
   head {
      title { + "XML encoding with Kotlin" }
   }

   body {
      h1 { + "XML encoding with Kotlin" }
      p { + "this format this format is now type­safe" }

      /* an element with attributes and text content */
      a(href = "http://kotlin.jetbrains.org")["Kotlin"]
   }
}

                                                      69
Builders: Implementation
   Function definition
    fun html(init : HTML.() ­> Unit) : HTML {
        val html = HTML()
        html.init()
        return html
    }
   Usage
    html {
        this.head { ... }
    }                                       70
Builders: Implementation
   Function definition
    fun html(init : HTML.() ­> Unit) : HTML {
        val html = HTML()
        html.init()
        return html
    }
   Usage
    html {
        head { ... }
    }                                       71
Builders: Implementation
class Tag(val name : String) : Element {
   val children = ArrayList<Element>()
   val attributes = HashMap<String, String>()
}
 
class TagWithText(name : String) : Tag(name) {
   fun String.plus() {
       children.add(TextElement(this))
   }
}
 
class HTML() : Tag("html") {
   fun head(init : Head.() ­> Unit) { }
   fun body(init : Body.() ­> Unit) { }
                                             72
}
Builders in Kotlin

html {
   head {
      title { + "XML encoding with Kotlin" }
   }

   body {
      h1 { + "XML encoding with Kotlin" }
      p { + "this format this format is now type­safe" }

      /* an element with attributes and text content */
      a(href = "http://kotlin.jetbrains.org")["Kotlin"]
   }
}

                                                      73
Resources
   Home page
      http://kotlin.jetbrains.org

   Web Demo
      http://kotlin­demo.jetbrains.com

   Blog
      http://blog.jetbrains.com/kotlin

   Forum
      Kotlin at http://devnet.jetbrains.com   74
Interesting links

   Marius Eriksen “Effective Scala”
      http://twitter.github.com/effectivescala/


   Yang Zhang “True Scala complexity”
      http://yz.mit.edu/wp/true­scala­complexity/



   Joshua Suereth D. “Scala in Depth”
      http://www.amazon.com/Scala­Depth­Joshua­Suereth­
      D/dp/1935182706

                                                          75
Thank you!

Mais conteúdo relacionado

Mais procurados

Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldBTI360
 
Scaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaScaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaOstap Andrusiv
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheoryKnoldus Inc.
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingGarth Gilmour
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersBartosz Kosarzycki
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Developmentvito jeng
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Sanjeev_Knoldus
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in actionCiro Rizzo
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsBartosz Kosarzycki
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Languageleague
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation streamRuslan Shevchenko
 

Mais procurados (18)

Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
Scala - brief intro
Scala - brief introScala - brief intro
Scala - brief intro
 
Scaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaScaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with Scala
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheory
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Development
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in action
 
Scala 2013 review
Scala 2013 reviewScala 2013 review
Scala 2013 review
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
 

Semelhante a The Kotlin Programming Language, Svetlana Isakova

ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developersADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developersBartosz Kosarzycki
 
Introduction to scala
Introduction to scalaIntroduction to scala
Introduction to scalaMichel Perez
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...Andrew Phillips
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Andrew Phillips
 
Programmation fonctionnelle Scala
Programmation fonctionnelle ScalaProgrammation fonctionnelle Scala
Programmation fonctionnelle ScalaSlim Ouertani
 
2 kotlin vs. java: what java has that kotlin does not
2  kotlin vs. java: what java has that kotlin does not2  kotlin vs. java: what java has that kotlin does not
2 kotlin vs. java: what java has that kotlin does notSergey Bandysik
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for KotlinTechMagic
 
Scala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosScala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosGenevaJUG
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvmArnaud Giuliani
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basicswpgreenway
 
Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014Maciek Próchniak
 
Qcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaQcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaMichael Stal
 
Programming Android Application in Scala.
Programming Android Application in Scala.Programming Android Application in Scala.
Programming Android Application in Scala.Brian Hsu
 

Semelhante a The Kotlin Programming Language, Svetlana Isakova (20)

ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developersADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
 
Introduction to scala
Introduction to scalaIntroduction to scala
Introduction to scala
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
 
Programmation fonctionnelle Scala
Programmation fonctionnelle ScalaProgrammation fonctionnelle Scala
Programmation fonctionnelle Scala
 
Scala for curious
Scala for curiousScala for curious
Scala for curious
 
2 kotlin vs. java: what java has that kotlin does not
2  kotlin vs. java: what java has that kotlin does not2  kotlin vs. java: what java has that kotlin does not
2 kotlin vs. java: what java has that kotlin does not
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
 
Introduction to Kotlin
Introduction to KotlinIntroduction to Kotlin
Introduction to Kotlin
 
Scala to assembly
Scala to assemblyScala to assembly
Scala to assembly
 
Scala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosScala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian Dragos
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvm
 
Scala in Places API
Scala in Places APIScala in Places API
Scala in Places API
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
Functional Programming in Scala
Functional Programming in ScalaFunctional Programming in Scala
Functional Programming in Scala
 
Comparing JVM languages
Comparing JVM languagesComparing JVM languages
Comparing JVM languages
 
Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014
 
Scala in a nutshell by venkat
Scala in a nutshell by venkatScala in a nutshell by venkat
Scala in a nutshell by venkat
 
Qcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaQcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scala
 
Programming Android Application in Scala.
Programming Android Application in Scala.Programming Android Application in Scala.
Programming Android Application in Scala.
 

Mais de Vasil Remeniuk

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикVasil Remeniuk
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Vasil Remeniuk
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Vasil Remeniuk
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Vasil Remeniuk
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform researchVasil Remeniuk
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform ResearchVasil Remeniuk
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaVasil Remeniuk
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform ResearchVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, PauliusVasil Remeniuk
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Vasil Remeniuk
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform ResearchVasil Remeniuk
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaVasil Remeniuk
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Vasil Remeniuk
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform ResearchVasil Remeniuk
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Vasil Remeniuk
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + ElkVasil Remeniuk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 

Mais de Vasil Remeniuk (20)

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и Программатик
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform research
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform Research
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius Valatka
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, Paulius
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform Research
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform Research
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + Elk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
ETL со Spark
ETL со SparkETL со Spark
ETL со Spark
 

Último

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Último (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

The Kotlin Programming Language, Svetlana Isakova