Pular para o conteúdo principal

Introdução ao Kotlin através do desenvolvimento de uma Calculadora (Console)

 

Resumo

Kotlin é uma linguagem de programação de propósito geral criada pela JetBrains para ser executada na JVM. Um dos principais objetivos da empresa ao criar a Kotlin foi desenvolver uma linguagem de programação mais moderna e com capacidade de ser interoperável com o Java. Em 2017 a Google anunciou o suporte ao Kotlin como linguagem first-class no desenvolvimento Android, o que impulsionou a sua popularidade entre os desenvolvedores e que vem aumentando o interesse no seu aprendizado [1].

Este artigo tem o objetivo de apresentar o desenvolvimento de uma calculadora simples utilizando o Kotlin, exibindo os conceitos básicos desta linguagem programação.


Introdução

O Kotlin é uma linguagem de programação que está sendo muito utilizada por desenvolvedores Android[2]. Suas principais características são: Expressividade e concisão, Segurança contra nulidade, Interoperabilidade e Simultaneidade estruturada. Sendo assim, o Kotlin permite que o desenvolvedor expresse suas ideias com uma quantidade menor de código boilerplate, tenha mais segurança evitando erros como exceções de ponteiro nulo, produza código interoperável com código Java existente e que consiga um gerenciamento mais simples de tarefas em segundo plano[3].


 O código desenvolvido neste artigo apresentará a utilização prática dos conceitos introdutórios do Kotlin possibilitando que o leitor possa se familiarizar com essa linguagem através de um projeto simples e didático. O artigo foi dividido em 2 capítulos. O capítulo 1 é a apresentação do projeto da calculadora juntamente com a explicação dos seus componentes. O capítulo 2 é a conclusão do artigo.


1.     Projeto Calculadora

 

a.     Estrutura do Projeto

 

O projeto foi desenvolvido com a criação de três classes: Calculadora, Menu, RetornoFuncConsole. A classe Calculadora contém todos os métodos para realizar os cálculos do programa – soma, subtração, multiplicação, divisão, resto e fatorial. A classe Menu tem a responsabilidade de apresentar e ler os dados dos usuários através do terminal. A classe RetornoFuncConsole é uma data class, um tipo de classe criada apenas para armazenar dados, ou seja, é o tipo equivalente ao POJO(Plain Old Java Object).[4] [5]

A função main é responsável por ser o ponto inicial de execução do programa. Ela ficou isolada no arquivo AppMain.kt.

 




a.     Classe RetornoFuncConsole

 

A classe RetornoFuncConsole tem como objetivo armazenar todos os dados que serão digitados pelo usuário. Esta classe tem a função de garantir a transferência de dados estruturada entre as classes Menu e Calculadora como será exibido mais adiante. O seu código consiste na seguinte definição:


data class RetornoFuncConsole (val n1: Int, val n2: Int?)


Para a definição da classe RetornoFuncConsole foi utilizada a palavra reservada data para indicar que está sendo definida uma classe de dados. O construtor da classe RetornoFuncConsole está indicando a existência de dois atributos: n1 e n2. Os dois são do tipo inteiro e apenas de leitura conforme a utilização da palavra reservada val. Isso indica que estes atributos uma vez que tenham recebido um valor não poderão ser alterados. No atributo n2 existe a peculiaridade de poder receber o valor null conforme a definição Int? .

 

a.     Classe Calculadora

 

A classe Calculadora será  responsável por realizar todas as operações matemáticas. Através da definição da classe é possível perceber que a palavra reservada class define o nome da classe e fun define os métodos da mesma. As operações de soma, subtração, multiplicação e divisão são semelhantes em termos de estrutura e se diferenciam por conta da operação. Já o método fatorial é recursivo.

 

 



class Calculadora {

   
public fun soma(a: Int , b:Int):Int {
       
return (a + b)
    }
   
public fun subtracao(a: Int , b:Int):Int {
       
return (a - b)
    }
   
public fun multiplicacao(a: Int , b:Int):Int {
       
return (a * b)
    }
   
public fun divisao(a: Int , b:Int):Int {
       
return (a / b)
    }
   
public fun resto(a: Int , b:Int):Int {
       
return (a % b)
    }

   
public fun fatorial(n:Int):Int {
       
if (n == 1){
            
return 1;
       
}
       
return n*fatorial(n-1)
    }




}

 

 

 

 

b.     Classe Menu


A classe Menu será  responsável pela interação com o usuário. Apresentando as opções de operação e realizando a captura dos dados fornecidos pelos usuários da aplicação.

 

package com.pasta.inicial

