Top Banner
NEW ANDROID LANGUAGES JAVIER GAMARRA :: @NHPATT
99
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: New Android Languages

N E W A N D R O I D L A N G U A G E S

J A V I E R G A M A R R A : : @ N H PA T T

Page 2: New Android Languages

@ N H PAT T @ A G I L E C Y L ( 0 9 / 0 5 ! ) @ L I F E R AY

by wiredforlego

Page 4: New Android Languages
Page 6: New Android Languages

S E L F - E S T E E M

Page 7: New Android Languages

K C Y. M E / 2 2 N A N

Page 9: New Android Languages

G R O O V Y

Page 10: New Android Languages

S C A L A

Page 11: New Android Languages

X T E N D

Page 12: New Android Languages

S W I F T

Page 13: New Android Languages

K O T L I N

Page 14: New Android Languages

H O W M A N Y L A N G U A G E S H AV E A N D R O I D “ S U P P O R T ” ?

Page 15: New Android Languages

• Scala

• Kotlin

• Groovy

• Clojure

• Go

• Ceylon

• XTend

• JS

• C++

• C#

• PHP

• Python

• Ruby

• Swift

• QT

• Perl

• Pascal

• Smalltalk

Page 16: New Android Languages

A N Y L A N G U A G E …

Page 17: New Android Languages

T H AT ’ S W H Y

Page 18: New Android Languages

• JS

• C++

• C#

• PHP

• Scala

• Kotlin

• Groovy

• Go

• Ceylon

• XTend

Page 19: New Android Languages

H O W ?

Page 20: New Android Languages

• Small TODO app

• Uploaded soon to github

• Big post coming to nhpatt.com

Page 23: New Android Languages

X T E N D - W H AT ?

• xtend & xtendroid

• 2011!

Page 24: New Android Languages

X T E N D - H O W ?

• Eclipse IDE + SDK, Android Studio incoming?

• About 40 minutes

Page 25: New Android Languages

X T E N D - C O D E

@AndroidActivity(R.layout.activity_main) class MainActivity {

@OnCreate def init(Bundle savedInstanceState) { }

}

Page 26: New Android Languages

X T E N D - C O D E

myButton.onClickListener = [ toast("My message"); ]

Page 27: New Android Languages

X T E N D - C O D E

val toUpperCaseFunction = [String s|s.toUpperCase]

Page 28: New Android Languages

X T E N D - T H I N G S

• Extension methods

• Lambda expressions

• Implicits

• Operator overloading

• Compiles to Java Code

Page 29: New Android Languages

X T E N D - O P I N I O N

• Perfect for consulting companies

• Everything does too much

• Java+

Page 31: New Android Languages

G R O O V Y - W H AT ?

• dynamic (2003) & static (2012!)

Page 32: New Android Languages

G R O O V Y - H O W ?

• Android Studio, Groovy Gradle Plugin

• In groovy folder

• About 30 minutes

• SwissKnife

Page 33: New Android Languages

G R O O V Y - C O D E

def message = findViewById(R.id.message) as TextViewmessage.text = messageText;

Page 34: New Android Languages

G R O O V Y - C O D E

button.onClickListener = {startActivity(intent)}

@OnClick

Page 35: New Android Languages

G R O O V Y - T H I N G S

• Dynamic code & static code (@CompileStatic)

• Traits

• Better apis

• Great gradle integration (dagger support coming)

Page 36: New Android Languages

G R O O V Y - S TAT I C

Page 37: New Android Languages

G R O O V Y - R U N T I M E

Page 38: New Android Languages

G R O O V Y - O P I N I O N

• Java++

• Dynamic code?

• I like groovy but…

Page 40: New Android Languages

C E Y L O N - W H AT ?

• Ceylon

• Gavin King

• 2011

Page 41: New Android Languages

C E Y L O N - H O W ?

• Eclipse IDE + Ceylon Plugin + PAIN

• About 6 hours (eclipse hell + ceylon hell)

Page 42: New Android Languages

A N D R O I D D O C U M E N TAT I O N

Page 43: New Android Languages

A N D R O I D D O C U M E N TAT I O N

Page 44: New Android Languages

C E Y L O N - C O D E

shared actual void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.\Ilayout.activity_main); assert (is TextView textView = findViewById(R.\Iid.action_settings)); }

Page 45: New Android Languages

C E Y L O N - T H I N G S

• Type system

• Mixins

• String?

• Packages and modules inside Ceylon

Page 48: New Android Languages

S C A L A - W H AT ?

• Scala

• 2003

Page 49: New Android Languages

S C A L A - H O W ?

• Gradle plugin?

• Post 47 degrees: Idea + plugins + SBT + activator…

• About 1 hour

Page 50: New Android Languages

T R O L L I N G S C A L A

• findView without casts -> a trait

• scala one liners -> hard to read by others but nice in collections

• scala -> 2.8M with proguard -> heaviest environment

• NPE -> with optionals, great solution IMHO

• implicit context -> magic everywhere

