Programando com Kotlin

Conheça todos os recursos de Kotlin com este guia detalhado

Programando com Kotlin Esgotado
× Programando com Kotlin

Programando com Kotlin

Compartilhar

Autores: Stephen Samuel
Stefan Bocutiu

ISBN impresso: 978-85-7522-605-6
ISBN ebook: 978-85-7522-616-2
Ano: 2017
Páginas: 424
Preço: R$ 119,00

1 opinião | Opine sobre este livro

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.

Ver menos ▲

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
Ver sumário completo ▼

Sobre os autores

Stephen Samuel

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

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 ▶

Opinião dos leitores

Washington M da S

Muito bom livro, detalhes da linguagem muito bem explicados, recomendo.

Ver todas ▼