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

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
Bartosz Kosarzycki
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin Presentation
Andrzej Sitek
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
Garth Gilmour
 

Mais procurados (19)

Programming in Scala: Notes
Programming in Scala: NotesProgramming in Scala: Notes
Programming in Scala: Notes
 
Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017
 
Kotlin cheat sheet by ekito
Kotlin cheat sheet by ekitoKotlin cheat sheet by ekito
Kotlin cheat sheet by ekito
 
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
 
Intro to Functional Programming in Scala
Intro to Functional Programming in ScalaIntro to Functional Programming in Scala
Intro to Functional Programming in Scala
 
Ankara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with ScalaAnkara Jug - Practical Functional Programming with Scala
Ankara Jug - Practical Functional Programming with Scala
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, Seriously
 
Scala - brief intro
Scala - brief introScala - brief intro
Scala - brief intro
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin Presentation
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Scala
ScalaScala
Scala
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demo
 

Destaque

SeaJUG May 2012 mybatis
SeaJUG May 2012 mybatisSeaJUG May 2012 mybatis
SeaJUG May 2012 mybatis
Will Iverson
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011
Andrey Breslav
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Vladimir Bacvanski, PhD
 

Destaque (20)

Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
 
Kotlin Advanced - language reference for Android developers
Kotlin Advanced - language reference for Android developers Kotlin Advanced - language reference for Android developers
Kotlin Advanced - language reference for Android developers
 
No excuses, switch to kotlin
No excuses, switch to kotlinNo excuses, switch to kotlin
No excuses, switch to kotlin
 
Kotlin
KotlinKotlin
Kotlin
 
SeaJUG May 2012 mybatis
SeaJUG May 2012 mybatisSeaJUG May 2012 mybatis
SeaJUG May 2012 mybatis
 
Fun with Kotlin
Fun with KotlinFun with Kotlin
Fun with Kotlin
 
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
 
Secure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScriptSecure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScript
 
OpenERP 6.1 Framework Changes
OpenERP 6.1 Framework ChangesOpenERP 6.1 Framework Changes
OpenERP 6.1 Framework Changes
 
Design Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyDesign Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John Hardy
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011
 
Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014
 
Kotlin @ CSClub & Yandex
Kotlin @ CSClub & YandexKotlin @ CSClub & Yandex
Kotlin @ CSClub & Yandex
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
 
Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015
 
Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011
 
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSL
 
RESTful API Automation with JavaScript
RESTful API Automation with JavaScriptRESTful API Automation with JavaScript
RESTful API Automation with JavaScript
 

Semelhante a Светлана Исакова «Язык Kotlin»

1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
wpgreenway
 

Semelhante a Светлана Исакова «Язык Kotlin» (20)

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...
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
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
 
Scala for Java Programmers
Scala for Java ProgrammersScala for Java Programmers
Scala for Java Programmers
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
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
 
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
 

Mais de e-Legion

Mais de e-Legion (20)

MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Online
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecture
 
Rx java
Rx javaRx java
Rx java
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotify
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
 
MBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, SoundcloudMBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, Soundcloud
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Co
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforpost
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
 
MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DIT
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litres
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsoft
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Светлана Исакова «Язык Kotlin»