SlideShare a Scribd company logo
1 of 78
Download to read offline
Felipe Pedroso
SECOMP UFSCAR 2018
Aprendendo
na prática
Felipe Pedroso
Android Developer @ Movile
felipeapedrosofelipepedroso felipeapedroso
Um grupo focado em impactar a vida
de 1 bilhão de pessoas!
Acompanhem!
www.movile.com
@movilebr
movile.blog
@movilelife
/Movile
linkedin.com/company/movile/
Sobre o curso...
O que vamos aprender?
1. O que é o Kotlin?
2. Criar e executar um projeto
3. Variáveis, Tipos e Operações
4. Nulabilidade
5. Estruturas de Controle
6. Funções
7. Classes
8. Collections e Lambdas
O que vamos usar?
IntelliJ Community Edition try.kotlinlang.org
OU
Material Disponível Online
Slides:
bit.ly/minicurso-kotlin-slides
Código:
bit.ly/minicurso-kotlin-codigo
Exemplos de código
1. O que é o Kotlin?
2. Criar e executar um projeto
3. Variáveis, Tipos e Operações
4. Nulabilidade
5. Estruturas de Controle (if, loop, when)
6. Funções
7. Classes (class, abstract, interfaces, data)
8. Collections e Lambdas (collections + lambdas)
O que é?
Linguagem de programação criada em 2010 pela Jetbrains
Open Source, licenciada com Apache 2
Inspirada em linguagens como Java, C#, Groovy e Scala
Estaticamente tipada
Funcional e Orientada a Objetos
Filosofia do Kotlin
Pragmática: Resolve problemas do mundo real
Concisa: Sintaxe expressa claramente a intenção do código
Segura: Previne certos tipos de erro
Interoperável: Mantém compatibilidade com o Java
Onde pode ser usado?
Mobile Desktop Web Server
Plataformas Suportadas - JVM
Mobile Desktop Web Server
JVM
Plataformas Suportadas - Android
Mobile Desktop Web Server
Android
Plataformas Suportadas - Javascript
Mobile Desktop Web Server
Javascript
Plataformas Suportadas - Native
Mobile Desktop Web Server
Native
“Talk is cheap. Show me the code.”
Linus Torvalds
Criando um novo projeto no IntelliJ
Clicar com o botão
direito e selecionar
“New > Kotlin
File/Class”
Hello World!
fun main(args: Array<String>){
val myName = "Felipe"
println("Hello World, $myName!")
}
Rodando o projeto!
Sucesso!
Hello World! - Evoluindo um pouquinho...
fun main(args: Array<String>){
val myName = readLine()
println("Hello World, $myName!")
}
Variáveis
Declarando uma variável
val myValue = 15 // Declaração de tipo implícita
val myValue : Int = 15
var myVariable = 15 // Declaração de tipo implícita
var myVariable : Int = 15
val var
Referência imutável
Não é possível alterar seu valor
após sua inicialização
Corresponde a declaração de uma
variável final no Java
Referência mutável
Podemos alterar seu valor a
qualquer momento
Corresponde a declaração de uma
variável comum no Java
Tipos
Tipos Básicos
● Números (Int, Long, Byte, Float, Double, Short)
● String
● Char
● Boolean (true ou false)
● Arrays
Operações
Operações
Tipo Operadores
Aritméticas +, -, *, / e %
Incremento e decremento ++ e --
Atribuição =
Atribuição com “incremento” +=, -=, *=, /= e %=
Igualdade == e !=
Comparação >, <, >=, <=
Lógicos &&, || e !
Nulabilidade
Prevenindo NPE* durante a compilação
val nonNullableVal: String
nonNullableVal = null // Não compila
val nullableVal : String? = null
println(nullableVal.length) // Não compila
Indica que a variável é
Nullable
*NPE = Null Pointer Exception
Corrigindo...
val nonNullableVal: String
nonNullableVal = "Some String"
val nullableVal : String? = null
println(nullableVal?.length) // Imprime null
Operador “Safe Call” (?.)
Verificando com IF
if (nullableVal != null) {
println(nullableVal.length)
} else {
println("Empty string.")
}
Não precisa do “?.”
Operador Elvis ?:
println(nullableVal?.length ?: "Empty string.")
Equivalente ao “IF” do slide anterior
Estruturas de Decisão
Estrutura de Decisão - if
Convencional
if (number % 2 == 0) {
println("$number é um número par")
} else {
println("$number é um número ímpar.")
}
Expressão
val parity = if (number % 2 == 0) {
"par"
} else {
"ímpar"
}
println("$number é um número $parity.")
Estrutura de Decisão - when
Convencional
when (grade) {
in 0..4 -> println("Reprovado")
in 5 until 7 -> println("Recuperação")
in 7 until 10 -> println("Aprovado")
10 -> println("Aprovado com honras.")
else -> println("Aluno esquisito.")
}
Expressão
val evaluation = when (grade) {
in 0..4 -> "Reprovado"
in 5 until 7 -> "Recuperação"
in 7 until 10 -> "Aprovado"
10 -> "Aprovado com honras."
else -> "Aluno esquisito."
}
println(evaluation)
Estrutura de Decisão - when
Substituindo o IF
when {
grade <= 4 -> println("Reprovado")
grade < 7 -> println("Recuperação")
grade < 9 -> println("Aprovado")
else -> println("Aprovado com honras.")
}
Estruturas de Repetição
Estrutura de Repetição - for
Intervalo Exclusivo
for (i in 1..10) {
println(i)
}
Intervalo Exclusivo
for (i in 1 until 10) {
println(i)
}
Intervalo com Incremento
for (i in 1..10 step 2) {
println(i)
}
Ordem Inversa
for (i in 10 downTo 1) {
println(i)
}
Estrutura de Repetição - for
Percorrendo Array
for (element in array) {
println(fruit)
}
Percorrendo Array com Índices
for ((index, value) in array.withIndex()) {
println("[$index]: $value")
}
Percorrendo Array Invertido
for (element in array.reversedArray()) {
println(fruit)
}
ForEach (Ranges, Array e Collections)
(1..10).forEach { println(it) }
Estrutura de Repetição - while e do..while
while
var i = 1
while (i <= 10) {
println(i++)
}
do..while
var i = 1
do {
println(i++)
} while (i <= 10)
Funções
Funções - Declaração
Convencional
fun sum(a: Int, b: Int): Int {
return a + b
}
Expressão
fun multiply(a: Int, b: Int) = a * b
Função sem Retorno
fun printSum(a: Int, b: Int) {
println("$a + $b = ${sum(a, b)}")
}
Função sem Retorno (Unit explícito)
fun printMultiply(a: Int, b: Int): Unit =
println("$a * $b = ${multiply(a, b)}")
Funções - Declaração
Função com Número de Parâmetros
Variável
fun average(vararg numbers: Int): Float {
if (numbers.isNotEmpty()) {
val totalSum = numbers.sum()
return totalSum.toFloat() /
numbers.size.toFloat()
}
return 0F
}
Função com Parâmetros Padrão
fun printName(name: String = "Anônimo"){
println(name)
}
Funções - Invocação
val num = sum(42, 18)
printSum(15, 10)
printSum(b = 10, a = 15) // Parâmetros nomeados
val average = average(12, 10, 44, 99, 123)
printName()
printName("Felipe")
Classes
Declarando uma classe no Kotlin
class Person(val name: String, private val birthYear: Int) {
init {
println("Initializing Person with name $name")
}
constructor(name: String, birthYear: Int, isMarried: Boolean) : this(name, birthYear) {
this.isMarried = isMarried
}
// Definindo uma propriedade com o get customizado
val age: Int
get() {
return LocalDateTime.now().year - birthYear
}
var isMarried: Boolean = false
private set // Atribuição apenas dentro da classe
}
Construtor Primário com Propriedades
Bloco de inicialização
Construtor Secundário sem
propriedades
Propriedade com get customizado
Propriedade com set privado
Criando uma instância
val person1 = Person("Felipe", 1987)
val person2 = Person("Bruna", 1989, false)
Modificadores de Visibilidade
Modificadores de Visibilidade
Modificador Visibilidade
public
Visível de qualquer local. É o modificador de
visibilidade padrão
protected Visível apenas para Classes e Sub-Classes
private Visível apenas para classe
internal Visível apenas no módulo
Interfaces
Declarando uma interface
interface Shape {
fun getArea(): Double
fun printArea() {
val formattedArea = "%.2f".format(getArea())
println("${javaClass.simpleName} area: $formattedArea")
}
}
Declarando implementações
class Circle(private val radius: Double) : Shape {
override fun getArea(): Double {
return Math.PI * radius * radius
}
}
open class Rectangle(private val width: Double, private val height: Double) : Shape {
override fun getArea() = width * height
}
class Square(side: Double) : Rectangle(side, side)
Classes Abstratas
Declarando uma classe abstrata
abstract class Animal {
protected abstract val sound: String
fun doSound() {
println("${javaClass.simpleName} says $sound.")
}
}
Declarando extensões
class Dog : Animal() {
override val sound = "AU"
fun howl() {
println("${javaClass.simpleName} says AUUUUUUUUUU")
}
}
class Cat : Animal() {
override val sound = "MIAU"
fun pur() {
println("${javaClass.simpleName} says RRRRRRRRRR")
}
}
Modificador Data
// Modificador data “cria” automaticamente os métodos “equals”, “hashCode” e “toString”
data class Human(val name: String, val birthYear: Int, val isMarried: Boolean = false)
val human = Human("Felipe", 1987)
val human2 = Human("Felipe", 1987)
val human3 = Human("Fulano", 1999)
println(human) // Imprime Human(name=Felipe, birthYear=1987, isMarried=false)
println(human == human2) // Imprime true
println(human == human3) // Imprime false
Modificador Data
Collections
Listas
Listas Imutáveis
var list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
println("List elements: $list")
println("Is list empty? ${list.isEmpty()}")
println("List size: ${list.size}")
println("Print element at position 3: ${list[3]}")
list = listOf() // Cria uma lista vazia
Listas Mutáveis
val list = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
list[0] = 2 // [2,2,3,4,5,6,7,8,9]
list.add(10) // [2,2,3,4,5,6,7,8,9,10]
list += 15 // [2,2,3,4,5,6,7,8,9,10,15]
list.removeAt(0) // [2,3,4,5,6,7,8,9,10]
list.remove(9) // [2,3,4,5,6,7,8,10]
list.clear() // []
Sets
São similares às Lists, porém não permitem a existência de dois elementos
duplicados no seu conjunto.
Sets não permitem o acesso de seus elementos através de índices.
Maps
Maps Imutáveis
val map = mapOf(
"First" to 1,
"Second" to 2,
"Third" to 3)
println("Map elements: $map")
println("Map keys: ${map.keys}")
println("Map values: ${map.values}")
println("Is map empty? ${map.isEmpty()}")
println("Map size: ${map.size}")
println("Map contains key: ${map.containsKey(key)}")
println("Value with key '$key': ${map[key]}")
Maps Mutáveis
val map = mutableMapOf(
"First" to 1,
"Second" to 2,
"Third" to 3)
mutableMap["Sixth"] = 6 // Adicionando valor
mutableMap += "Seventh" to 7 // Adicionando valor
mutableMap["Third"] = 8 //Alterando valor
mutableMap.remove("Second") // Removendo valor
Lambdas
Lambdas
São funções que podem ser armazenadas em variáveis, passadas como
argumentos ou retornadas de outras funções.
Podem ser usadas como parâmetros ou retorno de Higher-Order Functions.
Um bom exemplo de aplicações dos lambdas são as operações disponíveis
pelas coleções do Kotlin
Lambdas
Declarando uma função como variável
val addition: (Int, Int) -> Int = { a: Int, b: Int -> a
+ b }
val subtraction = { a: Int, b: Int -> a - b }
Invocando a função
println(addition(num1, num2))
println(addition.invoke(num1, num2))
Declarando uma High-Order Function
fun calculate(a: Int, b: Int, calcFunction: (Int, Int) -> Int): Int {
return calcFunction.invoke(a, b)
}
Utilizando uma High-Order Function
println(calculate(num1, num2, addition))
Funções - Declaração
Executando uma High-Order Function com
“Lambda Anônimo”
var result: Int = calculate(num1, num2) { a, b ->
(a * a) + (b * b)
}
Executando uma High-Order Function com
uma função declarada
fun otherFunnyOperation(a: Int, b: Int): Int {
return (a + a) * (b + b)
}
var result = calculate(num1, num2,
::otherFunnyOperation)
Próximos Passos
Links para aprofundar
1. O que é o Kotlin? Link 1, Link 2
2. Criar e executar um projeto Link 1
3. Variáveis, Tipos e Operações Link 1, Link 2
4. Nulabilidade Link 1, Link 2
5. Estruturas de Controle Link 1, Link 2
6. Funções Link 1, Link 2
7. Classes Link 1, Link 2, Link 3
8. Collections e Lambdas Link 1, Link 2
Próximos tópicos a estudar
● Exceptions
● Objects Singleton e Companion Object
● Funções Inline e Infix
● Sobrecarga de operadores
● Standard Library
● Enum e Sealed Classes
● Coroutines
● Domain Specific Languages
Onde estudar?
Kotlin in Action (Livro)
Kotlin Programming Language (Site Oficial)
Try Kotlin
Kotlin Koans (Exercícios com referências da documentação)
Udemy (Cursos em torno de R$ 20,00)
Udacity (Para desenvolvedores Android)
Obrigado!
felipeapedrosofelipepedroso felipeapedroso

