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).
- Crie o arquivo
ataque_kratos.gona pastasrc/:
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
- Abra o terminal integrado.
- 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)
}