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

Postagens mais visitadas deste blog

Validando Documentos com Fluent Validation, DocsBRValidator e .net Core 6.0

  Introdução A necessidade de utilização das bases de dados para construção de estratégias de negócios através  de técnicas de Ciência de Dados torna necessário que as aplicações sejam cada vez mais cuidadosas para a validação dos campos que serão salvos nas bases dos sistemas. Esses cuidados tem o objetivo de melhorar a qualiade das informações que serão fornecidas para sistemas de Inteligência artificial, mineração de dados, etc . Neste artigo será apresentada a construção de uma solução console que utiliza o Fluent Validation, DocsBRValidator  e o .net Core 6 para validar o número do CPF fornecido pelo usuário.   FluentValidation FluentValidation é uma bliblioteca .Net criada para construção de regras de validação. Com essa biblioteca  podem ser definidos a obrigatoriedade de campos , os tamanhos, os tipos e a formatação.   DocsBRValidator DocsBRValidator é uma biblioteca que possui a regra de validação para os principais documentos brasileiros como CPF, CNPJ,  RG, CNH, Titulo de El

Criando uma calculadora Android com o Kotlin

Resumo Aprender a programar para Android exige a absorção de conceitos básicos que são mais naturalmente entendidos quando aplicados em algum projeto de desenvolvimento. Objetivando introduzir o contato com o Kotlin para Android, foi criado neste artigo um aplicativo simples de calculadora que possibilita a apresentação do tratamento de eventos de botões, uso de expressões regulares e utilização de um método estático. Introdução O desenvolvimento de aplicativos envolve o entendimento de conceitos que devem ser naturalizados pelos desenvolvedores. Uma das formas mais comuns de se naturalizar os diversos recurso de uma plataforma é desenvolver projetos que demonstrem o funcionamento prático dos conceitos implementados. O aplicativo   Calculadora foi desenvolvido por possibilitar o contato inicial do desenvolvedor com os conceitos de tratamento de eventos, métodos estáticos e expressões regulares. O código desenvolvido buscou implementar estes conceitos de maneira introdutória. Não fo

Logic Programming With Python - 03

Control Flow We often need to run specific code for certain conditions or we must run a code snippet many times. Toward we have this behavors we need of structures of control flow. Basically these structures are divided into conditional and repeating structures.  Conditional structures allow select code snippets for specific conditions while Loop structures allow the execution of code snippets many times. Conditional structures in Python The logical conditionals usein Python are: Equals:  a == b Not Equals:  a != b Less than:  a < b Less than or equal to:  a <= b Greater than:  a > b Greater than or equal to:  a >= b These conditions are fundamental to statement logical and loops Simple if-statement. In this example were declared two variables: a and b. In the if-statement  was defined the condition b > a. As b is equal the five and a is equal to three the message "b greater than a" will show to the user. Code Block In Python, The code block is defined through