More Related Content

What's hot

Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Mariana Camargo
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugolGabriel Faustino
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlgWillians Miyabara
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Marconi Pacheco
 
Arquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra BooleanaArquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra BooleanaAlex Camargo
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesaPacc UAB
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaLeinylson Fontinele
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Aula 03.1 - Operadores Relacionais e Lógicos
Aula 03.1 - Operadores Relacionais e LógicosAula 03.1 - Operadores Relacionais e Lógicos
Aula 03.1 - Operadores Relacionais e LógicosMessias Batista
 
Bancode dados modelagem conceitual
Bancode dados modelagem conceitualBancode dados modelagem conceitual
Bancode dados modelagem conceitualMario Sergio
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem Cprofjr
 

What's hot (20)

Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Bootstrap praticas mais usadas
Bootstrap praticas mais usadas Bootstrap praticas mais usadas
Bootstrap praticas mais usadas
 
Arquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra BooleanaArquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra Booleana
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesa
 
Estrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na práticaEstrutura de Dados - Aula de revisão de C na prática
Estrutura de Dados - Aula de revisão de C na prática
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Aula 03.1 - Operadores Relacionais e Lógicos
Aula 03.1 - Operadores Relacionais e LógicosAula 03.1 - Operadores Relacionais e Lógicos
Aula 03.1 - Operadores Relacionais e Lógicos
 
