Escolar Documentos
Profissional Documentos
Cultura Documentos
Stefan Bocutiu
Novatec
Copyright © Packt Publishing 2017. First published in the English language under the title ‘Programming Kotlin
(9781787126367)’.
Copyright © Packt Publishing 2017. Publicação original em inglês intitulada ‘Programming Kotlin (9781787126367)’.
Esta tradução é publicada e vendida com a permissão da Packt Publishing.
© Novatec Editora Ltda. 2017.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra,
mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora.
Editor: Rubens Prates OG20170914
Tradução: Lúcia A. Kinoshita
Revisão gramatical: Patrizia Zagni
Editoração eletrônica: Carolina Kuwabata
ISBN: 978-85-7522-605-6
Histórico de impressões:
Setembro/2017 Primeira edição
Novatec Editora Ltda.
Rua Luís Antônio dos Santos 110
02460-000 – São Paulo, SP – Brasil
Tel.: +55 11 2959-6529
Email: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec
Sumário
Prefácio..................................................................................................................................15
5
6 Programando com Kotlin
Tratamento de exceções............................................................................................56
Instanciando classes..................................................................................................57
Igualdade referencial e igualdade estrutural...............................................................57
Expressão this..........................................................................................................58
Escopo................................................................................................................58
Modificadores de visibilidade....................................................................................59
Private.................................................................................................................59
Protected............................................................................................................ 60
Internal.............................................................................................................. 60
Controle de fluxo como expressões........................................................................... 60
Sintaxe de null..........................................................................................................61
Verificação de tipos e casting................................................................................62
Casts inteligentes.................................................................................................62
Casting explícito................................................................................................. 64
Expressão when....................................................................................................... 64
When (valor)........................................................................................................65
When sem argumento..........................................................................................67
Retorno de função...............................................................................................67
Hierarquia de tipos...................................................................................................69
Resumo....................................................................................................................70
DSLs personalizadas...............................................................................................191
Funções infixas como palavras reservadas..........................................................192
Usando receptores de função em uma DSL.........................................................195
Validação e acúmulo de erros..................................................................................197
Resumo..................................................................................................................200
Capítulo 6 ■ Propriedades......................................................................................................201
Por que usar propriedades?......................................................................................201
Sintaxe e variações..................................................................................................204
Visibilidade.............................................................................................................207
Inicialização tardia..................................................................................................208
Propriedades delegadas...........................................................................................209
Inicializações preguiçosas........................................................................................216
lateinit versus lazy...................................................................................................221
Observáveis............................................................................................................222
Delegação de uma propriedade diferente de null.......................................................223
Propriedades ou métodos?.......................................................................................224
Resumo..................................................................................................................225
Anotações...............................................................................................................246
Parâmetros de anotações....................................................................................247
Anotações-padrão...................................................................................................248
@JvmName.......................................................................................................248
@JvmStatic........................................................................................................249
@Throws..........................................................................................................249
@JvmOverloads.................................................................................................251
Descoberta de anotações em tempo de execução......................................................252
Resumo..................................................................................................................253
Capítulo 8 ■ Genéricos...........................................................................................................254
Funções parametrizadas..........................................................................................254
Tipos parametrizados..............................................................................................256
Polimorfismo restrito..............................................................................................257
Limites superiores..............................................................................................257
Vários limites.....................................................................................................258
Variância de tipos...................................................................................................259
Invariância........................................................................................................259
Covariância.......................................................................................................261
Tipo de retorno covariante.................................................................................262
Contravariância.................................................................................................263
Visão geral sobre variância.................................................................................266
Tipo Nothing..........................................................................................................267
Projeção de tipos.....................................................................................................268
Apagamento de tipo................................................................................................270
Reificação de tipos.................................................................................................. 274
Limites de tipos recursivos......................................................................................276
Tipos de dados algébricos........................................................................................279
Resumo..................................................................................................................284
Capítulo 10 ■ Coleções...........................................................................................................304
Hierarquia de classes...............................................................................................304
Arrays.....................................................................................................................313
Listas......................................................................................................................323
Mapas....................................................................................................................328
Conjuntos...............................................................................................................331
Visões somente de leitura........................................................................................334
Acesso indexado.....................................................................................................335
Sequências..............................................................................................................336
Resumo..................................................................................................................341
Lagom.................................................................................................................... 374
Definindo serviços..................................................................................................384
Implementando um serviço Lagom..........................................................................387
Resumo..................................................................................................................392
Capítulo 13 ■ Concorrência....................................................................................................393
Threads..................................................................................................................394
Bloqueio............................................................................................................395
Deadlocks e livelocks..............................................................................................401
O problema do jantar dos filósofos.....................................................................401
Executores..............................................................................................................403
Condições de concorrência..................................................................................... 404
Monitores......................................................................................................... 406
Locks............................................................................................................... 408
Semáforos.......................................................................................................... 410
Coleções concorrentes........................................................................................ 414
Variáveis atômicas.............................................................................................. 416
CountDownLatch.............................................................................................. 417
Barreira cíclica...................................................................................................419
E/S não bloqueante e programação assíncrona....................................................421
Futures..............................................................................................................422
Resumo..................................................................................................................424