<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Antonio Lazaro</title>
    <description>The latest articles on DEV Community by Antonio Lazaro (@antonio_lazaro).</description>
    <link>https://dev.to/antonio_lazaro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F153166%2F09442519-8eff-4e9f-856b-5559a163e17d.jpg</url>
      <title>DEV Community: Antonio Lazaro</title>
      <link>https://dev.to/antonio_lazaro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antonio_lazaro"/>
    <language>en</language>
    <item>
      <title>Aprendizado Kotlin - Alguns recursos da linguagem</title>
      <dc:creator>Antonio Lazaro</dc:creator>
      <pubDate>Thu, 09 Jul 2020 19:42:19 +0000</pubDate>
      <link>https://dev.to/collabcode/aprendizado-kotlin-alguns-recursos-da-linguagem-i10</link>
      <guid>https://dev.to/collabcode/aprendizado-kotlin-alguns-recursos-da-linguagem-i10</guid>
      <description>&lt;p&gt;Originalmente publicado no blog do &lt;a href="https://antoniolazaro.dev/kotlin/2020/04/20/estudo-kotlin-indice-serie.html"&gt;autor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Durante o &lt;a href="https://app.pluralsight.com/library/courses/kotlin-getting-started/table-of-contents"&gt;curso de Kevin Jones "Getting Started with Kotlin" da Plural Sight&lt;/a&gt; tive oportunidade de conhecer alguns conceitos de Kotlin que achei bastante interessante e resolver compartilhar.&lt;/p&gt;

&lt;p&gt;No próprio site da linguagem, existem &lt;a href="https://kotlinlang.org/docs/tutorials/"&gt;vários tutoriais&lt;/a&gt; e &lt;a href="https://kotlinlang.org/docs/books.html"&gt;recomendações de livros&lt;/a&gt;, alem do próprio &lt;a href="https://kotlinlang.org/docs/tutorials/getting-started.html"&gt;Getting Started do site que fala de diversas características e recursos da linguagem e ferramentas associadas&lt;/a&gt;. Achei também o &lt;a href="https://kotlinlang.org/docs/reference/"&gt;guia de referência da linguagem muito rico e completo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para quem se interessa pela estrutura da linguagem, existe disponível também a &lt;a href="https://kotlinlang.org/docs/reference/grammar.html"&gt;gramática da linguagem&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos da linguagens observadores e experimentados
&lt;/h2&gt;

&lt;p&gt;Nessa seção, pretendo falar de alguns recursos que pude experimentar durante o curso, e pratiquei em um projeto piloto que está disponível em um repositório no meu github onde pretendo colocar os demos do que ando testando com Kotlin. Esse repositório é o &lt;a href="https://github.com/antoniolazaro/kotlin-lab"&gt;kotlin-lab&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaração de variáveis e propriedades: val x var - Suporte a imutabilidade de objetos nativamente
&lt;/h3&gt;

&lt;p&gt;Em kotlin para declarar uma variável é possível a seguinte estrutura&lt;/p&gt;

&lt;p&gt; [propertyType] = &lt;/p&gt;

&lt;p&gt;A estrutura acima é explicada da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;val = Variável é imutável. Uma vez atribuído um valor, a referência não pode mais mudar. Se houver essa tentativa de atribuição, o compilador acusa erro.&lt;/li&gt;
&lt;li&gt;var = Variável mutável. Comum como qualquer variável.&lt;/li&gt;
&lt;li&gt;propertyName = nome da variável ou propriedade.&lt;/li&gt;
&lt;li&gt;propertyType = atributo opcional. Caso não seja declarado, será colocado por inferência pela atribuição da primeira referência. Uma vez atribuido, esse tipo não pode receber outro tipo. A linguagem Kotlin não é dinamicamente tipada como JavaScript.&lt;/li&gt;
&lt;li&gt;propertyValue = Valor atribuído da variável.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;teste&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;teste&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Teste"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;teste&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Teste 2"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//erro de compilação por fazer uma reatribuição&lt;/span&gt;
&lt;span class="n"&gt;teste&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//erro de compilação por atribuir outro tipo&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;inteiro&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//erro de compilação. Não é possível fazer inferência sem atribuição e sem definir o tipo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Uso de constantes
&lt;/h4&gt;

&lt;p&gt;Para declaração de constantes existe a palavra reserva &lt;strong&gt;&lt;em&gt;const&lt;/em&gt;&lt;/strong&gt;. Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Tipos primitivos
&lt;/h3&gt;

&lt;p&gt;Os tipos primitivos de Kotlin são objetos.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Tipos primitivos inteiros e suas faixas de valores:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;a href="/static/img/kotlin/primite-integer.png" class="article-body-image-wrapper"&gt;&lt;img src="/static/img/kotlin/primite-integer.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Tipos primitivos booleanos e de ponto fluante e suas faixas de valores.:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;a href="/static/img/kotlin/float-point-others.png" class="article-body-image-wrapper"&gt;&lt;img src="/static/img/kotlin/float-point-others.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Strings
&lt;/h3&gt;

&lt;p&gt;Strings são literais definidos entre &lt;em&gt;""&lt;/em&gt;. Em Kotlin ela é uma sequencia imutável de códigos UTF-16.&lt;/p&gt;
&lt;h4&gt;
  
  
  String templates
&lt;/h4&gt;

&lt;p&gt;Em Kotlin, é possível trabalhar com String Templates, como no JavScript, onde variáveis podem ser acessadas através do caracter &lt;em&gt;\$&lt;/em&gt;, evitando assim a necessidade de concatenação de Strings. Caso seja necessário usar o caracter &lt;em&gt;\$&lt;/em&gt;, deve ser feito o uso do escape: &lt;em&gt;\\$&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Anne"&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;yearOfBirth&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1985&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;yearNow&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2018&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;message&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"$name is ${yearNow - yearOfBirth} years old"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Condicionais (if/else)
&lt;/h3&gt;