Bancode dados modelagem conceitual
Bancode dados modelagem conceitualBancode dados modelagem conceitual
Bancode dados modelagem conceitual
 
Android
AndroidAndroid
Android
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
 
Exercicios java básico
Exercicios java básicoExercicios java básico
Exercicios java básico
 

Similar to Kotlin Curso Introdução

Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Tales Andrade
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Minicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRMinicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRLucas Antonio Ramos Sartori
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basicoWemerson Silva
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaArthur Emanuel
 

Similar to Kotlin Curso Introdução (20)

Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Minicurso kotlin UTFPR
Minicurso kotlin UTFPR Minicurso kotlin UTFPR
Minicurso kotlin UTFPR
 
Minicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRMinicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPR
 
Kotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSLKotlin no desenvolvimento Mobile - FTSL
Kotlin no desenvolvimento Mobile - FTSL
 
Javascript
JavascriptJavascript
Javascript
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
iOS 8 com swift
iOS 8 com swiftiOS 8 com swift
iOS 8 com swift
 
Aula5
Aula5Aula5
Aula5
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Aula4
Aula4Aula4
Aula4
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de Java
 

More from Felipe Pedroso

Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis PlatformImproved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis PlatformFelipe Pedroso
 
Machine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML KitMachine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML KitFelipe Pedroso
 
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 desenvolvedorFelipe Pedroso
 
