Capítulo 08: Funções (Modularização) 🪓❄️

Neste capítulo, vamos aprender a dividir nosso código em blocos menores e reutilizáveis chamados Funções no Go, com o tema God of War!


📖 O que são Funções?

Funções são blocos de código que realizam uma tarefa específica. Em Go, usamos a palavra-chave func. Um grande diferencial do Go é que as funções podem retornar múltiplos valores de uma vez!


📖 Exemplo Guiado: Ataque do Kratos

Vamos criar uma função que calcula o dano de um ataque e também retorna se o ataque foi crítico (dobro do dano).

  1. Crie o arquivo ataque_kratos.go na pasta src/:
package main
 
import "fmt"
 
// Função que retorna dois valores: um int e um bool
func calcularDano(forca int, critico bool) (int, bool) {
    if critico {
        return forca * 2, true
    }
    return forca, false
}
 
func main() {
    forcaBase := 50
 
    // Recebendo os dois valores de retorno
    dano1, foiCritico1 := calcularDano(forcaBase, false)
    fmt.Println("Ataque normal causou:", dano1, "de dano. Critico?", foiCritico1)
 
    dano2, foiCritico2 := calcularDano(forcaBase, true)
    fmt.Println("Ataque com furia causou:", dano2, "de dano. Critico?", foiCritico2)
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Execute: go run ataque_kratos.go

Resultado Esperado:

Ataque normal causou: 50 de dano. Critico? false
Ataque com furia causou: 100 de dano. Critico? true

📊 Ilustração Visual: Múltiplos Retornos

Veja como a função devolve mais de uma informação:

graph TD
    A[main] -->|"1. Chama calcularDano"| B["Função: calcularDano"]
    B -->|"2. Retorna Dano int"| A
    B -->|"3. Retorna Critico bool"| A

🛠️ Prática Obrigatória 1: Barra de Vida

Crie uma função chamada exibirVida(vida int) que não retorna nada e apenas exibe uma barra visual de vida usando colchetes (ex: se a vida for 50, exibe [|||||]). Use um laço dentro da função para desenhar a barra (uma barra | para cada 10 pontos de vida)!


🔑 Gabarito de Código

Prática 1: barra_vida.go

package main
 
import "fmt"
 
func exibirVida(vida int) {
    fmt.Print("Vida: [")
    barras := vida / 10
    for i := 0; i < barras; i++ {
        fmt.Print("|")
    }
    fmt.Println("]", vida, "%")
}
 
func main() {
    vidaKratos := 80
    exibirVida(vidaKratos)
}

Capitulo Anterior | Proximo Capitulo