&lt;p&gt;A condição fica entre parenteses &lt;em&gt;()&lt;/em&gt; e o corpo da condição deve ser envolvido por chaves &lt;em&gt;{}&lt;/em&gt;. A condição deve ter retorno booleano.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;age&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You're too young to watch this movie"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You can watch this movie with a parent"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You can watch this movie"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Como em outras linguagens de programação, o uso da condicional sem as chaves envolve o risco de alguma condição não ser devidamente executada, por isso, é extremamente recomendado se trabalhar com essa sinalização explicitamente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You're too young to watch this movie"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You should go home"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Erro de lógica, esse trecho de código sempre será executado, independente da condicional.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;O if/else é também uma expressão, o que pode funcionar como um operador ternário em Java. Quando se usa essa condição, é obrigatório definir um regra para o bloco &lt;em&gt;else&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;trueBody&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;falseBody&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Comparações
&lt;/h3&gt;

&lt;p&gt;Estrutura de comparação são feitas sempre com &lt;em&gt;==&lt;/em&gt; ou &lt;em&gt;!=&lt;/em&gt;. Quando invocados esses símbolos, eles automaticamente invocam o equals da classe em questão.&lt;/p&gt;

&lt;p&gt;Comparações são chamadas de equalidade estrutural e o compilador traduz a == b, conforme exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;===&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para comparação de referência, deve ser utilizado os operadores &lt;em&gt;===&lt;/em&gt; ou &lt;em&gt;!==&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  When
&lt;/h3&gt;

&lt;p&gt;Esse operador seria equivalente ao Switch do Java, só que é um switch/case muito mais robusto.&lt;/p&gt;

&lt;p&gt;Alguns exemplos de uso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x == 1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x == 2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Note the block&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x is neither 1 nor 2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Combinando diversos valores para mesma condição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x == 0 or x == 1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"otherwise"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Pode ser usada expressões como condição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"s encodes x"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"s does not encode x"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;E tem suporte a negação através do caracter &lt;em&gt;!&lt;/em&gt; e a range (intervalos), bem como coleções.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x is in the range"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;validNumbers&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x is valid"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"x is outside the range"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"none of the above"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Estruturas de repetição
&lt;/h3&gt;

&lt;h4&gt;
  
  
  for
&lt;/h4&gt;

&lt;p&gt;For faz iteração através de qualquer coisa que provenha um iterator. Similar ao que temos de foreach do Java.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// exemplo 1&lt;/span&gt;
&lt;span class="c1"&gt;//ou&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Int&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ints&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// exemplo 2&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//iterando um array ou uma lista indexada&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//interando um range de números&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="n"&gt;downTo&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//iterando uma contagem regressiva, definindo o salto&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;until&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Prints 0, 2, 4, 6, 8&lt;/span&gt;

&lt;span class="c1"&gt;// Iterate over the entries as objects that contain the key and the value as properties&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"${entry.key}: ${entry.value}"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Iterate over the entries as separate key and value objects&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"$key: $value"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Iterate over the keys&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Iterate over the values&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  while/do-while
&lt;/h4&gt;

&lt;p&gt;Não tem muita mudança em relação a outras linguagens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;x--&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;retrieveData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// y is visible here!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Collections
&lt;/h3&gt;

&lt;p&gt;A classe Array é equivalente ao array[] do Java. Esse tipo de lista tem um tamanho fixo. As principais estruturas de dados do Java existem em Kotlin. Além do Array, temos o List, Set (dados não se repetem baseado na regra do equals) e Map (chave/valor). O map equivale ao dicionário (dict) do Python.&lt;/p&gt;