Construindo Chatbots em Node.js
Construindo Chatbots em Node.jsConstruindo Chatbots em Node.js
Construindo Chatbots em Node.jsFelipe Pedroso
 
Microsoft Bot Framework
Microsoft Bot FrameworkMicrosoft Bot Framework
Microsoft Bot FrameworkFelipe Pedroso
 
Developer Relations 101
Developer Relations 101Developer Relations 101
Developer Relations 101Felipe Pedroso
 
Simplificando chamadas HTTP com o Retrofit
Simplificando chamadas HTTP com o RetrofitSimplificando chamadas HTTP com o Retrofit
Simplificando chamadas HTTP com o RetrofitFelipe Pedroso
 
Introdução ao Retrofit
Introdução ao Retrofit Introdução ao Retrofit
Introdução ao Retrofit Felipe Pedroso
 
Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)Felipe Pedroso
 
Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)Felipe Pedroso
 
Conectando Coisas com IFTTT
Conectando Coisas com IFTTTConectando Coisas com IFTTT
Conectando Coisas com IFTTTFelipe Pedroso
 
Minicurso RealSense SDK
Minicurso RealSense SDKMinicurso RealSense SDK
Minicurso RealSense SDKFelipe Pedroso
 
Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"Felipe Pedroso
 
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Felipe Pedroso
 
Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"Felipe Pedroso
 

