SlideShare a Scribd company logo
1 of 72
Download to read offline
Jim Baca
@desertjim
http://blog.jimbaca.com
Kotlin
Carlsbad Caverns
AI Story Time
#LanguageChoiceMatters
Kotlin
• Nov 8, 2010
• JVM Language Summit
• Productive
• No Compatibility Compromises
• Compilation Speed
• Feb 14, 2016
• JS
My Favorite Things
Precap
• syntax
• null safety
• smart casting
• extension functions
• delegation
• sealed classes
• DSL
How
• Concise
• Convenient
• Focus
Color Legend
Java Kotlin
Basic Syntax
var a: Int = 1000
final Integer b = 500
Integer a = 1000
val b: Int = 500
boolean, float, int, char etc
a.toString();
Null
Integer a = null;
💥
a.toString();
Null
Integer a = null;
💥
Null Checks
var book: Book = null 🖥⚠
var book: Book? = null
var book: Book? = Book()
Safe Call Operator
book?.title
book?.getTitle(locale :String)
Null !!
val publisher: Publisher = book!!.publisher
!! Operator
val publisher: Publisher = book!!.publisher
Null && Safe Chaining
if(book != null && book.getPublisher() != null &&…){

…

}
book?.publisher?.address
let
var book: Book = …
book?.let {
toast(“Hello, ${it.authors}!”)
}
let
Hello,[Author(firstName=Jim,
lastName=Baca), Author(firstName=John,
lastName=Bekas)]
Elvis Operator
var address = book?.publisher?.address
var address = book?.publisher?.address ?:
"3300 N Interstate 35, Austin, TX"
Late Init
class MainActivity : AppCompatActivity() {



lateinit var book : Book



override fun onCreate(savedInstanceState: Bundle?)
{

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

book.edition

}

}
⚠ 💥
lateinit property book has not been initialized
Smart Casting
Reduced Casting
Smart Casting
if (x instanceof String) {



print(((String) x).length());

}

if (!(x instanceof String)) {

return;

}

print(((String) x).length());
if (x is String) {

print(x.length)

}



if (x !is String)
return

print(x.length)
Smart Casting
if (x !is String || x.length == 0) return
if (x is String && x.length > 0)
when (x) {

is Int -> print(x + 1)

is String -> print(x.length + 1)

is IntArray -> print(x.sum())

}
Nullable Casting
var first: Book? = current as? Book
(current as Book).let{

it.author

}
Fun
fun double(x: Int): Int {
return 2 * x

}
fun double(x: Int): Int = 2 * x
fun double(x: Int) = 2 * x
Optionals
fun add(x: Int, y: Int = 1, z: Int = 2): Int {

return x + y + z

}
add(5)
add(5, z = 5)
Syntax
fun logIt(tag:String, value: String?): Unit {

if (tag != null && value != null)

Log.e(tag, value)

else

Log.e(tag, "nothing")

}
Syntax
fun logIt(tag:String, value: String?){

if (tag != null && value != null)

Log.e(tag, value)

else

Log.e(tag, "nothing")

}
Interface
interface Book {

val author: String

val title: String

get() = “Wizard of Oz"

fun printAuthor() {

print(author)

}

}


class TechBook : Book {

override val author: String = "Howard Lee"

}
Interface Conflicts
interface A {

fun foo() { print("A") }

}

interface B {

fun foo() { print("B") }

fun bar() { print("bar") }

}

class D : A, B {

// foo?

}
Interface Conflicts
interface A {

fun foo() { print("A") }

}


interface B {

fun foo() { print("B") }

fun bar() { print("bar") }

}

