Blog oficial para desenvolvedores que falam português
Como adotar a linguagem Kotlin
10/19/18
Como incorporar Kotlin a um aplicativo grande
Ilustração de
Virginia Poltrack
Uma das perguntas mais frequentes que recebo de desenvolvedores em conferências é: “Qual é o melhor jeito de adicionar Kotlin a um aplicativo para Android existente?” Se você trabalha em uma equipe com mais de cinco pessoas, adotar uma nova linguagem pode ser complicado. Com o tempo, minha resposta foi ficando cada vez mais longa, e eu a ajustei com base em minhas experiências pessoais ao adicionar a linguagem Kotlin a projetos existentes e ao trocar ideias, tanto com colegas do Google como da comunidade externa de desenvolvedores, sobre suas experiências.
Criamos um guia para ajudá-lo a introduzir Kotlin a projetos existentes em equipes maiores. Muitas equipes do Google já usaram essas técnicas, incluindo a equipe de Relações com o desenvolvedor do Android. Dois exemplos conhecidos são o
aplicativo Google I/O 2018
, que foi reescrito completamente em Kotlin, e o
Plaid
, que mistura Java e Kotlin.
Como adicionar Kotlin a um aplicativo
Indicar um responsável por Kotlin
Indique uma pessoa da sua equipe para ser o especialista em Kotlin e orientar o restante da equipe. Geralmente, essa pessoa é aquela que demonstra o maior interesse em usar a linguagem Kotlin. Na verdade, pode até mesmo ser você, já que você está lendo este artigo. Essa pessoa deve se concentrar em aprender o máximo possível sobre a linguagem Kotlin e pesquisar sobre ideias de como incorporá-la da melhor maneira ao aplicativo existente. Ela deve compartilhar proativamente seu conhecimento sobre Kotlin e se tornar referência para tirar as dúvidas da equipe sobre a linguagem. Além disso, ela deve participar das revisões de código em Java e Kotlin para garantir que as mudanças sigam as convenções da linguagem Kotlin e facilitar a interoperabilidade entre linguagens (como as anotações de anulabilidade).
Aprender os princípios básicos
Enquanto o especialista em Kotlin se aprofunda nessa linguagem, o restante da equipe deve desenvolver um conhecimento básico sobre ela. Se a equipe estiver apenas começando a usar Kotlin, há muitos recursos que podem ser usados para aprender a linguagem e saber como ela interage com o Android. Recomendo começar com o
Kotlin Koans
, uma série de exercícios rápidos que oferecem um tour dos recursos da linguagem. No meu caso, esse foi um jeito divertido de aprender Kotlin.
O site oficial da Kotlin (
kotlinlang.org
) oferece
documentos de referência
para trabalhar com a
biblioteca padrão de Kotlin
e
tutoriais
passo a passo para realizar tarefas diferentes em Kotlin. O site de Desenvolvedores Android também oferece
vários recursos
para trabalhar com Kotlin no Android.
Criar um grupo de estudos
Quando a equipe estiver familiarizada com os princípios básicos de escrita em Kotlin, será uma boa hora para criar um grupo de estudos. A linguagem Kotlin está evoluindo rapidamente com muitos recursos novos no canal, como
Coroutines
e
Multiplatform
. Discussões frequentes em grupo ajudam você a entender os novos recursos da linguagem e reforçam as práticas recomendadas de Kotlin na sua empresa.
Testes de escrita em Kotlin
Muitas equipes perceberam que os testes de escrita em Kotlin são um ótimo jeito de começar a usar essa linguagem nos seus projetos, já que esses testes não afetam o código da produção e não estão agrupados no pacote do aplicativo.
Sua equipe pode escrever novos testes ou converter testes existentes para Kotlin. Os testes são úteis para verificar regressões do código e oferecem um nível de confiança ao refatorar o código. Eles serão especialmente úteis ao converter códigos existentes em Java para Kotlin.
Escrever um código novo em Kotlin
Antes de converter o código existente em Java para Kotlin, adicione pequenas partes do código em Kotlin à base de código do seu aplicativo. Comece com uma pequena classe ou uma função auxiliar de nível superior e não deixe de acrescentar
anotações
relevantes ao código Kotlin para garantir a interoperabilidade correta do código Java.
Analise o impacto no tamanho do APK e no desempenho da compilação
Adicionar Kotlin ao seu aplicativo pode aumentar o tamanho do APK e os tempos da compilação. Sugerimos usar o
Proguard
para garantir que os APKs da versão tenham o menor tamanho possível e reduzir o aumento no número de métodos. Após executar o Proguard, o impacto da linguagem Kotlin no tamanho do APK será bem menor, especialmente quando você estiver apenas começando.
Para projetos que usam somente a linguagem Kotlin ou uma mistura de linguagens (aqueles escritos em Java e Kotlin), há um pequeno aumento nos tempos de programação e compilação. No entanto, muitos desenvolvedores acreditam que o aumento de produtividade com a escrita em Kotlin é uma troca que vale a pena. As equipes de Kotlin e Android estão cientes do aumento no tempo de compilação e estão se esforçando continuamente para melhorar essa parte importante do processo de desenvolvimento. Meça e monitore o impacto no desempenho da compilação dos seus projetos.
Atualizar código existente para Kotlin
Quando sua equipe estiver familiarizada com Kotlin, comece a converter seu código existente para essa linguagem.
Uma opção extrema é começar do zero e reescrever todo o aplicativo em Kotlin. Fizemos isso com o
aplicativo para Android Google I/O 2018
, mas isso provavelmente não é uma opção para a maioria das equipes, já que elas precisam entregar o software enquanto adotam novas tecnologias. Felizmente, as linguagens Kotlin e Java são completamente interoperáveis, então você pode migrar seu projeto uma classe de cada vez.
Uma abordagem mais realista é usar o
conversor de código
no Android Studio, que converte o código de um arquivo Java para Kotlin. Além disso, o ambiente de desenvolvimento integrado oferece uma opção para converter para Kotlin qualquer código Java colado da área de transferência em um arquivo Kotlin. O conversor nem sempre produz o Kotlin mais idiomático. Você precisará revisar cada arquivo, mas é um ótimo jeito de economizar tempo e conferir como o Kotlin ficará na sua base de código.
Embora o Java e o Kotlin sejam 100% interoperáveis, eles não têm compatibilidade de código. Não é possível escrever um único arquivo usando Java e Kotlin. Consulte os guias de
Kotlin
e
Android
para saber outras dicas para escrever códigos interoperáveis com Java e Kotlin.
Convencer a gerência a adotar Koplin
Após obter um pouco de experiência com Kotlin, talvez você chegue à conclusão de que ela é a linguagem certa para sua equipe. Mesmo assim, ainda será necessário convencer as lideranças da empresa ou partes interessadas a adotar Kotlin, mesmo que essas pessoas não tenham a mesma paixão que você por classes de dados, smart casts e funções de extensão. Como fazer isso? A melhor abordagem dependerá da sua situação específica. Sugerimos abaixo alguns possíveis pontos de discussão com dados que você pode usar para fundamentar seus argumentos.
A equipe é mais produtiva com Kotlin.
Mostre dados comparando as médias de linhas de código por arquivo entre Kotlin e Java. É bem comum perceber uma redução de 25% ou mais na quantidade de linhas de código. Menos código para escrever significa menos código para testar e manter, permitindo que a equipe desenvolva novos recursos mais rapidamente. Além disso, você pode monitorar se a sua equipe desenvolveu um novo recurso em Kotlin mais rapidamente em comparação ao desenvolvimento de um recurso semelhante em Java.
Kotlin aumenta a qualidade do aplicativo.
O recurso de proteção contra nulos (null-safety) da linguagem Kotlin é bem conhecido, mas existem muitos
outros recursos de segurança
que ajudam a evitar categorias completas de defeitos nos códigos. Uma ideia do Pinterest é monitorar sua taxa de defeitos em cada módulo do aplicativo durante a migração de Java para Kotlin. A taxa de defeitos deverá diminuir. Assista ao debate do Pinterest sobre isso no
vídeo História do desenvolvedor Android
. Também há uma
pesquisa acadêmica recente
para fundamentar esse argumento.
Kotlin deixa sua equipe mais feliz.
Felicidade é difícil de quantificar, mas você pode encontrar uma maneira de mostrar à gerência a animação da sua equipe com o uso da linguagem Kotlin. Kotlin é a segunda linguagem de programação favorita dos desenvolvedores de acordo com a
pesquisa StackOverflow 2018
.
O setor está adotando Kotlin.
Vinte e seis por cento dos mil aplicativos para Android mais populares na Play Store já usam Kotlin. Isso inclui pesos pesados, como Twitter, Pinterest, WeChat, American Express e muitos outros. Kotlin também é a segunda linguagem de programação voltada para dispositivos móveis com maior crescimento de acordo com a Redmonk. A Dice também publicou que o número de empregos relacionados ao conhecimento em Kotlin
aumentou exponencialmente
.
Indo além
Após adquirir alguma experiência prática em adicionar linguagem Kotlin ao seu aplicativo, veja aqui mais dicas para ajudar a incorporar a linguagem em sua rotina diária de desenvolvimento.
Definir convenções de estilo específicas para projetos
Os guias de estilo
Kotlin
e
Android Kotlin
apresentam linhas de base para formatação do código Kotlin. Além deles, é uma boa ideia estabelecer convenções e linguagens que funcionem para sua equipe.
Uma estratégia para implementar o estilo unificado de Kotlin é personalizar as
configurações de estilo de código
do Android Studio. Outra estratégia é usar uma ferramenta de inspeção. Nos projetos
Sunflower
e
Plaid
, usamos a ferramenta
ktlint
para impor estilos de código. O Ktlint oferece ótimos padrões de estilo que seguem os guias de estilo padrão de Kotlin, que também podem ser personalizados de acordo com as necessidades específicas da sua equipe.
Usar somente o necessário
É fácil exagerar com a sintaxe da linguagem Kotlin, dispondo frases em apply, let, use e outros ótimos recursos. Em geral, o melhor é priorizar a fluência em vez de tentar minimizar linhas de código. Por exemplo, no projeto Plaid, determinamos que um bloco apply deveria ter pelo menos duas linhas. Descubra o que funciona para sua equipe e adicione essa prática ao seu guia de estilo.
Explorar amostras de projetos e estudos de caso
A seção de recursos abaixo apresenta amostras de projetos que Googlers migraram para Kotlin, junto com estudos de caso de empresas que adicionaram essa linguagem a seus projetos.
Perguntas frequentes
Novas tecnologias trazem territórios desconhecidos. Veja aqui algumas perguntas que os desenvolvedores que adotaram Kotlin já fizeram, junto com as soluções sugeridas.
Como posso convencer meus colegas engenheiros a adotar uma nova linguagem?
No Google I/O, apresentei várias abordagens de adoção de Kotlin para engenheiros ao lado de
Andrey Breslav
, o líder de design em linguagem Kotlin. Nós concordamos que a melhor prática é testar algumas implementações de Kotlin com a equipe e depois avaliar se elas funcionam para vocês. Afinal de contas, se houver mais pontos negativos do que positivos, você pode deixar Kotlin para lá, e Andrey diz que, por ele, tudo bem.
Não é difícil aprender Kotlin?
A maioria dos desenvolvedores aprende Kotlin bem rápido. Desenvolvedores experientes em Java podem usar as mesmas ferramentas para desenvolver programações em Java e Kotlin. Desenvolvedores de Ruby e Python encontrarão recursos de linguagem semelhantes na linguagem Kotlin, como o encadeamento de métodos (method chaining).
O Google continuará oferecendo suporte a Kotlin para o desenvolvimento em Android?
Sim!
O Google está comprometido em oferecer suporte à linguagem Kotlin.
Conclusão
Espero que este guia inspire você e suas equipes a adicionar Kotlin a seus aplicativos. Embora as etapas possam parecer assustadoras, quase todas as pessoas com quem falei experimentaram uma alegria renovada ao desenvolver software após adotar Kotlin.
Este artigo foi escrito principalmente para os aplicativos para Android, mas seus conceitos também são aplicáveis a projetos baseados em Java, de aplicativos para Android a programações no lado do servidor.
Agradecemos pela leitura e desejamos boa sorte na sua jornada ao adicionar Kotlin ao seu aplicativo!
Continue explorando
A coleção de recursos abaixo tem o objetivo de ajudar você a adotar Kotlin:
— O site oficial da linguagem Kotlin é
kotlinlang.org
Escreva código Kotlin seguindo os
tutoriais
ou os
Kotlin Koans
(você pode até mesmo
experimentá-lo on-line
com seu navegador)
Procure
documentos de referência
para trabalhos na
biblioteca padrão
de Kotlin
Leia sobre novos recursos, como
Coroutines
e
Multiplatform
—
Desenvolver aplicativos para Android com Kotlin
no
developer.android.com
— Guias de estilo e interoperabilidade
Convenções gerais de codificação
para Kotlin
Guia de estilo
de Kotlin para Android
Guias de interoperabilidade para chamar
código Java a partir de Kotlin
e
chamar Kotlin a partir de Java
e
guias gerais de interoperabilidade no Android
Como definir
configurações de estilo de código
do Android Studio
KtLint
— uma ferramenta de inspeção de Kotlin com formatador integrado
— Amostras de código
Aplicativo Google I/O 2018 para Android
Plaid
Sunflower
Tivi
Topeka
Outras
amostras de código
disponíveis em
developer.android.com
— Estudos de caso
Basecamp — “
Como tornamos o aplicativo Basecamp 3 para Android 100% Kotlin
”
Camera360 — “
História de desenvolvedor Android: Camera360 alcança o sucesso global com Kotlin e novas tecnologias
” (vídeo em chinês com legendas em inglês)
Hootsuite — “
A Era do Kotlin na Hootsuite
”
Keepsafe — “
Lições da conversão de um aplicativo para 100% Kotlin
”
Pinterest — “
Kotlin para desenvolvedores de Java rabugentos
”
— Artigos
Série 31 dias de Kotlin
no Twitter — uma dica diária de Kotlin durante março de 2018 de
@AndroidDev
. Cada um dos 31 tuítes exploram um recurso específico de Kotlin e podem servir como um tour guiado para melhorar o uso da linguagem em um mês. Postagens do blog com resumos também estão disponíveis:
Semana 1
,
Semana 2
,
Semana 3
,
Semana 4
As lições aprendidas durante a conversão para Kotlin com o Android Studio
— artigo de
Ben Baxter
, Parceiro assistente de desenvolvimento no Google
Migração e projetos Android para Kotlin
— artigo de
Ben Weiss
, Relações com o desenvolvedor Android no Google
Agradecimentos:
James Lau
e
Sean McQuillan
Labels
+page
1
20th Century Fox
1
A/B
1
Action
1
Action Console
1
Actions
3
Actions Console
1
Actions on Google
1
ActiveQA
1
Adaptive Battery
1
AddThis
1
ADK
1
ADL
1
Admin do Firebase
1
AdMob
6
Ads
2
AdWords
1
AdX
1
AI
4
algoritmo
1
AMP
6
AMP Linker
1
AMP Project
1
Analytics API
1
Android
58
Android 8.0 Oreo
1
Android 8.1
1
Android ADK
2
Android API
2
Android App Bundle
1
Android Dev Summit
1
Android Developers
23
Android Marshmallow
1
Android N
3
Android Nougat
2
Android P
3
Android P Beta 2
1
Android Preview
1
Android SDK
1
android studio
8
Android Studio 3.2
1
android wear
2
AndroidDev
6
AndroidX
1
Announcement
2
AoG
1
AoGDevs
1
api
15
API 25
1
API 28
1
APIs
4
Aplicativos
4
app
1
App Engine
1
Apple
1
apply
1
Apps
9
AR
1
ARCore
3
artificial intelligence
1
AsyncTask
1
AUC
1
AutoAugment
1
Avro
1
Awareness API
1
Biblioteca do Google
1
Big Data
1
BigQuery
1
BiometricPrompt
1
bitcode
1
Borg
1
Bot
1
bytecode Dalvik
1
C++
1
câmera
1
CameraDevice
1
Canal Beta
1
canary
1
câncer de próstata
1
Capital One
1
Cast
1
CFI
1
Chrome
8
Chrome 68
1
Chrome Dev Summit
1
Chrome DevTools
1
Chrome OS
2
Chromecast
1
Chromium
2
CI
1
CLI
1
Cloud
6
Cloud Computing
1
Cloud Console
1
Cloud Dataflow
1
Cloud Developers
2
Cloud DLP
1
Cloud Firestore
1
Cloud Messaging
1
Cloud ML Engine
1
Cloud Scheduler
1
Cloud Shell
1
Cloud Source Repositories
1
Cloud Spanner
2
CodeSchool
1
código aberto
2
Compute Engine
1
ConfigMap
1
Container Builder
1
CPU
2
Crash Reporting
2
Crashlytics
3
credential api
1
criptografia
1
CSS
3
CSS Grid Layout
1
CSV
1
CTA
1
Curitiba
1
Dart API
1
Data Validation
1
DBAs
1
DCGAN
1
Desenvolvedores Google
11
Desenvolvimento
3
DevBusBrasil
1
DevBytes
2
Developer Bus
1
Developer Preview
1
developer quiz
1
DevFest
3
DevFest16
1
DevFest18
1
DevFestW
1
DFP
2
Dialogflow
1
DLP
1
DLS
1
documentação
1
Dragon Ball Legends
1
E2E
1
eclipse
1
end-to-end-encryption
1
Estimator
1
Estimators API
1
estudantes
1
Eventos
15
Famílias multilíngue
1
FCM
2
Featured
1
Firebase
24
Firebase Analytics
6
Firebase App Indexing
2
Firebase Cloud Messaging
5
Firebase Crashlytics
2
Firebase Dynamic Links
3
Firebase In-App Messaging
1
Firebase Invites
2
Firebase Lab
1
Firebase Links Dinamicos
1
Firebase Notifications
3
Firebase Remote Config
1
Flutter
3
FRR
1
G+
1
game
1
game dev
3
Games
2
games services
1
GCloud
3
GCM
1
GCP
7
GDD
7
GDE
1
GDEs
1
GDG
12
GDG Curitiba
1
GDG Floripa
1
GDG OpenSampa
1
GDG Porto Alegre
1
GDG Recife
1
GDG SP
3
GDGs
1
GDL
1
Git
1
GitHub
1
GNMT
1
Google
3
Google Ad Manager
1
Google AI
1
Google Analytics
1
Google Assistant
1
Google Assistente
3
Google Brain
2
Google Cast SDK
1
google clou
1
Google Cloud
17
Google Cloud Certified
1
Google Cloud Healthcare API
1
Google Cloud Platform
3
google code-in
1
Google Developer Advocate
1
Google Developer Expert
1
Google Developers
11
Google Fotos
1
Google I/O
6
Google Play
16
Google Play Games services
1
Google Play Protect
1
Google Play Services
4
Google Slides
1
Google Speech
1
google summer of code
1
Google+
2
Google+ sign-in
1
Googlers
1
GPU
2
GSuites
1
GUI
1
Hackathon
1
Hangouts
1
Hangouts Chat
1
HDR
1
High Quality Apps
2
HTML5
6
HTTP
3
HTTPS
2
HttpURLConnection
2
I/O
1
IA
2
Illusive Images
1
ImageReader
1
In-App Messaging
1
Inglês
1
Instant Apps
1
inteligencia artificial
1
IntelliJ REPL
1
IntentService
1
Interoperabilidade
1
IO Extended
1
IO13
1
iOS
9
IU
2
Java
1
Java 8
1
javascript
2
JPEG
1
JSON
2
Kaggle
1
kernel
1
Keyboard Map API
1
Knowledge Connectors
1
Kotlin
6
Kotlin da Udacity
1
Kubernetes
5
LangID
1
Launchpad
1
launchpad accelerator
2
Learning Augmentation
1
LEGO
1
Listas
1
ListFragment
1
LLVM
1
LTO
1
Machine Learning
2
Meetup
2
mensagens
1
Mentoria
1
Messaging
2
microsserviços
1
ML
2
ML Kit
1
Mobile
3
Mobile Ads SDK
1
Monetização
3
Monetize
3
MySQL
1
Native
1
Navigation Architecture Component
1
NES
1
Neto Marin
2
Next Level Apps
2
Next Level Tips
2
NNLM
1
Node.js
2
Notificações
1
novembro azul
1
Number Genie
1
Nuvem Profissional
1
OAuth
2
OAuth2
1
Open Images Extended
1
open source
3
Options Menu
1
Options Menu virtual
1
Orkut
2
Payment Request
1
pesquisa
1
PHA
1
Phone Gateway
1
PII
1
pixel
1
Play Academy
1
Play Console
1
Play Services
1
Playtime 2018
1
plug-in AMP
1
Porto Alegre
1
Preact
1
PRIV
1
program
1
progressive web apps
2
Push Notification
2
Python
1
QA
1
RA
2
Raspberry Pi
1
RBDMS
1
React
1
recording apis
1
remarketing
1
Remote Config
2
research
4
ResultReceiver
1
reward
1
RNN
2
Robolectric 4.0
1
RV
1
Sceneform
1
SDK
4
SDK Manager
3
Security
2
Server
1
service worker
1
sign-in
1
Sliding Tabs
1
Smartronix
1
social
6
Spark
1
SRE
1
Stack
1
Stack Overflow
1
Startups
2
Storage
2
story
1
Support Library
1
SurfaceView
1
Svelte
1
switch
1
Tag Manager
1
Tag Manager 360
1
tensorflow
5
TensorFlow Hub
2
TensorFlow Lite
1
TensorFlow Transform
1
Test Lab
2
Testes
1
TF Hub
2
tf.keras
1
TFDV
1
TFX
1
TI essencial
1
toolkit
1
tradução
1
TTS
1
Udacity
1
Universal Apps
1
Universal Sentence Encoder
1
user experience
1
ux
1
VectorDrawable
1
Velostrata
1
Volley
1
vr
2
vulnerabilidades
1
vulnerabilidades do Google
1
vulnerability
1
web
2
web dev
2
WebKit
1
webservice
3
when
1
WordPress
1
WorkerDOM
1
YouTube
4
YouTube API
1
YUV
1
Zomato
1
Archive
2022
Nov
Oct
Jul
Jun
May
Apr
Mar
Feb
Jan
2021
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2020
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2019
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
2018
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
2017
Aug
Jul
Jun
May
Apr
Mar
Jan
2016
Dec
Nov
Oct
Sep
Aug
Jul
May
Mar
2014
Jul
Jun
Apr
Mar
Feb
2013
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Mar
Feb
Jan
2012
Nov
Jul
Jun
May
Apr
Mar
2011
Nov
Sep
Aug
Jul
Jun
Feed
Follow @googledevbr