More from Felipe Pedroso (20)

Improved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis PlatformImproved Knowledge from Data: Building an Immersive Data Analysis Platform
Improved Knowledge from Data: Building an Immersive Data Analysis Platform
 
Machine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML KitMachine Learning em Apps Android com ML Kit
Machine Learning em Apps Android com ML Kit
 
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
 
Construindo Chatbots em Node.js
Construindo Chatbots em Node.jsConstruindo Chatbots em Node.js
Construindo Chatbots em Node.js
 
Testes A/B
Testes A/BTestes A/B
Testes A/B
 
Microsoft Bot Framework
Microsoft Bot FrameworkMicrosoft Bot Framework
Microsoft Bot Framework
 
Análise SWOT
Análise SWOTAnálise SWOT
Análise SWOT
 
Developer Relations 101
Developer Relations 101Developer Relations 101
Developer Relations 101
 
Simplificando chamadas HTTP com o Retrofit
Simplificando chamadas HTTP com o RetrofitSimplificando chamadas HTTP com o Retrofit
Simplificando chamadas HTTP com o Retrofit
 
Introdução ao Retrofit
Introdução ao Retrofit Introdução ao Retrofit
Introdução ao Retrofit
 
Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)Assistive Context-Aware Toolkit (Portuguese)
Assistive Context-Aware Toolkit (Portuguese)
 
Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)Assistive Context-Aware Toolkit (English)
Assistive Context-Aware Toolkit (English)
 
Conectando Coisas com IFTTT
Conectando Coisas com IFTTTConectando Coisas com IFTTT
Conectando Coisas com IFTTT
 
Minicurso RealSense SDK
Minicurso RealSense SDKMinicurso RealSense SDK
Minicurso RealSense SDK
 
RealSense SDK
RealSense SDKRealSense SDK
RealSense SDK
 
Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"Minicurso "Jogos Multiplataforma com Javascript"
Minicurso "Jogos Multiplataforma com Javascript"
 
RealSense SDK
RealSense SDKRealSense SDK
RealSense SDK
 
Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8Palestra Game Engines para Windows 8
Palestra Game Engines para Windows 8
 
Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"Palestra "Game Engines para Javascript"
Palestra "Game Engines para Javascript"
 
Fat binaries
Fat binariesFat binaries
Fat binaries
 