&lt;p&gt;Exemplo de como criar collections em Kotlin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;strings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Anne"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Karen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Peter"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// List&amp;lt;String&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;map&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mapOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"b"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"c"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Map&amp;lt;String, Int&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;set&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Set&amp;lt;String&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;A sintaxe acima cria listas imutáveis. Não pode ser modificado nem o tamanho, nem seus elementos. Para criação de listas mutáveis, existem outros métodos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;strings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mutableListOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Anne"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Karen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Peter"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;map&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mutableMapOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"b"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"c"&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;set&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mutableSetOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"c"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para criar coleções vazias, é necessário definir o tipo ou colocar a tipificação no método de criação. Como na sintaxe abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;noInts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;noStrings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;emptyMap&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mapOf&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Hierarquia de interfaces em Kotlin segue conforme figura abaixo:&lt;br&gt;
&lt;a href="/static/img/kotlin/collections-kotlin.png" class="article-body-image-wrapper"&gt;&lt;img src="/static/img/kotlin/collections-kotlin.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De maneira resumida:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collection é usada quando podemos trabalhar tanto com List quanto com Set.
= MutableCollection é Collection com operações de escrita add/remove.&lt;/li&gt;
&lt;li&gt;List é usado preservando a ordem e podendo ser acessado por índice. Os índices iniciam em zero e o último elemento é list.size-1. A lista suporta elementos null, inclusive que podem se repetir. Duas listas são consideradas iguais se elas tem o mesmo tamanho e os elementos são iguais e estão na mesma posição. Implementação default é ArrayList.&lt;/li&gt;
&lt;li&gt;MutableList: É uma lista com operação de escritas add/remove (existem outros métodos)&lt;/li&gt;
&lt;li&gt;List x Array: Eles são muito similares entretanto, um array tem seu tamanho definido na sua inicialização e nunca mudará. Uma lista ela não tem um tamanho pré-definido, e pode mudar de tamanho a partir de operações de escrita.&lt;/li&gt;
&lt;li&gt;Set: Armazena elementos únicos (exclusivos). A ordem normalmente não é um critério relevante. Pode armazenar, um e apenas um valor null. Duas coleções desse tipo são iguais se tem o mesmo tamanho e possuem os mesmos elementos. Implementação default é LinkedHashSet que preserva ordem de inseração, porém existe HashSet que a ordem não é relevante e consequentemente é mais performática que a estrutura default;&lt;/li&gt;
&lt;li&gt;MutableSet: Set com operações de escrita.&lt;/li&gt;
&lt;li&gt;Map: Estrutura com chave/valor. Lembra um cache ou uma tabela de banco de dados. As chaves são unicas e os valores podem ser repetidos se as chaves forem diferentes. Dois maps são iguais se possuem se suas chaves/valores são iguais. A implementação default é LinkedHashMap que preserva a ordem de inserção. Como alternativa tem o HashMap que não guardar a ordem de inseração e se baseaia no código hash, como no HashSet.&lt;/li&gt;
&lt;li&gt;MutableMap: É um map com operação de escrita.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um recurso bastante interessante em Kotlin é que você pode utilizar operadores &lt;em&gt;+&lt;/em&gt; e &lt;em&gt;-&lt;/em&gt; para coleções.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"three"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;plusList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"five"&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;minusList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"three"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"four"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plusList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minusList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Nesse estudo, comparei com Java as estruturas básicas de programação com Kotlin. Nos próximos, pretendo trazer outros recursos que a linguagem oferece.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="//%7B%%20link%20_posts/2020-04-20-estudo-kotlin-indice-serie.md%20%%7D"&gt;Conheça a série sobre Kotlin&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Outras Fontes:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sobre atributos, variáveis (mutáveis ou não), constantes&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/reference/properties.html"&gt;https://kotlinlang.org/docs/reference/properties.html&lt;/a&gt;&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/tutorials/kotlin-for-py/declaring-variables.html"&gt;https://kotlinlang.org/docs/tutorials/kotlin-for-py/declaring-variables.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sobre strings:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/tutorials/kotlin-for-py/strings.html"&gt;https://kotlinlang.org/docs/tutorials/kotlin-for-py/strings.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Condicional:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/tutorials/kotlin-for-py/conditionals.html"&gt;https://kotlinlang.org/docs/tutorials/kotlin-for-py/conditionals.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/reference/control-flow.html#when-expression"&gt;https://kotlinlang.org/docs/reference/control-flow.html#when-expression&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;for:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/reference/control-flow.html#for-loops"&gt;https://kotlinlang.org/docs/reference/control-flow.html#for-loops&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collections:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/reference/collections-overview.html"&gt;https://kotlinlang.org/docs/reference/collections-overview.html&lt;/a&gt;&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/tutorials/kotlin-for-py/collections.html"&gt;https://kotlinlang.org/docs/tutorials/kotlin-for-py/collections.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;whil/do-while:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/reference/control-flow.html#while-loops"&gt;https://kotlinlang.org/docs/reference/control-flow.html#while-loops&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collections:&lt;br&gt;
&lt;br&gt; -- &lt;a href="https://kotlinlang.org/docs/tutorials/kotlin-for-py/collections.html"&gt;https://kotlinlang.org/docs/tutorials/kotlin-for-py/collections.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kotlin</category>
      <category>jvm</category>
    </item>
    <item>
      <title>Aprendizado Kotlin - Configurando ambiente de desenvolvimento Kotlin</title>
      <dc:creator>Antonio Lazaro</dc:creator>
      <pubDate>Thu, 09 Jul 2020 19:27:54 +0000</pubDate>
      <link>https://dev.to/collabcode/aprendizado-kotlin-um-pouco-sobre-kotlin-minhas-percepcoes-do-primeiro-contato-2ple</link>
      <guid>https://dev.to/collabcode/aprendizado-kotlin-um-pouco-sobre-kotlin-minhas-percepcoes-do-primeiro-contato-2ple</guid>
      <description>&lt;p&gt;Originalmente publicado no blog do &lt;a href="https://antoniolazaro.dev/kotlin/2020/04/20/estudo-kotlin-indice-serie.html"&gt;autor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://www.pluralsight.com/offer/2020/free-april-month"&gt;Plural Sight&lt;/a&gt; está com uma promoção para o mês de abril onde os cursos da plataforma estão todos abertos devido a situação da COVID-19. Diante disso, me cadastrei na plataforma e fiz o curso &lt;a href="https://app.pluralsight.com/library/courses/8251eea9-5847-4881-bc94-1c3e0dc8b42e/table-of-contents"&gt;"Getting Started With Kotlin"&lt;/a&gt; by &lt;a href="https://app.pluralsight.com/profile/author/kevin-jones"&gt;Kevin Jones&lt;/a&gt; (conta dele no &lt;a href="https://twitter.com/kevinrjones?lang=en"&gt;twitter:&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Meu primeiro contato com Kotlin foi durante a seleção da Jaya onde fiz um projeto usando &lt;a href="https://github.com/antoniolazaro/octo-events"&gt;Kotlin e Gradle com Javalin, Koin e Exposed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O curso ele tem duração de 2h, e cobre uma introdução, fala um pouco sobre programação orientada a objetos, funcional, interoperabilidade Java x Kotlin e vice-versa, e fala sobre a ferramenta de testes Spek.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurando ambiente desenvolvimento Kotlin em ambientes Unix based
&lt;/h2&gt;