class D : A, B {

override fun foo() {

super<A>.foo()

super<B>.foo()

}
Extension Functions
int verticalLineThickness = TypedValue.COMPLEX_UNIT_DIP;

DisplayMetrics metrics = context.getResources().getDisplayMetrics();

float lineWidth = TypedValue.applyDimension(type, value, metrics);
int fontTitleSize = TypedValue.COMPLEX_UNIT_SP;

float titleSize = TypedValue.applyDimension(type, value, metrics);
int fontSubtitleSize = TypedValue.COMPLEX_UNIT_SP;

float subtitleSize = TypedValue.applyDimension(type, value, metrics);
Extension Functions
fun View.applyDimension(
value: Float,
type : Int = TypedValue.COMPLEX_UNIT_DIP
): Float{

val metrics = getResources().getDisplayMetrics()

val resultPix = TypedValue.applyDimension(type, value, metrics)

return resultPix

}
Extension Functions
class CustomView : View {

constructor(context: Context?) : super(context){

initialize()

}



…



fun initialize(){

val verticalLineThickness = applyDimension(5f)

val horizontalLineThickness = applyDimension(10f)

val paddingBetweenItems = applyDimension(15f)

val fontTitleSize = applyDimension(32f, TypedValue.COMPLEX_UNIT_SP)

val subtitleSize = applyDimension(14f, TypedValue.COMPLEX_UNIT_SP)

}

}
Extension Functions
fun TextView.setTextSize(value: Float,
type: Int = TypedValue.COMPLEX_UNIT_SP):
Float {
val res = getResources()

val metrics = res.getDisplayMetrics()

val resultPix = TypedValue.applyDimension(
type, value, metrics)


return resultPix

}
public void setTextSize(int unit, float size)
Extension Functions
Conflicts
fun TextView.setTextSize(value: Float,
type: Int = TypedValue.COMPLEX_UNIT_SP):
Float {
val res = getResources()

val metrics = res.getDisplayMetrics()

val resultPix = TypedValue.applyDimension(
type, value, metrics)


return resultPix

}
setTextSize(15.8f)
public void setTextSize(float size)
Extension Functions
• operator fun <K, V> Map<K, V>.iterator():
Iterator<Map.Entry<K, V>> = entrySet().iterator()
• operator fun <K, V> Map.Entry<K,
V>.component1() = getKey()
• operator fun <K, V> Map.Entry<K,
V>.component2() = getValue()
Nullable Receiver
fun Any?.toString(): String {

if (this == null) return "null"

return toString()

}
V/Test: null
var book: Book? = null
Log.v("Test", book.toString())
Destructuring Declarations
Returning Multiple Items
Returning Multiple Items
for ((key, value) in map) {

// do something with the key and the value

}
Returning Multiple Items
val (authors, datePublished) = getBook()
val authors = book.component1()

val datePublished = book.component2()
componentN() 🔑 operator
data class 🎉
data class
data class Book(

var authors: ArrayList<Author>,

var publication: Date,

var title: String,

var publisher: Publisher,

var isbn: String,

var asin: String,

var bookCover: Uri

)
public class Book {

ArrayList<Author> authors;

Date publication;

String title;

Publisher publisher;

String isbn;

String asin;

Uri bookCover;



public ArrayList<Author> getAuthors() {

return authors;

}



public void setAuthors(
ArrayList<Author> authors) {

this.authors = authors;

}



public Date getPublication() {

return publication;

}
. . .
BARF
Sealed Classes
V. Enums
• Restricted Type
• Multiple Instances
• State
Sealed Classes
sealed class Book {

class Ebook(val site: String) : Book()

class Paper(val edition: String) : Book()

object NotABook : Book()

}
fun meta(book: Book): String? = when(book) {

is Book.Ebook -> book.site

is Book.Paper -> book.edition

Book.NotABook -> null

}
Inheritance Hell
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Detail
Fragment
RxLifeCycle❤
Fragment
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Detail
Fragment
RxLifeCycle
Fragment
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Detail
Fragment
RxLifeCycle
Fragment
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Detail
Fragment
RxLifeCycle
Fragment
Modified List
Fragment
Inheritance Hell
Fragment
Web Socket
Fragment
List Fragment
Detail
Fragment
RxLifeCycle
Fragment
Modified List
Fragment
Inheritance Heaven
Fragment
List Fragment
Web Socket
Shared List
Logic
Detail
Fragment
RxLifeCycle
Fragment
Modified List
Fragment
Class Delegation
interface Base {

void print()

}



class BaseImpl extends Base {

int x;

public BaseImpl(int x){

this.x = x;

}

@Override

void print() {

print(x);

}

}
class Derived extends Base{

Base delegate;

@Override

void print(){

delegate.print();

}

void setDelegate(Base b){

delegate = b;

}

}





BaseImpl imp = new BaseImp(10);

Derived derived = new Derived();

derived.setDelegate(imp);

derived.print();
Class Delegation
interface Base {

fun print()

}



class BaseImpl(val x: Int) : Base {

override fun print() { print(x) }

}



class Derived(b: Base) : Base by b



val b = BaseImpl(10)

Derived(b).print()
Delegated Properties
class Example {

var p: String by Delegate()

}
Delegated Properties
class Delegate {

operator fun getValue(thisRef: Any?, property: KProperty<*>): String {

return "$thisRef, delegated '${property.name}' to me!"

}



operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {

println("$value = '${property.name} in $thisRef.'")

}

}
Delegated Properties
val e = Example()

println(e.p)
Example@33a17727, delegated ‘p’ to me!
e.p = "NEW"
NEW = ‘p’ in Example@33a17727
Anko
DSL
val activity = this

val layout = LinearLayout(activity)

layout.orientation = LinearLayout.VERTICAL

val name = EditText(activity)

val button = Button(activity)

button.text = "Say Hello"

button.setOnClickListener {

Toast.makeText(activity, "Hello, ${name.text}!",

Toast.LENGTH_SHORT).show()

}

layout.addView(name)

layout.addView(button)
DSL
verticalLayout {

val name = editText()

button("Say Hello") {

onClick { toast("Hello, ${name.text}!") }

}

}
DSL
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/
apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">



<EditText

android:id="@+id/name"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>



<Button

android:id="@+id/clicked"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

</LinearLayout>
DSL
class MainActivity : AppCompatActivity() {



override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)



verticalLayout {

val name = editText()

button("Say Hello") {

onClick { toast("Hello, ${name.text}!") }

}

}

}

}
setContentView 👀
Kotlin Setup
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
Kotlin Setup
apply plugin: 'kotlin-android'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
Resources
• ⌥Ctrl ⇧ Shift ⌘ Cmd K
• blog.jetbrains.com/kotlin/2016/03/kotlins-android-
roadmap
• github.com/kotlin/kotlin-koans
• try.kotlinlang.org
• github.com/antoniolg/bandhook-kotlin
• github.com/jetbrains/kotlin-examples
FAQ
• Compatibility
• Support
• 20 K
The Numbers
Proguard Java Kotlin
File Size 726 KB 778 KB
Dex Count 4894 4894
Java Kotlin
File Size 1.2 MB 1.6 MB
Dex Count 16174 23107
Recap
• syntax
• null safety
• smart casting
• extension functions
• delegation
• sealed classes
• DSL
#LanguageChoiceMatters
@AustinDroids @Evernote🏢@HotSchedules🍕
@desertjim
blog.jimbaca.com