Kotlin Curso Introdução

  • 1. Felipe Pedroso SECOMP UFSCAR 2018 Aprendendo na prática
  • 2. Felipe Pedroso Android Developer @ Movile felipeapedrosofelipepedroso felipeapedroso
  • 3. Um grupo focado em impactar a vida de 1 bilhão de pessoas!
  • 6. O que vamos aprender? 1. O que é o Kotlin? 2. Criar e executar um projeto 3. Variáveis, Tipos e Operações 4. Nulabilidade 5. Estruturas de Controle 6. Funções 7. Classes 8. Collections e Lambdas
  • 7. O que vamos usar? IntelliJ Community Edition try.kotlinlang.org OU
  • 9. Exemplos de código 1. O que é o Kotlin? 2. Criar e executar um projeto 3. Variáveis, Tipos e Operações 4. Nulabilidade 5. Estruturas de Controle (if, loop, when) 6. Funções 7. Classes (class, abstract, interfaces, data) 8. Collections e Lambdas (collections + lambdas)
  • 10.
  • 11. O que é? Linguagem de programação criada em 2010 pela Jetbrains Open Source, licenciada com Apache 2 Inspirada em linguagens como Java, C#, Groovy e Scala Estaticamente tipada Funcional e Orientada a Objetos
  • 12. Filosofia do Kotlin Pragmática: Resolve problemas do mundo real Concisa: Sintaxe expressa claramente a intenção do código Segura: Previne certos tipos de erro Interoperável: Mantém compatibilidade com o Java
  • 13. Onde pode ser usado? Mobile Desktop Web Server
  • 14. Plataformas Suportadas - JVM Mobile Desktop Web Server JVM
  • 15. Plataformas Suportadas - Android Mobile Desktop Web Server Android
  • 16. Plataformas Suportadas - Javascript Mobile Desktop Web Server Javascript
  • 17. Plataformas Suportadas - Native Mobile Desktop Web Server Native
  • 18. “Talk is cheap. Show me the code.” Linus Torvalds
  • 19. Criando um novo projeto no IntelliJ
  • 20.
  • 21.
  • 22.
  • 23. Clicar com o botão direito e selecionar “New > Kotlin File/Class”
  • 24.
  • 25. Hello World! fun main(args: Array<String>){ val myName = "Felipe" println("Hello World, $myName!") }
  • 28. Hello World! - Evoluindo um pouquinho... fun main(args: Array<String>){ val myName = readLine() println("Hello World, $myName!") }
  • 30. Declarando uma variável val myValue = 15 // Declaração de tipo implícita val myValue : Int = 15 var myVariable = 15 // Declaração de tipo implícita var myVariable : Int = 15
  • 31. val var Referência imutável Não é possível alterar seu valor após sua inicialização Corresponde a declaração de uma variável final no Java Referência mutável Podemos alterar seu valor a qualquer momento Corresponde a declaração de uma variável comum no Java
  • 32. Tipos
  • 33. Tipos Básicos ● Números (Int, Long, Byte, Float, Double, Short) ● String ● Char ● Boolean (true ou false) ● Arrays
  • 35. Operações Tipo Operadores Aritméticas +, -, *, / e % Incremento e decremento ++ e -- Atribuição = Atribuição com “incremento” +=, -=, *=, /= e %= Igualdade == e != Comparação >, <, >=, <= Lógicos &&, || e !
  • 37. Prevenindo NPE* durante a compilação val nonNullableVal: String nonNullableVal = null // Não compila val nullableVal : String? = null println(nullableVal.length) // Não compila Indica que a variável é Nullable *NPE = Null Pointer Exception
  • 38. Corrigindo... val nonNullableVal: String nonNullableVal = "Some String" val nullableVal : String? = null println(nullableVal?.length) // Imprime null Operador “Safe Call” (?.)
  • 39. Verificando com IF if (nullableVal != null) { println(nullableVal.length) } else { println("Empty string.") } Não precisa do “?.”
  • 40. Operador Elvis ?: println(nullableVal?.length ?: "Empty string.") Equivalente ao “IF” do slide anterior
  • 42. Estrutura de Decisão - if Convencional if (number % 2 == 0) { println("$number é um número par") } else { println("$number é um número ímpar.") } Expressão val parity = if (number % 2 == 0) { "par" } else { "ímpar" } println("$number é um número $parity.")
  • 43. Estrutura de Decisão - when Convencional when (grade) { in 0..4 -> println("Reprovado") in 5 until 7 -> println("Recuperação") in 7 until 10 -> println("Aprovado") 10 -> println("Aprovado com honras.") else -> println("Aluno esquisito.") } Expressão val evaluation = when (grade) { in 0..4 -> "Reprovado" in 5 until 7 -> "Recuperação" in 7 until 10 -> "Aprovado" 10 -> "Aprovado com honras." else -> "Aluno esquisito." } println(evaluation)
  • 44. Estrutura de Decisão - when Substituindo o IF when { grade <= 4 -> println("Reprovado") grade < 7 -> println("Recuperação") grade < 9 -> println("Aprovado") else -> println("Aprovado com honras.") }
  • 46. Estrutura de Repetição - for Intervalo Exclusivo for (i in 1..10) { println(i) } Intervalo Exclusivo for (i in 1 until 10) { println(i) } Intervalo com Incremento for (i in 1..10 step 2) { println(i) } Ordem Inversa for (i in 10 downTo 1) { println(i) }
  • 47. Estrutura de Repetição - for Percorrendo Array for (element in array) { println(fruit) } Percorrendo Array com Índices for ((index, value) in array.withIndex()) { println("[$index]: $value") } Percorrendo Array Invertido for (element in array.reversedArray()) { println(fruit) } ForEach (Ranges, Array e Collections) (1..10).forEach { println(it) }
  • 48. Estrutura de Repetição - while e do..while while var i = 1 while (i <= 10) { println(i++) } do..while var i = 1 do { println(i++) } while (i <= 10)
  • 50. Funções - Declaração Convencional fun sum(a: Int, b: Int): Int { return a + b } Expressão fun multiply(a: Int, b: Int) = a * b Função sem Retorno fun printSum(a: Int, b: Int) { println("$a + $b = ${sum(a, b)}") } Função sem Retorno (Unit explícito) fun printMultiply(a: Int, b: Int): Unit = println("$a * $b = ${multiply(a, b)}")
  • 51. Funções - Declaração Função com Número de Parâmetros Variável fun average(vararg numbers: Int): Float { if (numbers.isNotEmpty()) { val totalSum = numbers.sum() return totalSum.toFloat() / numbers.size.toFloat() } return 0F } Função com Parâmetros Padrão fun printName(name: String = "Anônimo"){ println(name) }
  • 52. Funções - Invocação val num = sum(42, 18) printSum(15, 10) printSum(b = 10, a = 15) // Parâmetros nomeados val average = average(12, 10, 44, 99, 123) printName() printName("Felipe")
  • 54. Declarando uma classe no Kotlin class Person(val name: String, private val birthYear: Int) { init { println("Initializing Person with name $name") } constructor(name: String, birthYear: Int, isMarried: Boolean) : this(name, birthYear) { this.isMarried = isMarried } // Definindo uma propriedade com o get customizado val age: Int get() { return LocalDateTime.now().year - birthYear } var isMarried: Boolean = false private set // Atribuição apenas dentro da classe } Construtor Primário com Propriedades Bloco de inicialização Construtor Secundário sem propriedades Propriedade com get customizado Propriedade com set privado
  • 55. Criando uma instância val person1 = Person("Felipe", 1987) val person2 = Person("Bruna", 1989, false)
  • 57. Modificadores de Visibilidade Modificador Visibilidade public Visível de qualquer local. É o modificador de visibilidade padrão protected Visível apenas para Classes e Sub-Classes private Visível apenas para classe internal Visível apenas no módulo
  • 59. Declarando uma interface interface Shape { fun getArea(): Double fun printArea() { val formattedArea = "%.2f".format(getArea()) println("${javaClass.simpleName} area: $formattedArea") } }
  • 60. Declarando implementações class Circle(private val radius: Double) : Shape { override fun getArea(): Double { return Math.PI * radius * radius } } open class Rectangle(private val width: Double, private val height: Double) : Shape { override fun getArea() = width * height } class Square(side: Double) : Rectangle(side, side)
  • 62. Declarando uma classe abstrata abstract class Animal { protected abstract val sound: String fun doSound() { println("${javaClass.simpleName} says $sound.") } }
  • 63. Declarando extensões class Dog : Animal() { override val sound = "AU" fun howl() { println("${javaClass.simpleName} says AUUUUUUUUUU") } } class Cat : Animal() { override val sound = "MIAU" fun pur() { println("${javaClass.simpleName} says RRRRRRRRRR") } }
  • 65. // Modificador data “cria” automaticamente os métodos “equals”, “hashCode” e “toString” data class Human(val name: String, val birthYear: Int, val isMarried: Boolean = false) val human = Human("Felipe", 1987) val human2 = Human("Felipe", 1987) val human3 = Human("Fulano", 1999) println(human) // Imprime Human(name=Felipe, birthYear=1987, isMarried=false) println(human == human2) // Imprime true println(human == human3) // Imprime false Modificador Data
  • 67. Listas Listas Imutáveis var list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9) println("List elements: $list") println("Is list empty? ${list.isEmpty()}") println("List size: ${list.size}") println("Print element at position 3: ${list[3]}") list = listOf() // Cria uma lista vazia Listas Mutáveis val list = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9) list[0] = 2 // [2,2,3,4,5,6,7,8,9] list.add(10) // [2,2,3,4,5,6,7,8,9,10] list += 15 // [2,2,3,4,5,6,7,8,9,10,15] list.removeAt(0) // [2,3,4,5,6,7,8,9,10] list.remove(9) // [2,3,4,5,6,7,8,10] list.clear() // []
  • 68. Sets São similares às Lists, porém não permitem a existência de dois elementos duplicados no seu conjunto. Sets não permitem o acesso de seus elementos através de índices.
  • 69. Maps Maps Imutáveis val map = mapOf( "First" to 1, "Second" to 2, "Third" to 3) println("Map elements: $map") println("Map keys: ${map.keys}") println("Map values: ${map.values}") println("Is map empty? ${map.isEmpty()}") println("Map size: ${map.size}") println("Map contains key: ${map.containsKey(key)}") println("Value with key '$key': ${map[key]}") Maps Mutáveis val map = mutableMapOf( "First" to 1, "Second" to 2, "Third" to 3) mutableMap["Sixth"] = 6 // Adicionando valor mutableMap += "Seventh" to 7 // Adicionando valor mutableMap["Third"] = 8 //Alterando valor mutableMap.remove("Second") // Removendo valor
  • 71. Lambdas São funções que podem ser armazenadas em variáveis, passadas como argumentos ou retornadas de outras funções. Podem ser usadas como parâmetros ou retorno de Higher-Order Functions. Um bom exemplo de aplicações dos lambdas são as operações disponíveis pelas coleções do Kotlin
  • 72. Lambdas Declarando uma função como variável val addition: (Int, Int) -> Int = { a: Int, b: Int -> a + b } val subtraction = { a: Int, b: Int -> a - b } Invocando a função println(addition(num1, num2)) println(addition.invoke(num1, num2)) Declarando uma High-Order Function fun calculate(a: Int, b: Int, calcFunction: (Int, Int) -> Int): Int { return calcFunction.invoke(a, b) } Utilizando uma High-Order Function println(calculate(num1, num2, addition))
  • 73. Funções - Declaração Executando uma High-Order Function com “Lambda Anônimo” var result: Int = calculate(num1, num2) { a, b -> (a * a) + (b * b) } Executando uma High-Order Function com uma função declarada fun otherFunnyOperation(a: Int, b: Int): Int { return (a + a) * (b + b) } var result = calculate(num1, num2, ::otherFunnyOperation)
  • 75. Links para aprofundar 1. O que é o Kotlin? Link 1, Link 2 2. Criar e executar um projeto Link 1 3. Variáveis, Tipos e Operações Link 1, Link 2 4. Nulabilidade Link 1, Link 2 5. Estruturas de Controle Link 1, Link 2 6. Funções Link 1, Link 2 7. Classes Link 1, Link 2, Link 3 8. Collections e Lambdas Link 1, Link 2
  • 76. Próximos tópicos a estudar ● Exceptions ● Objects Singleton e Companion Object ● Funções Inline e Infix ● Sobrecarga de operadores ● Standard Library ● Enum e Sealed Classes ● Coroutines ● Domain Specific Languages
  • 77. Onde estudar? Kotlin in Action (Livro) Kotlin Programming Language (Site Oficial) Try Kotlin Kotlin Koans (Exercícios com referências da documentação) Udemy (Cursos em torno de R$ 20,00) Udacity (Para desenvolvedores Android)