DEV Community

Linive
Linive

Posted on

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

Top comments (0)