Programando com Kotlin
Conheça todos os recursos de Kotlin com este guia detalhado
Descrição do livro
Kotlin tem causado sensação desde que foi disponibilizado como código aberto pela JetBrains em 2011. A linguagem foi elogiada por desenvolvedores no mundo todo e já está sendo adotada pelas empresas. Este livro apresenta uma introdução detalhada a Kotlin, mostrando todos os seus recursos, e possibilitará que você escreva código Kotlin para ambientes de produção.
Começaremos pelo básico: deixaremos você se familiarizar com a execução de código Kotlin, configurar ferramentas e apresentar instruções que poderão ser usadas para escrever programas básicos. Em seguida, discutiremos códigos orientados a objetos – funções, lambdas e propriedades –, tudo isso enquanto utilizamos os novos recursos de Kotlin.
Então, prosseguiremos discutindo aspectos sobre null safety (segurança de nulos) e parametrização de tipos. Mostraremos como desestruturar expressões e até mesmo escrever suas próprias expressões. Também abordaremos tópicos importantes, como testes, concorrência, microsserviços e muito mais. No final deste livro, você será capaz de compor diferentes serviços e construir suas próprias aplicações.
Você aprenderá a:
utilizar novos recursos para escrever código orientado a objetos estruturado e legível;
usar lambdas e funções de alta ordem para escrever um código limpo, reutilizável e simples;
escrever testes de unidade e integrar testes de Kotlin com código Java em uma base de código em transição;
escrever código de produção para o mundo real em Kotlin no estilo de microsserviços;
tirar proveito das extensões de Kotlin para usar a biblioteca de coleções de Java;
escrever código que evite erros de ponteiros nulos e ver como um código Java nullable pode ser integrado aos recursos de uma base de código Kotlin;
escrever funções em Kotlin, conhecer novos recursos disponíveis e estender as bibliotecas existentes.
Sumário
- Prefácio
- Capítulo 1 ■ Introdução à linguagem Kotlin
- Usando a linha de comando para compilar e executar código Kotlin
- Runtime de Kotlin
- REPL
- Kotlin para scripting
- Kotlin com Gradle
- Kotlin com Maven
- IntelliJ e Kotlin
- Eclipse e Kotlin
- Misturando Kotlin e Java em um projeto
- Resumo
- Capítulo 2 ■ Básico sobre Kotlin
- Vals e vars
- Inferência de tipo
- Tipos básicos
- Números
- Booleanos
- Chars
- Strings
- Arrays
- Comentários
- Pacotes
- Importações
- Importações com caractere-curinga
- Renomeando na importação
- Templates de string
- Intervalos
- Laços
- Tratamento de exceções
- Instanciando classes
- Igualdade referencial e igualdade estrutural
- Expressão this
- Escopo
- Modificadores de visibilidade
- Private
- Protected
- Internal
- Controle de fluxo como expressões
- Sintaxe de null
- Verificação de tipos e casting
- Casts inteligentes
- Casting explícito
- Expressão when
- When (valor)
- When sem argumento
- Retorno de função
- Hierarquia de tipos
- Resumo
- Capítulo 3 ■ Programação orientada a objetos em Kotlin
- Classes
- Níveis de acesso
- Classes aninhadas
- Classes de dados
- Classes enum
- Métodos estáticos e objetos companheiros
- Interfaces
- Herança
- Modificadores de visibilidade
- Classes abstratas
- Interface ou classe abstrata
- Polimorfismo
- Regras para sobrescrita
- Herança versus composição
- Delegação de classe
- Classes seladas
- Resumo
- Capítulo 4 ■ Funções em Kotlin
- Definindo funções
- Funções com uma única expressão
- Funções-membro
- Funções locais
- Funções de nível superior
- Parâmetros nomeados
- Parâmetros default
- Funções de extensão
- Precedência para funções de extensão
- Funções de extensão em nulls
- Funções-membro de extensão
- Sobrescrevendo funções-membro de extensão
- Extensões em objetos companheiros
- Múltiplos valores de retorno
- Funções infixas
- Operadores
- Sobrecarga de operadores
- Operadores básicos
- in/contains
- get/set
- Comparação
- Atribuição
- Interoperabilidade com Java
- Funções literais
- Funções tail recursive
- varargs
- Operador de spread
- Funções da biblioteca-padrão
- apply
- let
- with
- run
- lazy
- use
- repeat
- require/assert/check
- Funções genéricas
- Funções puras
- Java a partir de Kotlin
- Getters e setters
- Métodos abstratos únicos
- Escapando identificadores de Kotlin
- Exceções verificadas
- Métodos void em Java
- Kotlin a partir de Java
- Funções de nível superior
- Parâmetros default
- Objetos e métodos estáticos
- Nomes em caso de apagamento (erasure)
- Captura de exceções verificadas
- Resumo
- Capítulo 5 ■ Funções de ordem superior e programação funcional
- Funções de ordem superior
- Devolvendo uma função
- Atribuição de função
- Closures
- Funções anônimas
- Referências a funções
- Referências a funções de nível superior
- Referências a funções-membro e a funções de extensão
- Referências vinculadas
- Receptores de funções literais
- Funções na JVM
- Bytecode
- Composição de funções
- Funções inline
- Noinline
- Currying e aplicação parcial
- Currying em ação
- Acrescentando suporte a currying
- Memoização
- Implementando a memoização
- Alias de tipo
- Either
- fold
- Projeção
- Outras funções de projeção
- DSLs personalizadas
- Funções infixas como palavras reservadas
- Usando receptores de função em uma DSL
- Validação e acúmulo de erros
- Resumo
- Capítulo 6 ■ Propriedades
- Por que usar propriedades?
- Sintaxe e variações
- Visibilidade
- Inicialização tardia
- Propriedades delegadas
- Inicializações preguiçosas
- lateinit versus lazy
- Observáveis
- Delegação de uma propriedade diferente de null
- Propriedades ou métodos?
- Resumo
- Capítulo 7 ■ Null safety, reflexão e anotações
- Tipos nullable
- Cast inteligente
- Acesso seguro de null
- Operador force
- Operador Elvis
- Casting seguro
- Opcionais
- Criando e devolvendo um Optional
- Usando um Optional
- Reflexão
- KClass
- Instanciação usando reflexão
- Construtores
- Instanciação com callBy
- Objetos e companheiros
- Propriedades úteis de KClass
- Funções e propriedades reflexivas
- Chamando uma função de modo reflexivo
- Variantes declaradas e não declaradas
- Anotações
- Parâmetros de anotações
- Anotações-padrão
- @JvmName
- @JvmStatic
- @Throws
- @JvmOverloads
- Descoberta de anotações em tempo de execução
- Resumo
- Capítulo 8 ■ Genéricos
- Funções parametrizadas
- Tipos parametrizados
- Polimorfismo restrito
- Limites superiores
- Vários limites
- Variância de tipos
- Invariância
- Covariância
- Tipo de retorno covariante
- Contravariância
- Visão geral sobre variância
- Tipo Nothing
- Projeção de tipos
- Apagamento de tipo
- Reificação de tipos
- Limites de tipos recursivos
- Tipos de dados algébricos
- Resumo
- Capítulo 9 ■ Classes de dados
- Criação automática de getters e setters
- Método copy
- toString automático
- Métodos hashCode e equals gerados para você
- Declarações desestruturadas
- Desestruturando tipos
- Regras para definição de classe de dados
- Limitações
- Resumo
- Capítulo 10 ■ Coleções
- Hierarquia de classes
- Arrays
- Listas
- Mapas
- Conjuntos
- Visões somente de leitura
- Acesso indexado
- Sequências
- Resumo
- Capítulo 11 ■ Testes em Kotlin
- Introdução
- Selecionando uma spec
- Matchers
- Matchers de string
- Matchers de coleção
- Matchers de ponto flutuante
- Esperando exceções
- Combinando matchers
- Matchers personalizados
- Inspetores
- Interceptadores
- Interceptador de caso de teste
- Interceptador de spec
- Config do projeto
- Testes de propriedade
- Especificando um gerador
- Testes orientados a tabela
- Testando um código não determinístico
- Tags, condições e config
- Config
- Condições
- Tags
- Recursos
- Resumo
- Capítulo 12 ■ Microsserviços com Kotlin
- Definição
- Desvantagens
- Por que usar microsserviços?
- Lagom
- Definindo serviços
- Implementando um serviço Lagom
- Resumo
- Capítulo 13 ■ Concorrência
- Threads
- Bloqueio
- Deadlocks e livelocks
- O problema do jantar dos filósofos
- Executores
- Condições de concorrência
- Monitores
- Locks
- Semáforos
- Coleções concorrentes
- Variáveis atômicas
- CountDownLatch
- Barreira cíclica
- E/S não bloqueante e programação assíncrona
- Futures
- Resumo
Sobre os autores
Stephen Samuel é um desenvolvedor talentoso, com mais de 17 anos de experiência. Trabalhou com Java ao longo de sua carreira e, nos últimos cinco anos, concentrou-se em Scala. Tem paixão por concorrência e tecnologias de Big Data. Passou os últimos anos na área de investimentos bancários e, atualmente, trabalha com Kotlin em um grande projeto… Ver perfil completo ▶
Stefan Bocutiu é consultor de Big Data, com mais de 13 anos de experiência em desenvolvimento de software. Gosta de programar em Scala e C# e tem paixão por tecnologias de processamento de streams. Com a equipe da DataMountaineer – uma empresa de consultoria que oferece soluções para plataformas de streaming/fast data –, Stefan tem como foco… Ver perfil completo ▶
Livros relacionados
Recursos
Opinião dos leitores
Washington M da S
Muito bom livro, detalhes da linguagem muito bem explicados, recomendo.