&lt;p&gt;Para quem não tem a JVM instalada, particulamente, acho a o &lt;a href="https://sdkman.io/"&gt;SDKMan&lt;/a&gt; a melhor forma de configurar itens do ambiente Java para ambientes Unix based. Usuários de Windows, não sei se tem uma forma de configurar o SDKMan no Windows.&lt;/p&gt;

&lt;p&gt;Segue passo a passo de como testar e configurar ambiente Kotlin em ambiente Unix based:&lt;/p&gt;

&lt;p&gt;1- &lt;a href="https://sdkman.io/install"&gt;Instalar o SDK Man&lt;/a&gt;&lt;br&gt;
&lt;br&gt;2- Usando Sdk Man, &lt;a href="https://sdkman.io/sdks#kotlin"&gt;instalar o Kotlin&lt;/a&gt;&lt;br&gt;
&lt;br&gt;3- Você pode ver que a variável de ambiente KOTLIN_HOME foi setada através do comando&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;echo \$KOTLIN_HOME&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;4- Testar a instalação do Kotlin através do comando kotlinc. Deve aparecer conforme abaixo.&lt;br&gt;
&lt;a href="/static/img/kotlin/kotlin-demo.png" class="article-body-image-wrapper"&gt;&lt;img src="/static/img/kotlin/kotlin-demo.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Hello World
&lt;/h2&gt;

