SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Construindo sua biblioteca
em Kotlin
Bruno Torres / Fernando Pinho
Agenda
● Quem somos
● A biblioteca: Clappr
● Por que escolhemos Kotlin?
● Desenvolvendo sua biblioteca em Kotlin
● Dicas de Kotlin
● Interoperabilidade com Java
● Documentação
● Como distribuímos o Clappr
Quem somos
Bruno Torres
Especialista em desenvolvimento
multiplataforma (Android, iOS, Web/Smart TV)
na Globo.com. Atua com desenvolvimento
móvel desde 2008.
bruno.torres@corp.globo.com
Fernando Pinho
Especialista em desenvolvimento móvel
(Android e iOS) na Globo.com. Atua com
desenvolvimento móvel desde 2005.
fernando.pinho@corp.globo.com
A biblioteca: Clappr
Biblioteca de reprodução de vídeos
multi-plataforma (Web, Android e iOS)
A versão Android está escrita em Kotlin.
Por que escolhemos o Kotlin?
É uma linguagem moderna e acessível, para
desenvolvedores com múltiplos backgrounds
Globo.com: desenvolvedores Python, Ruby, JavaScript
(Scala e Clojure)
Desenvolvendo sua biblioteca em Kotlin
Diferenças em relação a aplicações:
● Manter a semântica da interface externa
● Interoperabilidade com outras linguagens (Java) é importante
● Cuidar do tamanho (evitar bloating)
○ Dependências também influenciam tamanho final
● Preocupação com tarefas assíncronas e performance
Dicas de Kotlin
Compilador gera automaticamente:
● getters / setters
● equals() / hashCode()
● copy()
● toString()
○ "User(name=John, age=42)"
● componentN()
○ val (name, age) = user
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {return name;}
public int getAge() { return age;}
public void setAge(int age) {this.age = age
@Override public boolean equals(Object o) {
@Override public int hashCode() {...}
data class User(val name: String, var age: Int)
Dicas de Kotlin
Java
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { toast("Hello") }
}
Kotlin
view.setOnClickListener({ v -> toast("Hello") })
view.setOnClickListener { v -> toast("Hello") }
view.setOnClickListener { toast("Hello") }
Dicas de Kotlin
Evitar a criação de objetos
desnecessários
fun calc(factor: Int): (Int, Int) -> Int {
return { a, b -> a + b * factor }
}
@NotNull
public static final Function2 calc(final int factor) {
return new Function2() {
public Object invoke(Object var1, Object var2) {
return Integer.valueOf(this.invoke(
((Number) var1).intValue(),
((Number) var2).intValue()
));
}
public final int invoke(int a, int b) {
return a + b * factor;
}
};
}
Dicas de Kotlin
Utilizar propriedades em vez de campos públicos
class Example {
private int someField;
public int getSomeField() {
return someField;
}
public void setSomeField(int value) {
someField = value;
}
}
class Example {
var someField: Int
}
Dicas de Kotlin
Minimizar mutabilidade
● Evitar expor métodos que alterem estado interno do componente
● Utilizar factory methods no lugar de constructors
● Garantir imutabilidade de referências
● Utilizar interfaces em vez de classes abstratas
● Favorecer composição em vez de herança
● @JvmName para evitar possíveis conflitos
● @JvmStatic/@JvmField em Companion objects
● Cuidado com parâmetros null
● Validar ocorrência de boxing/unboxing
Interoperabilidade com Java
Interoperabilidade com Java
Documentação (Javadoc)
● Conversão para bytecode pode afetar resultado
● Name mangling de símbolos
Criamos um .aar e distribuímos pelo jcenter.
Clappr tem dependências externas:
Distribuição do Clappr
Clappr
189 KB
kotlin-stdlib
0,5 MB
kotlin-reflect
0,8 MB
Atenção ao usar as versões kotlin-stdlib-jdk7 e kotlin-stdlib-jdk8.
1,5 MB
Perguntas?
Estamos contratando!
Saiba mais em
talentos.globo.com
Bruno Torres
bruno.torres@corp.globo.com
Fernando Pinho
fernando.pinho@corp.globo.com
Referências
https://github.com/clappr
https://github.com/clappr/clappr-android
https://kotlinlang.org/docs/reference/data-classes.html
https://antonioleiva.com/lambdas-kotlin-android/
https://android.github.io/kotlin-guides/interop.html
https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html
https://bintray.com/bintray/jcenter

Mais conteúdo relacionado

Semelhante a TDC2018SP | Trilha Kotlin - Construindo sua biblioteca em Kotlin

Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2
Erisvaldo Junior
 

Semelhante a TDC2018SP | Trilha Kotlin - Construindo sua biblioteca em Kotlin (20)

O Qt e sua atuação no desenvolvimento desktop, mobile, embarcado e para IoT
O Qt e sua atuação no desenvolvimento desktop, mobile, embarcado e para IoTO Qt e sua atuação no desenvolvimento desktop, mobile, embarcado e para IoT
O Qt e sua atuação no desenvolvimento desktop, mobile, embarcado e para IoT
 
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
 
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - CaelumArquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
 
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorGit e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
 
Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2Desenvolvimento de Apps e Games para iOS - Parte 2
Desenvolvimento de Apps e Games para iOS - Parte 2
 
Compartilhando código com Kotlin multiplataforma - Rafael Toledo
Compartilhando código com Kotlin multiplataforma - Rafael ToledoCompartilhando código com Kotlin multiplataforma - Rafael Toledo
Compartilhando código com Kotlin multiplataforma - Rafael Toledo
 
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoTDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Python para programadores Ruby
Python para programadores RubyPython para programadores Ruby
Python para programadores Ruby
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Construindo Chatbots em Node.js
Construindo Chatbots em Node.jsConstruindo Chatbots em Node.js
Construindo Chatbots em Node.js
 
Construindo Aplicações Semânticas com Desenvolvimento Ágil: Plataforma JOINT
Construindo Aplicações Semânticas com Desenvolvimento Ágil: Plataforma JOINTConstruindo Aplicações Semânticas com Desenvolvimento Ágil: Plataforma JOINT
Construindo Aplicações Semânticas com Desenvolvimento Ágil: Plataforma JOINT
 
Desenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtDesenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com Qt
 
Robot Lego programado em Java
Robot Lego programado em JavaRobot Lego programado em Java
Robot Lego programado em Java
 
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
 
Kotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSLKotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSL
 
Android fest
Android festAndroid fest
Android fest
 
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
 

Mais de tdc-globalcode

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
azulassessoria9
 
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
aulasgege
 

Último (20)

Maio Laranja - Combate à violência sexual contra crianças e adolescentes
Maio Laranja - Combate à violência sexual contra crianças e adolescentesMaio Laranja - Combate à violência sexual contra crianças e adolescentes
Maio Laranja - Combate à violência sexual contra crianças e adolescentes
 
Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigas
 
Tema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfTema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdf
 
Religiosidade de Assaré - Prof. Francisco Leite
Religiosidade de Assaré - Prof. Francisco LeiteReligiosidade de Assaré - Prof. Francisco Leite
Religiosidade de Assaré - Prof. Francisco Leite
 
Histogramas.pptx...............................
Histogramas.pptx...............................Histogramas.pptx...............................
Histogramas.pptx...............................
 
[2.3.3] 100%_CN7_CAP_[FichaAvaliacao3].docx
[2.3.3] 100%_CN7_CAP_[FichaAvaliacao3].docx[2.3.3] 100%_CN7_CAP_[FichaAvaliacao3].docx
[2.3.3] 100%_CN7_CAP_[FichaAvaliacao3].docx
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
 
Acróstico - Maio Laranja
Acróstico  - Maio Laranja Acróstico  - Maio Laranja
Acróstico - Maio Laranja
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...QUESTÃO 4   Os estudos das competências pessoais é de extrema importância, pr...
QUESTÃO 4 Os estudos das competências pessoais é de extrema importância, pr...
 
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
Proposta de redação Soneto de texto do gênero poema para a,usos do 9 ano do e...
 
FUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - materialFUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - material
 
Currículo Professor Pablo Ortellado - Universidade de São Paulo
Currículo Professor Pablo Ortellado - Universidade de São PauloCurrículo Professor Pablo Ortellado - Universidade de São Paulo
Currículo Professor Pablo Ortellado - Universidade de São Paulo
 
Atividades adaptada de matemática (Adição pop )
Atividades adaptada de matemática (Adição pop )Atividades adaptada de matemática (Adição pop )
Atividades adaptada de matemática (Adição pop )
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
 
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - GeoprocessamentoDados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
 

TDC2018SP | Trilha Kotlin - Construindo sua biblioteca em Kotlin

  • 1. Construindo sua biblioteca em Kotlin Bruno Torres / Fernando Pinho
  • 2. Agenda ● Quem somos ● A biblioteca: Clappr ● Por que escolhemos Kotlin? ● Desenvolvendo sua biblioteca em Kotlin ● Dicas de Kotlin ● Interoperabilidade com Java ● Documentação ● Como distribuímos o Clappr
  • 3. Quem somos Bruno Torres Especialista em desenvolvimento multiplataforma (Android, iOS, Web/Smart TV) na Globo.com. Atua com desenvolvimento móvel desde 2008. bruno.torres@corp.globo.com Fernando Pinho Especialista em desenvolvimento móvel (Android e iOS) na Globo.com. Atua com desenvolvimento móvel desde 2005. fernando.pinho@corp.globo.com
  • 4. A biblioteca: Clappr Biblioteca de reprodução de vídeos multi-plataforma (Web, Android e iOS) A versão Android está escrita em Kotlin.
  • 5. Por que escolhemos o Kotlin? É uma linguagem moderna e acessível, para desenvolvedores com múltiplos backgrounds Globo.com: desenvolvedores Python, Ruby, JavaScript (Scala e Clojure)
  • 6. Desenvolvendo sua biblioteca em Kotlin Diferenças em relação a aplicações: ● Manter a semântica da interface externa ● Interoperabilidade com outras linguagens (Java) é importante ● Cuidar do tamanho (evitar bloating) ○ Dependências também influenciam tamanho final ● Preocupação com tarefas assíncronas e performance
  • 7. Dicas de Kotlin Compilador gera automaticamente: ● getters / setters ● equals() / hashCode() ● copy() ● toString() ○ "User(name=John, age=42)" ● componentN() ○ val (name, age) = user public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() {return name;} public int getAge() { return age;} public void setAge(int age) {this.age = age @Override public boolean equals(Object o) { @Override public int hashCode() {...} data class User(val name: String, var age: Int)
  • 8. Dicas de Kotlin Java view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toast("Hello") } } Kotlin view.setOnClickListener({ v -> toast("Hello") }) view.setOnClickListener { v -> toast("Hello") } view.setOnClickListener { toast("Hello") }
  • 9. Dicas de Kotlin Evitar a criação de objetos desnecessários fun calc(factor: Int): (Int, Int) -> Int { return { a, b -> a + b * factor } } @NotNull public static final Function2 calc(final int factor) { return new Function2() { public Object invoke(Object var1, Object var2) { return Integer.valueOf(this.invoke( ((Number) var1).intValue(), ((Number) var2).intValue() )); } public final int invoke(int a, int b) { return a + b * factor; } }; }
  • 10. Dicas de Kotlin Utilizar propriedades em vez de campos públicos class Example { private int someField; public int getSomeField() { return someField; } public void setSomeField(int value) { someField = value; } } class Example { var someField: Int }
  • 11. Dicas de Kotlin Minimizar mutabilidade ● Evitar expor métodos que alterem estado interno do componente ● Utilizar factory methods no lugar de constructors ● Garantir imutabilidade de referências ● Utilizar interfaces em vez de classes abstratas ● Favorecer composição em vez de herança
  • 12. ● @JvmName para evitar possíveis conflitos ● @JvmStatic/@JvmField em Companion objects ● Cuidado com parâmetros null ● Validar ocorrência de boxing/unboxing Interoperabilidade com Java
  • 13. Interoperabilidade com Java Documentação (Javadoc) ● Conversão para bytecode pode afetar resultado ● Name mangling de símbolos
  • 14. Criamos um .aar e distribuímos pelo jcenter. Clappr tem dependências externas: Distribuição do Clappr Clappr 189 KB kotlin-stdlib 0,5 MB kotlin-reflect 0,8 MB Atenção ao usar as versões kotlin-stdlib-jdk7 e kotlin-stdlib-jdk8. 1,5 MB
  • 15. Perguntas? Estamos contratando! Saiba mais em talentos.globo.com Bruno Torres bruno.torres@corp.globo.com Fernando Pinho fernando.pinho@corp.globo.com