More Related Content

What's hot

Hello kotlin | An Event by DSC Unideb
Hello kotlin | An Event by DSC UnidebHello kotlin | An Event by DSC Unideb
Hello kotlin | An Event by DSC UnidebMuhammad Raza
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Languageintelliyole
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Andrey Breslav
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Kotlin as a Better Java
Kotlin as a Better JavaKotlin as a Better Java
Kotlin as a Better JavaGarth Gilmour
 
Kotlin: a better Java
Kotlin: a better JavaKotlin: a better Java
Kotlin: a better JavaNils Breunese
 
Writing a compiler in go
Writing a compiler in goWriting a compiler in go
Writing a compiler in goYusuke Kita
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real Worldosfameron
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Jonas Bonér
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional SwiftJason Larsen
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScriptGarth Gilmour
 
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...eMan s.r.o.
 
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
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017Wanbok Choi
 

What's hot (20)

Hello kotlin | An Event by DSC Unideb
Hello kotlin | An Event by DSC UnidebHello kotlin | An Event by DSC Unideb
Hello kotlin | An Event by DSC Unideb
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Kotlin, why?
Kotlin, why?Kotlin, why?
Kotlin, why?
 
Kotlin as a Better Java
Kotlin as a Better JavaKotlin as a Better Java
Kotlin as a Better Java
 
Kotlin: a better Java
Kotlin: a better JavaKotlin: a better Java
Kotlin: a better Java
 
Writing a compiler in go
Writing a compiler in goWriting a compiler in go
Writing a compiler in go
 
2014-11-01 01 Денис Нелюбин. О сортах кофе
2014-11-01 01 Денис Нелюбин. О сортах кофе2014-11-01 01 Денис Нелюбин. О сортах кофе
2014-11-01 01 Денис Нелюбин. О сортах кофе
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 
Json the-x-in-ajax1588
Json the-x-in-ajax1588Json the-x-in-ajax1588
Json the-x-in-ajax1588
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional Swift
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScript
 
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
 
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
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
 

Similar to Kotlin Austin Droids April 14 2016

What's in Kotlin for us - Alexandre Greschon, MyHeritage
What's in Kotlin for us - Alexandre Greschon, MyHeritageWhat's in Kotlin for us - Alexandre Greschon, MyHeritage
What's in Kotlin for us - Alexandre Greschon, MyHeritageDroidConTLV
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming iiPrashant Kalkar
 
Building android apps with kotlin
Building android apps with kotlinBuilding android apps with kotlin
Building android apps with kotlinShem Magnezi
 
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)Eugene Yokota
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Extreme Swift
Extreme SwiftExtreme Swift
Extreme SwiftMovel
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingGarth Gilmour
 
C# 6 and 7 and Futures 20180607
C# 6 and 7 and Futures 20180607C# 6 and 7 and Futures 20180607
C# 6 and 7 and Futures 20180607Kevin Hazzard
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, SwiftYandex
 
Good functional programming is good programming
Good functional programming is good programmingGood functional programming is good programming
Good functional programming is good programmingkenbot
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?Tomasz Wrobel
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsBartosz Kosarzycki
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016STX Next
 

Similar to Kotlin Austin Droids April 14 2016 (20)

What's in Kotlin for us - Alexandre Greschon, MyHeritage
What's in Kotlin for us - Alexandre Greschon, MyHeritageWhat's in Kotlin for us - Alexandre Greschon, MyHeritage
What's in Kotlin for us - Alexandre Greschon, MyHeritage
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming ii
 
Building android apps with kotlin
Building android apps with kotlinBuilding android apps with kotlin
Building android apps with kotlin
 
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)
sbt, history of JSON libraries, microservices, and schema evolution (Tokyo ver)
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Extreme Swift
Extreme SwiftExtreme Swift
Extreme Swift
 
Let's Go-lang
Let's Go-langLet's Go-lang
Let's Go-lang
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011
 
C# 6 and 7 and Futures 20180607
C# 6 and 7 and Futures 20180607C# 6 and 7 and Futures 20180607
C# 6 and 7 and Futures 20180607
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
 
C# 7
C# 7C# 7
C# 7
 
Good functional programming is good programming
Good functional programming is good programmingGood functional programming is good programming
Good functional programming is good programming
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
 

Kotlin Austin Droids April 14 2016