&lt;p&gt;A forma mais fácil de testar Kotlin sem necessidade de instalar nenhum software é através do site da própria linguagem &lt;a href="https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt"&gt;Try Kotlin&lt;/a&gt; que est[a sendo considerado obsoleto e eles recomendam agora o &lt;a href="https://play.kotlinlang.org"&gt;Kotlin Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Arquivos de código-fonte Kotlin eles tem a extensão .kt. O hello World Kotlin pode ser feito da seguinte forma (pode ser executado diretamente no terminal ou salvo como arquivo):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;){&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Assim como no Java existe a função public static void main, em Kotlin essa função é o main, descrito acima. É como a JVM interpreta que o Kotlin executará um programa.&lt;/p&gt;

&lt;p&gt;Para compilar via linha de comando será necessário digitar o comando abaixo no diretório onde o arquivo foi salvo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kotlinc nome-arquivo-fonte.kt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para converter esse código Kotlin em um jar executável da JVM é necessário rodar o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kotlinc nome-arquivo-fonte.kt -include-runtime -d nome-binario-executavel.jar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  IDEs
&lt;/h2&gt;

&lt;p&gt;Dificilmente, alguém utilizará para projetos reais a estrutura acima, de executar manualmente, compilar, etc. Normalmente trabalhamos com IDEs em projetos reais. Não testei no Netbeans porque, particulamente não conheço e não uso, porém para as 3 IDEs que tenho na minha máquina (Eclipse,IntelliJ e VSCode) vi que o Kotlin tem plugin e suporte.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IntelliJ: Instalar plugin Kotlin&lt;/li&gt;
&lt;li&gt;Eclipse: Instalar no Market Place o plugin para Kotlin&lt;/li&gt;
&lt;li&gt;VsCode: Instalar o plugin para Kotlin (baixei o que tinha mais download em minha busca, que foi do editor: mathiasfrohlich)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Até o momento, estou utilizando IntelliJ como IDE para programar em Kotlin e tenho gostado do resultado. Achei conceitualmente muito parecido com Java, porém mais simples. A interoperabilidade com Java é muito bem feita para os testes incialmente feitos.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>jvm</category>
    </item>
    <item>
      <title>Aprendizado Kotlin - Um pouco sobre Kotlin, minhas percepções do primeiro contato</title>
      <dc:creator>Antonio Lazaro</dc:creator>
      <pubDate>Thu, 09 Jul 2020 19:26:28 +0000</pubDate>
      <link>https://dev.to/collabcode/aprendizado-kotlin-um-pouco-sobre-kotlin-minhas-percepcoes-do-primeiro-contato-517g</link>
      <guid>https://dev.to/collabcode/aprendizado-kotlin-um-pouco-sobre-kotlin-minhas-percepcoes-do-primeiro-contato-517g</guid>
      <description>&lt;p&gt;Originalmente publicado no blog do &lt;a href="https://antoniolazaro.dev/kotlin/2020/04/20/estudo-kotlin-indice-serie.html"&gt;autor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Em abril iniciei um novo ciclo profissional e agora faço parte do time da &lt;a href="https://jaya.tech/"&gt;Jaya Tech&lt;/a&gt; trabalhando para o &lt;a href="https://www.c6bank.com.br"&gt;C6 Bank&lt;/a&gt;. Enquanto os acessos são criados/liberados, tive a oportunidade de ir me familiarizando mais com a linguagem utilizada no projeto que ficarei alocado. A principo a Stack trabalha com Kotlin e por esse motivo tenho que aprender a linguagem e conhecer suas características.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kotlin
&lt;/h3&gt;

&lt;p&gt;Kotlin atualmente está na &lt;a href="https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-3-70-released/?_ga=2.196070380.1960498962.1587384907-1530203495.1584056577"&gt;versão 1.3.70&lt;/a&gt;. A equipe trabalha na &lt;a href="https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-4-m1-released/?_ga=2.196070380.1960498962.1587384907-1530203495.1584056577"&gt;release 1.4 que está em milestone 1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Você pode testar recursos do Kotlin no &lt;a href="https://kotlinlang.org/#try-kotlin"&gt;site da própria linguagem&lt;/a&gt; e ela tem uma &lt;a href="https://kotlinlang.org/docs/tutorials/getting-started.html"&gt;documentação rica e muito clara&lt;/a&gt; com diversos tutoriais.&lt;/p&gt;

&lt;p&gt;Uma boa fonte de informação sobre a linguagem, suas evoluções e usos é o &lt;a href="https://blog.jetbrains.com/kotlin/"&gt;blog da linguagem&lt;/a&gt;, bem como a &lt;a href="https://twitter.com/kotlin"&gt;conta do Twitter&lt;/a&gt;. Para conhecer os detalhes da linguagem, ela é open-source e pode ser conhecida internamente através da &lt;a href="https://github.com/JetBrains/kotlin"&gt;conta do GitHub da JetBrains&lt;/a&gt;, empresa responsável pela criação e manutenção do Kotlin. No github da &lt;a href="https://github.com/Kotlin"&gt;linguagem Kotlin&lt;/a&gt;, podem ser conhecidos diversos projetos complementares a linguagem com ferramentas e bibliotecas.&lt;/p&gt;

&lt;h4&gt;
  
  
  História Kotlin
&lt;/h4&gt;

&lt;p&gt;Acredito eu, que a motivação da &lt;a href="https://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; para criar uma nova linguagem de programação em relação ao Java devia ser uma inquietação em relação a lentidão da evolução da linguagem, bem como seu processo de release. Java nos últimos anos, ganhou status de "Old school" e isso obrigou o JCP a acelerar o processo de desenvolvimento do mesmo. Hoje temos releases semestrais do Java, seguindo a mesma cultura LTS (Long Term Support) que já existem em outros projetos Open Source. O ciclo de evolução ficou mais rápido com mudanças menores. Mas a JetBrains hoje tem um modelo de lançamento de release da linguagem mais livre do processo vinculado ao Java.&lt;/p&gt;

&lt;p&gt;Em 2011, a JetBrains lançou a linguagem que recebeu o nome em homenagem a uma ilha russa de mesmo nome situada próxima a costa de São Pertesburgo onde a equipe do Kotlin reside. Essa ilha fica no lado ocidental da Russia, &lt;a href="https://goo.gl/maps/bhU78E8DyQGSLqh4A"&gt;próxima a Finlândia e a Estônia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A linguagem teve fortes influências de &lt;a href="https://www.scala-lang.org/"&gt;Scala&lt;/a&gt; e se pensou muito em interopibilidade com o Java, tanto que é possível misturar código Java com Kotlin e vice-versa.&lt;/p&gt;

&lt;p&gt;Em 2017, no Google IO, a Google anunciou que essa se tornaria a linguagem oficial para o Android.&lt;/p&gt;

&lt;p&gt;A partir de novembro de 2017, na versão 1.2, foi possível lançar uma release onde se programava código Kotlin para JVM e Javascript.&lt;/p&gt;

&lt;p&gt;Na release 1.3, Kotlin trouxe o conceito de coroutines para programação assincrona.&lt;/p&gt;

&lt;p&gt;Kotlin foi pensada para ser menos verbosa que o Java e mais produtiva. Fazendo o dev escrever menos código, consequentemente tendo mais tempo para pensar no negócio do que digitando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ambiente de desenvolvimento
&lt;/h2&gt;

&lt;p&gt;Por ser feito pela JetBrains, nos meus testes, minha perceção de melhor uso e produtividade no Kotlin é no InteliJ IDE. Porém Kotlin tem plugins para Eclipse e Visual Studio Code e funcionaram bem. Nesse primeiro contato o IntelliJ tem me agradado mais. Mesmo na versão Community Edition.&lt;/p&gt;

&lt;p&gt;É possível também utilizar linha de comando para executar código Kotlin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Características
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fortemente tipada: Como Java, porém de maneira mais simples devido a inferência de tipo.&lt;/li&gt;
&lt;li&gt;Inferência de tipo: Tipo não precisa ser declarado, ele é inferido na associação com o objeto.&lt;/li&gt;
&lt;li&gt;Concisa: Linguagem pensada para o dev escrever objetivamente seu código.&lt;/li&gt;
&lt;li&gt;Null Safe: Kotlin é pensada para evitar NullPointerException. Para declarar null a uma variável é necessário definir que a aquela variável suporta null explicitamente.&lt;/li&gt;
&lt;li&gt;Propósito geral: Mobile cross-platform, server side, native (windows/linux/mac), web development, - Android, data Science&lt;/li&gt;
&lt;li&gt;Interopelabilidade: Roda em qualquer ambiente JVM, no Browser e no Android. Suporta código Java, então bibliotecas e frameworks Java podem ser usado em ambiente/projetos Kotlin&lt;/li&gt;
&lt;li&gt;Tool-friendly: Suportada nas principais IDEs, inclusive na linha de comando.&lt;/li&gt;
&lt;li&gt;Funcional/Orientad a objetos: Suporta os dois paradigmas&lt;/li&gt;
&lt;li&gt;Extension functions: É possível se extender funcionalidades de uma classe sem usar herança&lt;/li&gt;
&lt;li&gt;Suporte a imutabilidade: Objetos podem ser considerados imutáveis (não podem sofrer nova atribuição) e esse recurso é muito importante quando falamos de programação funcional.&lt;/li&gt;
&lt;li&gt;Linguagem concisa para criação de DSLs (Domain Specification Language)&lt;/li&gt;
&lt;li&gt;Suporta funções como cidadãos de primeira classe e função de ordem superior &lt;a href="https://leandromoh.gitbooks.io/tcc-paradigmas-de-programacao/5_paradigma_funcional/54_funcoes_de_primeira_classe_e_de_ordem_superior.html"&gt;explicação melhor sobre os temas&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Meu primeiro contato foi muito positivo com a linguagem e encontrei em Kotlin, recursos que sempre questionei porque o Java não tinha isso nativamente. Porém, entendo muito o dilema do Java de manter retrocompatibilidade, pensando no Enterprise que sempre foi o foco da linguagem. &lt;/p&gt;

&lt;p&gt;Construir uma linguagem sem essas amarras e dependências, permitiu a JetBrains a criar uma Java Clean e com práticas e decisões mais modernas. Eu não conheço C#, porém dizem que Kotlin tem muitas coisas boas que existem no C# nativamente. Acredito que toda ferramenta/linguagem que nasce depois, tem sempre a oportunidade de ser construída de maneira melhor e mais alinhada ao seu presente, que para linguagens mais antigas, teriam que tomar decisões de futuro para acertar o que temos hoje. Algumas coisas dão certo, outras não. Assim se caminha a humanidade, nada se cria, tudo se transforma, aprimora, evolui.&lt;/p&gt;

&lt;p&gt;A ciência é algo muito bonito. Vamos valorizar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outras Fontes:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.treinaweb.com.br/blog/kotlin-a-nova-linguagem-oficial-para-desenvolvimento-android/"&gt;https://www.treinaweb.com.br/blog/kotlin-a-nova-linguagem-oficial-para-desenvolvimento-android/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.androidpro.com.br/blog/kotlin/kotlin/"&gt;https://www.androidpro.com.br/blog/kotlin/kotlin/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.matheuscastiglioni.com.br/comecando-com-kotlin/"&gt;https://blog.matheuscastiglioni.com.br/comecando-com-kotlin/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cafeinacodificada.com.br/kotlin/"&gt;https://cafeinacodificada.com.br/kotlin/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Kotlin_(programming_language)"&gt;https://en.wikipedia.org/wiki/Kotlin_(programming_language)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kotlin</category>
      <category>jvm</category>
    </item>
    <item>
      <title>Agile - Scrum - Visão Geral</title>
      <dc:creator>Antonio Lazaro</dc:creator>
      <pubDate>Thu, 25 Jun 2020 11:31:02 +0000</pubDate>
      <link>https://dev.to/antonio_lazaro/agile-scrum-visao-geral-3jpo</link>
      <guid>https://dev.to/antonio_lazaro/agile-scrum-visao-geral-3jpo</guid>
      <description>&lt;p&gt;&lt;a href="https://antoniolazaro.dev/agile/2020/05/24/scrum-e-agile-indice-serie.html"&gt;Conheça a série sobre Agile&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;O objetivo desse post é falar um pouco scrum e em próximos posts compartilhar visões sobre conceitos e experiências que eu me sinta confortável para falar a respeito.&lt;/p&gt;

&lt;p&gt;O Scrum é uma metodologia ágil para gestão e planejamento de projetos. Foi criada pensando em software, mas devido aos seus bons resultados, rapidamente também foi adaptada para outras áreas, como pode ser encontrado diversos relatos no &lt;a href="https://www.amazon.com.br/SCRUM-fazer-dobro-trabalho-metade/dp/8543107164/ref=asc_df_8543107164/?tag=googleshopp00-20&amp;amp;linkCode=df0&amp;amp;hvadid=379751563849&amp;amp;hvpos=&amp;amp;hvnetw=g&amp;amp;hvrand=8860049318467581133&amp;amp;hvpone=&amp;amp;hvptwo=&amp;amp;hvqmt=&amp;amp;hvdev=c&amp;amp;hvdvcmdl=&amp;amp;hvlocint=&amp;amp;hvlocphy=1001533&amp;amp;hvtargid=pla-810952799643&amp;amp;psc=1"&gt;livro &lt;strong&gt;&lt;em&gt;Scrum: A arte de fazer o dobro do trabalho na metade do tempo&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; escrito por &lt;a href="https://en.wikipedia.org/wiki/Jeff_Sutherland"&gt;Jeff Sutherland&lt;/a&gt;, que nada mais é que um dos assinantes do &lt;a href="https://agilemanifesto.org/iso/ptbr/manifesto.html"&gt;manifesto ágil&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A figura abaixo relata a estrutura macro do Scrum.&lt;/p&gt;

&lt;p&gt;&lt;a href="/static/img/agile/scrum-cycle.jpg" class="article-body-image-wrapper"&gt;&lt;img src="/static/img/agile/scrum-cycle.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint
&lt;/h2&gt;

&lt;p&gt;O Scrum basicamente é divididos em ciclos de construção e entrega chamados de Sprint. Um Sprint, representa um &lt;a href="https://www.agilealliance.org/glossary/timebox/"&gt;Time Box (período de tempo definido pelo time que uma pessoa ou o time tem para realizar uma atividade ou um conjunto dela)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Backlog
&lt;/h2&gt;

&lt;p&gt;Lista que contém todas as funcionalidades a serem implementadas em um projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint planning
&lt;/h2&gt;

&lt;p&gt;No início de cada Sprint, se faz uma reunião de planejamento entre o time e o Product Owner (P.O.), com o objetivo de priorizar os itens do Product Backlog que serão desenvolvidos dentro da Sprint. Uma vez que essas tarefas foram priorizadas elas irão para o &lt;strong&gt;Sprint Backlog&lt;/strong&gt;, que é o conjunto de tarefas a serem desenvolvidas dentro da Sprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daily Meeting
&lt;/h2&gt;

&lt;p&gt;Diariamente, a equipe tem uma reunião breve, que tem como objetivo disseminar conhecimento sobre o que foi feito no dia anterior, identificar impedimentos das atividades em andamento e priorizar o trabalho do dia que inicia. O ideal é que a Daily tenha um timebox definido e que esse seja respeitado. Basicamente na daily se responde as seguintes perguntas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O que fiz ontem&lt;/li&gt;
&lt;li&gt;O que vou fazer hoje&lt;/li&gt;
&lt;li&gt;Tenho algum impedimento que impacta minha atividade de ontem ou de hoje.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Sprint review x retrospective
&lt;/h2&gt;

&lt;p&gt;Ao final de uma Sprint, a equipe faz uma uma reunião, onde as funcionalidades implementadas são apresentadas ao P.O. e em alguns casos ao cliente com objetivo de validar a construção da Sprint.&lt;/p&gt;

&lt;p&gt;A retrospectiva, tem como objetivo a equipe avaliar o que deu certo, e o que deu errado na Sprint e o que a equipe deve melhorar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O objetivo dessa série foi avançar na série sobre agile e fazer uma introdução sobre Scrum. Os próximos passos, falarei um pouco sobre os papéis dentro do Scrum e depois experiências usando esse framework. Recomendo fortemente que vejam o site &lt;a href="https://www.scrumstudy.com/portuguese"&gt;https://www.scrumstudy.com/portuguese&lt;/a&gt;. Lá tem muito conteúdo e tem uma certificação gratuita de Scrum &lt;a href="https://www.scrumstudy.com/portuguese/scrum-fundamentals-certified"&gt;(Scrum Fundamentals Certified - SFC)&lt;/a&gt; que apresenta um overview geral da linguagem. Existem outras certificações pagas também para quem quiser e puder, incrementar o currículo.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://antoniolazaro.dev/agile/2020/05/24/scrum-e-agile-indice-serie.html"&gt;Conheça a série sobre Agile&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Outras fontes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.desenvolvimentoagil.com.br/scrum/"&gt;https://www.desenvolvimentoagil.com.br/scrum/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>scrum</category>
      <category>agile</category>
    </item>
    <item>
      <title>Soft Skills - Autoconhecimento e Autogestão</title>
      <dc:creator>Antonio Lazaro</dc:creator>
      <pubDate>Thu, 25 Jun 2020 11:25:16 +0000</pubDate>
      <link>https://dev.to/antonio_lazaro/soft-skills-autoconhecimento-e-autogestao-4bm2</link>
      <guid>https://dev.to/antonio_lazaro/soft-skills-autoconhecimento-e-autogestao-4bm2</guid>
      <description>&lt;p&gt;&lt;a href="https://antoniolazaro.dev/soft-skills/2020/05/24/soft-skills-indice-serie.html"&gt;Conheça a série sobre Soft Skill&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durante a quarentena causada pela Pandemia da &lt;a href="https://covid.saude.gov.br/"&gt;Covid-19&lt;/a&gt; algumas empresas tiveram iniciativa de liberar alguns cursos online gratuitos devido a campanha #fiqueemcasa gerada nas redes sociais. A &lt;a href="https://escolaconquer.com.br/"&gt;Escola Conquer&lt;/a&gt; foi uma dessas e liberou o curso de &lt;a href="https://online.escolaconquer.com.br/soft-skills/inteligencia-emocional/"&gt;Inteligência Emocional&lt;/a&gt;. Eu nunca botei muita fé em cursos dessa natureza, o que não significa que não ache o tema relevante, porém esse curso me surpreendeu positivamente, e minha curiosidade sobre o assunto aumentou. Compartilho um pouco do que aprendi e li sobre o conceito de autoconhecimento e autogestão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Quando se fala sobre autoconhecimento, o nome é autoexplicativo e diz sobre a capacidade que a pessoa tem de conhecer a si mesmo. Mas pouco percebemos que muitas vezes não nos conhecemos tão bem quanto achamos. Então o curso mostra algumas técnicas e caminhos para que você busca desenvolver isso. Importante registrar, que esse processo é continuo, porque mudamos bastante ao longo da vida, não só fisicamente, mas nosso comportamento, nossas percepções e nossos objetivos vão mudando no decorrer da nossa jornada. O autoconhecimento também pode ser visto como uma busca filosófica de redescoberta e reescrita de caminho. Os primeiros pontos que podem ser avaliados nesse estudo, é se você conhece suas forças e fraquezas. Suas características que potencializam você e quais te deixam vulneráveis. Para isso, é bastante importante identificar sua personalidade e muitas pessoas não conseguem fazer isso sozinhos, nesse caso, vale a pena a busca de uma ajuda profissional nesse sentido. É importante conhecer sua personalidade para saber seus limites e valores, e na escrita do caminho, você avaliar se esse caminho não vai de encontro a sua personalidade, tornando o processo muito mais complicado do que o necessário. Autoconfiança é uma ferramenta importante nesse processo.&lt;/p&gt;

&lt;p&gt;O time da Conquer fala bastante nesse módulo sobre o &lt;strong&gt;ciclo da ação&lt;/strong&gt;, que basicamente diz que toda observação feita sobre os outros, é o resultado oriundo de um repertório que é o conjunto de experiências que conceitualmente são nossas crenças.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Repertório (Experiências) -&amp;gt; Crenças -&amp;gt; Atitiudes -&amp;gt; Resultados.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para quebrar esse ciclo, é importante avaliar sempre contexto e se os repertórios fazem sentido ou não para o cenário observado. Para observar se não estamos presos no ciclo da ação em &lt;em&gt;loop&lt;/em&gt;, é importante se auto conhecer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autoconhecimento
&lt;/h2&gt;

&lt;p&gt;7 passos para reflexão em busca do autoconhecimento:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O que atingimos até o momento? Quais são suas vitórias e conquistas? (prêmios, concursos, títulos)&lt;/li&gt;
&lt;li&gt;Quais são suas paixões? Quais atividades, interesses, assuntos te fascinam,empolgam? Te fazem sentir dispostos?&lt;/li&gt;
&lt;li&gt;Quais são suas forças? Entusiasmo, honestidade, critério, amor por aprendizagem, perspectiva, amor, bondade, bravura, perserverança, criatividade, inteligência social, curiosidade, trabalho em equipe, gratidão, imparcialidade, liderança, humildade, prudência, esperança, bom humor, espiritualidade, autocontrole?&lt;/li&gt;
&lt;li&gt;Qual seu repertório? Quais são suas vivências e experiências? O que você já fez ou já viveu?&lt;/li&gt;
&lt;li&gt;Você é mestre ou referência? Você é um modelo para outras pessoas? Quais pessoas te inspiram?&lt;/li&gt;
&lt;li&gt;Qual seu propósito? Por que você faz o que faz? O que busca?&lt;/li&gt;
&lt;li&gt;Quais são seus inimigos internos? Quem identifica os internos, sabe lhe dar com os inimigos externos. Como controlar o que não conhecemos?&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Prestativo? Vítima? Inquieto? Insistente? Hiper racional? Hiper realizador? Controlador? Emotivo demais?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Autogestão
&lt;/h2&gt;

&lt;p&gt;A autogestão é a capacidade que o sujeito encontra para administrar suas próprias emoções e com isso suas atitudes. Esse conceito é muito utilizado no mundo corporativo também. Autogestão no mundo corporativo está muito associado a possuir mais autonomia. Mas quais características necessárias para entendimento da autogestão? Cito algumas dela: responsabilidade, coragem, disciplina, organização, senso de urgência, capacidade de tomada de decisão, foco.&lt;/p&gt;

&lt;p&gt;No curso se fala sobre a ciência das emoções e a organização de nosso cérebro que é dividido em cérebro primitivo emocional ou cérebro moderno (racional), nosso cérebro busca por padrões e repetições para que nosso cérebro primitivo seja usado e com isso gastemos menos energia. Por esse motivo, lutamos para aprender novas coisas, precisamos treinar o cérebro para que ele entenda que aquela nova atividade, é um novo padrão e que precisa ser absorvado por ele.&lt;/p&gt;

&lt;p&gt;Muito do que fazemos tem relação com nossas expectativas em relação as necessidades serem atendidas. Quando elas não são atendidas, tendemos a desenvolver sentimentos ruins, diferente de quando são atendidas. Em um processo de autodescoberta, pode ser que descubramos que hábitos atuais são rotineiros e negativos, embora nossas necessidades estejam atendidas. Por essa razão, é importante alinhar o autoconhecimento a um ou um conjunto de objetivos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Essas duas habilidades apresentadas, são fundamentais para um melhor desenvolvimento humano. Pessoas que trabalham esses dois aspectos desenvolvem uma habilidade melhor na resolução de problemas, melhora sua comunicação porque ela é base para o autogerenciamento, otimiza a gestão de tempo, e consegue melhores resultados práticos.&lt;/p&gt;

&lt;p&gt;Alguns livros que abordam tópicos citados nesse tema e que podem ajudar no desenvolvimento dessas habilidades:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com.br/R%C3%A1pido-devagar-Daniel-Kahneman/dp/853900383X/ref=sr_1_1?adgrpid=80705490385&amp;amp;dchild=1&amp;amp;gclid=CjwKCAjw88v3BRBFEiwApwLevXkJGU0HnlrB5gFJkkqRao6d7lJ4twcTEauUqyNRGNYuD1y1uGlyphoCYb0QAvD_BwE&amp;amp;hvadid=392970210701&amp;amp;hvdev=c&amp;amp;hvlocphy=1001533&amp;amp;hvnetw=g&amp;amp;hvqmt=e&amp;amp;hvrand=5469084583712454095&amp;amp;hvtargid=kwd-396687557028&amp;amp;hydadcr=5896_10583364&amp;amp;keywords=r%C3%A1pido+e+devagar&amp;amp;qid=1593032072&amp;amp;s=books&amp;amp;sr=1-1&amp;amp;tag=hydrbrgk-20"&gt;Rápido e Devagar, duas formas de pensar por Daniel Kaheman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com.br/poder-do-h%C3%A1bito-Charles-Duhigg/dp/8539004119/ref=asc_df_8539004119/?tag=googleshopp00-20&amp;amp;linkCode=df0&amp;amp;hvadid=379749006424&amp;amp;hvpos=&amp;amp;hvnetw=g&amp;amp;hvrand=2095092279419789539&amp;amp;hvpone=&amp;amp;hvptwo=&amp;amp;hvqmt=&amp;amp;hvdev=c&amp;amp;hvdvcmdl=&amp;amp;hvlocint=&amp;amp;hvlocphy=1001533&amp;amp;hvtargid=pla-333762635690&amp;amp;psc=1"&gt;O poder do Hábito por Charles Duhigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com.br/gp/product/B01DCNJ1CY/ref=dbs_a_def_rwt_bibl_vppi_i1"&gt;Mais rápido e melhor: Os segredos da produtividade na vida e nos negócios por Charles Duhigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/Foco-Em-Portugues-do-Brasil/dp/8539005352"&gt;Foco por Daniel Goleman&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sobre os autores:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Daniel_Kahneman"&gt;Daniel Kaheman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Daniel_Goleman"&gt;Daniel Goleman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Charles_Duhigg"&gt;Charles Duhigg&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://antoniolazaro.dev/soft-skills/2020/05/24/soft-skills-indice-serie.html"&gt;Voltar para o índice da série de Soft Skill&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Outras fontes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.napratica.org.br/tudo-sobre-autoconhecimento/"&gt;https://www.napratica.org.br/tudo-sobre-autoconhecimento/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://migreseunegocio.com.br/autogestao-guia-basico/"&gt;https://migreseunegocio.com.br/autogestao-guia-basico/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softskill</category>
    </item>
  </channel>
</rss>
