DEV Community

Linive
Linive

Posted on

3

Short variable declarations?

Vocês conhecem esse carinha aqui :=? Então, ele é o tal do short variable declarations, também pode ser chamado de operador curto de atribuição, e os brasileiros mais íntimos podem chama-lo de marmota.

Alt Text

Antes de falarmos sobre o operador curto, precisamos discutir algumas coisas.

Vocês sabem a diferença entre:

Declaração x Inicialização x Atribuição?

Alt Text

var nome string 
var idade int
var gostaDeChocolate bool

Declaração é quando criamos a variável, perceba que não passamos valor para nenhuma das variaveis criadas.

Curiosidade: Quando não passamos nenhum valor para uma variável, ela tem o chamado valor zero. Cada tipo tem o seu valor zero. Se déssemos um fmt.Println(nome, idade, gostaDeChocolate), o resultado seria: " " 0 false

Bem, essa é a inicialização, basicamente a criação de uma variável sem atribuir nenhum valor.

var nome = "Linive" 
var idade = 23
var gostaDeChocolate = true

É parecido com o de antes, mas não e igual...

Percebam que agora estamos criando a variável, declarando, e passando um valor. O ato de passar o primeiro valor para uma variável se chama inicialização. Estou declarando e inicializando a variável.

Outro detalhe é que quando inicializamos a variável junto da declaração, podemos tirar o tipo da variável. Percebam que não tem mais string, int e bool. Isso é possível porque o go irá deduzir qual é o tipo da variável pelo valor que estamos inserindo nela. Incrível, né?

Já criamos variáveis e demos valores para elas, agora vamos supor que eu completei ano. Minha idade vai passar a ser 24, teremos que modificar a variável.

idade = 24

Já tínhamos declarado e inicializado a variável idade, agora estamos apenas modificando-a. O ato de passa um valor para uma variável é chamado de atribuição. Percebam que toda inicialização é uma atribuição, pois na inicialização estamos passando valores para variáveis, mas nem toda atribuição é uma inicialização.

Ok, mas onde entra esse tal de operador curto de atribuição, vulgo marmota?

vamos falar dele agora!

nome := "Linive" 
idade := 23
gostaDeChocolate := true

O operador curto consegue declarar e inicializar a variável de uma vez só, não precisamos nem colocar o var na frente!

Alt Text

Como nem tudo é perfeito, a marmota tem suas limitações 😟

: Ela só pode ser utilizada dentro de code blocks, blocos de códigos, como a func main. Sempre que quisermos declarar uma variável fora de um bloco de código, devemos utilizar o var

Correto:

package main

import "fmt"

var nome = "Linive"

func main(){
    idade := 23
    gostaDeChocolate := true
}

O operador curto esta sendo utilizado dentro de um bloco de código, a func main 👍.

Errado:

package main

import "fmt"

idade := 23
gostaDeChocolate := true

func main(){

}

O operador curto não está dentro de nenhum bloco 👎.

: A segunda limitação é que ele não pode apenas atribuir valor a variáveis já inicializadas. Lembram daquela história de inicialização e atribuição? Vamos utilizar aqui.

Isso aqui não pode ser feito.

package main

import "fmt"

var idade = 23

func main(){
    idade := 24
}

Eu já declarei e inicializei a variável idade, então não posso utilizar o operador curto para modificar seu valor, atribuir um novo valor. Para modificar valores, utilizamos o igual, =.

Correto:

package main

import "fmt"

var idade = 23

func main(){
    idade = 24
}

Tem um detalhe, nós podemos utilizar uma marmota para duas variáveis.

Alt Text

Vamos com calma...

package main

import "fmt"

var idade = 23

func main(){

}

Percebam que estamos declarando e inicializando a variável idade fora do code block, então teoricamente não podemos mais usar o operador curto nela. Agora vem o pulo do gato.

Alt Text

Podemos utilizar a marmota na variável idade novamente, contanto que outra variável esteja sendo declarada e inicializada.

package main

import "fmt"

var idade = 23

func main(){
    idade, nome := 24, "Linive"
}

Esse código aqui não vai apresentar nenhum erro. A idade vai passar a ser 24 e o nome, que não tinha sido declarando ainda, vai ser declarado e inicializado.

É importante prestar atenção na ordem das coisas, se colocamos a variável idade primeiro, o valor dela deve vir primeiro, caso contrário vai virar uma bagunça.

Por hoje é isto. Vale lembrar que estou estudando e registando meu avanço. Se você também tem interesse por go, tem esse curso maravilhoso, vem sem medo de ser feliz.

E vamos continuar os estudos!

Alt Text

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

Top comments (0)

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE