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

Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 

Último (20)

About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 

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