Slide 1

Slide 1 text

Kotlin: Uma Nova Esperança

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Clientes

Slide 4

Slide 4 text

Owners

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Slide 7

Slide 7 text

Kotlin

Slide 8

Slide 8 text

Open Source JVM 100% Interoperável

Slide 9

Slide 9 text

+ Plataforma - Evolução Devagar - Antiquada Java

Slide 10

Slide 10 text

Motivação Uso Industrial Moderna Design "Efetivo" Segura | Simples | Concisa

Slide 11

Slide 11 text

Alternativas Scala Groovy Dart Xtend, Clojure, etc...

Slide 12

Slide 12 text

Por que Kotlin? Desenvolvimento Ativo Próximo da versão final Funciona AGORA

Slide 13

Slide 13 text

Sintaxe

Slide 14

Slide 14 text

package mobi.porquenao.poc.kotlin import java.util.* fun main(args: Array) { if (args.size() == 0) return println("First argument: ${args[0]}") } Sintaxe docs

Slide 15

Slide 15 text

val a: Int = 0 val b = 0 // Tipo Int é inferido Variáveis docs

Slide 16

Slide 16 text

// Imutável val a: Int = 0 a = 1 // Erro // Mutável var b = 0 b = 1 // OK Variáveis mutabilidade docs

Slide 17

Slide 17 text

Null Safety docs // OK var x: String = "Hi" // Erro var x: String = null // OK var x: String? = null

Slide 18

Slide 18 text

Null Safety docs var x: String? = "Hi" x.length // Erro if (x != null) { x.length // OK } x?.length // Igual acima x!!.length

Slide 19

Slide 19 text

class User { val name: String = "Luke" var surname: String = "Skywalker" fun fullName(): String { return "$name $surname" } } Class docs

Slide 20

Slide 20 text

class User(val name: String, var surname: String) { fun fullName(): String { return "$name $surname" } } val user = User("Luke", "Skywalker") println(user.fullName()) Class docs

Slide 21

Slide 21 text

Getters and Setters docs public class MainActivity : BaseActivity() { var somePreference: Boolean get() { return sharedPreferences.getBoolean("SomePreference", true) } set(value) { sharedPreferences.edit() .putBoolean("SomePreference", value) .apply() } }

Slide 22

Slide 22 text

Delegates.lazy docs val sharedPreferences by Delegates.lazy { getSharedPreferences("SharedPreference", Context.MODE_PRIVATE) } val textView: TextView by Delegates.lazy { findViewById(R.id.text) as TextView }

Slide 23

Slide 23 text

Lambdas java docs void calculate(Runnable after) { // Calcula algo after.run(); } calculate(new Runnable() { @Override public void run() { println("after"); } });

Slide 24

Slide 24 text

Lambdas docs fun calculate(after: () -> Unit) { // Calcula algo after() } calculate({ println("after") }) calculate { println("after") }

Slide 25

Slide 25 text

Lambdas docs fun sum(n1: Int, n2: Int, after: (Int) -> Unit) { // Soma algo after(n1 + n2) } sum(1, 2, { result -> println(result) }) sum(1, 2) { println(it) }

Slide 26

Slide 26 text

// SAM-type button.setOnClickListener {} // Multiple textView.addTextChangedListener(object: TextWatcher { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun afterTextChanged(s: Editable?) {} }) Lambdas android docs

Slide 27

Slide 27 text

trait Clickable { val enabled: Boolean // Propriedade fun onClick() // Método fun click() { // Implementado if (enabled) { onClick() } } } Traits docs

Slide 28

Slide 28 text

class Button : Clickable { override val enabled: Boolean = true override fun onClick() { println("Click!") } } Button().click() // "Click!" Traits docs

Slide 29

Slide 29 text

fun String.first(): Char { return this[0] } // Use val text = "Hey!" println(text.first()) //"H" Extensions docs

Slide 30

Slide 30 text

When docs fun foo(obj: Any) { when (obj) { 1 -> println("One") "Hello" -> println("Greeting") is Long -> println("Long") !is String -> println("Not a string") else -> println("Unknown") } } foo(1) // "One"

Slide 31

Slide 31 text

Performance?

Slide 32

Slide 32 text

Quase lá

Slide 33

Slide 33 text

Annotation Annotation processor não é suportado ainda: - Butterknife? - Dagger? - DBFlow? - Android APT?

Slide 34

Slide 34 text

Constantes if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Do something }

Slide 35

Slide 35 text

Constantes "Fix" if (Build.VERSION.SDK_INT >= 21) { // Do something }

Slide 36

Slide 36 text

- Auto-Complete um pouco mais lento - Quase versão final - Problema com permissão de arquivos - Auto-Complete de nome de variável: val user = User("Luke", "Skywalker") Outros

Slide 37

Slide 37 text

Configurando Android Studio http://kotlinlang.org/docs/tutorials/kotlin-android.html

Slide 38

Slide 38 text

Android Studio 1.2 - Preferences > Plugins - Browse repositories… - Procurar: "Kotlin" - Instalar - Reiniciar Android Studio (2015?) 1. Instalar Plugin "Kotlin"

Slide 39

Slide 39 text

2. Configurar Gradle Plugin Editar: build.gradle buildscript { dependencies { classpath 'com.android.tools.build:gradle:1.2.2' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:+' } }

Slide 40

Slide 40 text

3. Configurar Dependência Editar: app/build.gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' [...] dependencies { [...] compile 'org.jetbrains.kotlin:kotlin-stdlib:+' }

Slide 41

Slide 41 text

Acessar qualquer *.java - Code > Convert Java File to Kotlin File 4. Fim

Slide 42

Slide 42 text

Kotterknife Butterknife para Kotlin Anko Views DSL Kotlin Android Extensions Magia em findViewByid Libs

Slide 43

Slide 43 text

Telegram interno* Prezi.com interno* PorQueNão? interno* Diversos Apps em produção Desbravadores

Slide 44

Slide 44 text

Kotlin Reference Kotlin Project Kotlin Blog Kotlin Project Using Project Kotlin for Android Jake Wharton One month with Kotlin Ademar Oliveira Referências

Slide 45

Slide 45 text

Conhecimento Não Morre

Slide 46

Slide 46 text

Obrigado Mickele Moriconi @mickele Ademar Oliveira @ademar111190 https://bit.ly/kotlin-uma-nova-esperanca