public class Menu(private val calculadora: Calculadora) {



   
private fun interacaoMenuDoisInteiros() : RetornoFuncConsole{
       
var n1: Int = 0
       
var n2: Int = 0
       
println()
        println(
"Digite o primeiro numero: ")
        n1 = Integer.valueOf(readLine())
        println(
"Digite o segundo numero: ")
        n2 = Integer.valueOf(readLine())

        
var retorno = RetornoFuncConsole(n1,n2)

       
return retorno
    }

   
private fun interacaoMenuUmInteiro() : RetornoFuncConsole{
       
var n1: Int = 0
       
println()
        println(
"Digite o numero: ")
        n1 = Integer.valueOf(readLine())

       
var retorno = RetornoFuncConsole(n1,null)

       
return retorno
    }

   
fun executaOperacao(n: String?)  {
       
when (n) {
           
"1" -> {
               
val (n1, n2) =    interacaoMenuDoisInteiros()

               
var resultado = calculadora.soma(n1,n2 ?: 0)
                imprimirResultado(resultado)
            }
           
"2" -> {
               
val (n1, n2:Int?) =    interacaoMenuDoisInteiros()
               
var resultado = calculadora.subtracao(n1,n2 ?: 0)
                imprimirResultado(resultado)
            }
           
"3" -> {
               
val (n1, n2) =    interacaoMenuDoisInteiros()
               
var resultado = calculadora.multiplicacao(n1,n2 ?: 0)
                imprimirResultado(resultado)
            }
           
"4" -> {
               
val (n1, n2) =    interacaoMenuDoisInteiros()
               
var resultado = calculadora.divisao(n1,n2 ?: 0)
                imprimirResultado(resultado)
            }
           
"5" -> {
               
val (n1, n2) =    interacaoMenuDoisInteiros()
               
var resultado = calculadora.resto(n1,n2 ?: 0)
                imprimirResultado(resultado)
            }
           
"6" -> {
               
val (n1) =    interacaoMenuUmInteiro()
               
var resultado = calculadora.fatorial(n1)
                imprimirResultado(resultado)
            }
           
else -> { // Note the block
               
print("Fim")
            }
        }
    }

   
fun imprimirResultado(resultado:Int){
        println(
"")
        println(
"Resutado:  $resultado" )
        println(
"")
    }

   
fun menu() {
       
var escolha: String? = ""
       
do {
            println(
"Escolha a operação:")
            println(
"");
           
println("[1] - Soma")
            println(
"[2] - Subtração")
            println(
"[3] - Multiplicação")
            println(
"[4] - Divisão")
            println(
"[5] - Resto")
            println(
"[6] - Fatorial")
            println(
"[7] - Sair")
            println(
"");
           
println("Digite a opção: ")
            escolha = readLine()

            executaOperacao(escolha)

        }
while (escolha != "7")
    }

}

 

 

A classe menu possui os métodos interacaoMenuDoisInteiros, InteracaoMenuUmInteiro, executaOperacao, imprimirResultado e menu. Os métodos  interacaoMenuDoisInteiros e InteracaoMenuUmInteiro retornam a data class RetornoFuncConsole. Através deste retorno os valores digitados pelos usuários são salvos nas variáveis n1 e n2. O método InteracaoMenuUmInteiro solicita apenas um número que será utilizado para  o cálculo do fatorial. Para poder permitir o retorno de apenas um número inteiro através da classe RetornoFuncConsole a mesma foi definida permitida que no construtor o parâmetro n2 fosse null. Desta forma não foi criado uma segunda classe para capturar os dados do usuário quando a operação permitir apenas um número para realização dos cálculos. O método executaOperacao possui a estrutura de seleção When. Ela determinará as operações necessárias para efetuar os cálculos de acordo com as escolhas do usuário estabelecidas através do menu. O método imprimirResultado formata os retornos dos cálculos que serão apresentados para o usuário. O método menu oferece as opções visuais para que o usuário selecione os cálculos oferecidos pelo programa.

 

 

 

 

a.     A função main()

A função main() é o ponto  de entrada de execução do programa. Nela é criada uma instância da classe Calculadora que é passada para o construtor da classe Menu, permitindo que toda a funcionalidade do programa seja exposta a para o usuário final através do método menu()

 

 

fun main() {
       
var calculadora: Calculadora
        calculadora = Calculadora()
       
var m: Menu
        m = Menu(calculadora)
        m.menu()
}

 

 

2.     Conclusão

 

A linguagem Kotlin vem se tornando muito popular nos últimos anos. Parte de desta popularidade se deve à sua adoção como linguagem para desenvolvimento de aplicativos android. Este artigo teve o objetivo de apresentar a construção de uma Calculadora para demostrar a utilização das estruturas básicas da linguagem de uma maneira prática. Permitindo que o leitor tenha uma estrutura básica de código para testar e aplicar os conceitos da linguagem.


OBS: Código disponível no github 

https://github.com/santanna106/CalculadoraKotlin.git

 

3.     Referências

  

[1] - https://curitibati.com.br/Blog/Post/Kotlin-crescimento-popularidade-da-linguagem

[2] - https://developer.android.com/kotlin/learn

[3] - https://developer.android.com/kotlin/first

[4] - https://kotlinlang.org/docs/data-classes.html

[5] - https://kotlinlang.org/

 

 

 


Comentários