• traits -> quite common (kotlin, ceylon, ‘groovy’…)

• no getters/setters -> quite common

• pattern matching -> it’s nice but pure functional style

• case classes -> a glorified switch/if

Page 51: New Android Languages

S C A L A - T H I N G S

• Types

• Multiple programming styles

• Optional

Page 52: New Android Languages

S C A L A - O P I N I O N

• I love scala, way better than Java, but…

• Paradigm swift

• Programmers (25 in TIOBE)

Page 53: New Android Languages

S C A L A - S C A L O I D

new SVerticalLayout {

STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>>

STextView("ID")

SEditText()

STextView("Password")

SEditText() inputType TEXT_PASSWORD

SButton("Sign in")

this += new SLinearLayout {

SButton("Help")

SButton("Sign up")

}.wrap

}.padding(20 dip)

Page 54: New Android Languages

S C A L A - M A C R O I D

// the layout goes here

setContentView {

getUi {

l[LinearLayout](

w[Button],

w[TextView]

)

}

}

Page 56: New Android Languages

G O - W H AT ?

• Go

• 2009

Page 57: New Android Languages

G O - W H AT ?

Page 58: New Android Languages

“ W h o s e b e t t i n g t h i s y e a r s I / O w i l l a n n o u n c e t h e r e p l a c e m e n t o f t h e A n d r o i d A P I w i t h t h e G o A P I ? “

Page 59: New Android Languages

“ I l l o g i c a l , i r r e s p o n s i b l e , i n s a n e p e o p l e a r e b e t t i n g t h i s . ”

“ G o , f o r C p e o p l e w h o h a t e C + + b u t a r e t o o a f r a i d o f r e a l I D E s f o r J a v a . ”

J a k e W h a r t o n

Page 60: New Android Languages

G O - H O W ?

• Docker image (docker -> boot2docker -> missing steps -> worst hello world ever!)

• About 2 hours (image is 4GB! + docker errors + no documentation)

Page 61: New Android Languages

G O - C O D E

• 2 ways:

• Shared Library (JNI…)

• All go

Page 62: New Android Languages

G O - C O D E

• var State

• func Run

• type Callbacks (Start, Stop, Draw)

• Stubs

Page 63: New Android Languages

G O - O P I N I O N

• API for OpenGL/business logic

• Not ready for “classic” app.

• I’m worried about iOS support

Page 65: New Android Languages

K O T L I N - W H AT ?

• Kotlin

• 2011

Page 66: New Android Languages

K O T L I N - H O W ?

• Android Studio plugin

• About 10 minutes

Page 67: New Android Languages

K O T L I N - T H I N G S

• Traits

• Interoperability with Java!

• Extension Methods

• Null?

Page 68: New Android Languages

T R O L L I N G K O T L I N

• class Leiva : Untrollable

Page 69: New Android Languages

K O T L I N - O P I N I O N

• I love Kotlin.

• Really easy learning curve.

• Few programmers doing Kotlin :(

Page 71: New Android Languages

J AVA 8

• JDK7: <>, multi-catch, strings in switches, try with resources…

• And java NIO/invokedynamic?

Page 72: New Android Languages

J AVA 8

• And Java 8? (Lambdas/default methods/new date API…)

Page 75: New Android Languages

R E T R O L A M B D A - W H AT ?

• Lambdas

• Default Methods

• Static Methods on interfaces

Page 76: New Android Languages

R E T R O L A M B D A - H O W ?

• Gradle Plugin

• About 30 minutes

Page 77: New Android Languages

R E T R O L A M B D A - C O D E

(View v) -> Toast.makeText(this, “Hi!”, LENGTH_SHORT).

Page 78: New Android Languages

R E T R O L A M B D A - O P I N I O N

• An incomplete hack.

• Nice if you don’t have any other option.

Page 79: New Android Languages

A N D T H E T R O P H I E S G O T O …

Page 85: New Android Languages

N O T A N E W Q U E S T I O N

Page 86: New Android Languages

T H AT M E A N S S O M E T H I N G

Page 91: New Android Languages

A N Y Q U E S T I O N S ?

Page 93: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

Page 94: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

Page 95: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

Page 96: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

Page 97: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

• Kotlin ppl are nice: comparison to scala -> if u are already using Scala or need sth on that list…

• A good, external, comparison

Page 98: New Android Languages

O K … K O T L I N V S S C A L A , F I G H T !

• The main design goals behind “Kotlin” are:

• To create a Java-compatible language,

• That compiles at least as fast as Java,

• Make it safer than Java, i.e. statically check for common pitfalls such as null pointer dereference,

• Make it more concise than Java by supporting variable type inference, higher-order functions (closures), extension functions, mixins and first-class delegation, etc;

• And, keeping the useful level of expressiveness (see above), make it way simpler than the most mature competitor – Scala.

Page 99: New Android Languages

N E W A N D R O I D L A N G U A G E S

J A V I E R G A M A R R A : : @ N H PA T T