$ masmorra_ascii

Item 07 de 10

7. Conceitos básicos em 4 palavras

Variável - uma caixa com nome

Imagine que você precisa anotar a idade do herói em algum lugar. Você escreve em um pedaço de papel, cola um rótulo “idade” nesse papel, e guarda em uma caixa. Quando precisa lembrar a idade, abre a caixa que tem o rótulo “idade” e lê. Quando o herói faz aniversário, apaga o número antigo e escreve o novo no mesmo papel.

Variável é exatamente isso. Em Dart:

var nome = 'Aragorn';
int idade = 87;

A primeira linha cria uma caixa rotulada nome com o texto 'Aragorn' dentro. Como você usou var, o Dart infere o tipo (String, porque o que está dentro tem aspas). A segunda linha é mais explícita: você diz que idade vai guardar um int (número inteiro), e coloca 87.

Você pode mudar o valor depois:

nome = 'Bilbo';
idade = idade + 1;  // 88

Mas se você usar final em vez de var, a caixa é selada após a primeira atribuição:

final aniversario = '12 de setembro';
aniversario = '13 de setembro';  // ERRO: cannot assign to a final variable

Use final quando souber que o valor nunca vai mudar. Ajuda o leitor (e o Dart) a entender sua intenção.

Condicional - se isso, então aquilo

Pense num porteiro do prédio: se você é morador, ele te deixa entrar. Se não, ele pergunta com quem você vai falar. Se ninguém atender, ele te manda embora. Cada decisão é um galho diferente.

Em Dart:

if (hp > 0) {
  print('Vivo. Continue lutando.');
} else if (hp == 0) {
  print('Caindo. Use uma poção!');
} else {
  print('Game over.');
}

Três coisas a observar:

  1. A condição vai entre parênteses depois do if. É uma expressão que resulta em verdadeiro ou falso.
  2. Comparadores comuns: > (maior), < (menor), >=, <=, == (igual), != (diferente).
  3. Cuidado com = (atribuição) vs == (comparação). hp = 0 zera o HP; hp == 0 checa se o HP é zero. Erro clássico.

else if é só uma forma de encadear: o Dart testa a primeira condição, se falsa testa a próxima, e assim por diante. O else final captura todos os outros casos.

Loop - repetir até

Imagine girar uma manivela: você gira, gira, gira, até a corda subir ao topo. Cada giro é uma iteração. A condição para parar é “a corda chegou no topo”.

Em Dart, o jeito mais direto é o while:

var i = 0;
while (i < 5) {
  print(i);
  i = i + 1;
}

Saída:

0
1
2
3
4

O loop executa enquanto a condição (i < 5) for verdadeira. A cada iteração, i aumenta de 1. Quando i chega a 5, a condição vira falsa, e o loop para.

Atenção ao loop infinito. Se você esquecer de aumentar i, ele fica sempre 0, e o programa imprime 0 para sempre. Para parar manualmente, aperte Ctrl+C no terminal. Sempre garanta que a condição vai eventualmente virar falsa.

O for é uma forma mais compacta de fazer o mesmo:

for (var i = 0; i < 5; i = i + 1) {
  print(i);
}

Tem três partes: inicialização (var i = 0), condição (i < 5), e o que fazer a cada iteração (i = i + 1). Resultado idêntico ao while acima, escrito mais conciso.

Função - bloco com nome

Imagine uma receita arquivada. Você abre o caderno, lê os passos, faz o bolo. Quando precisa de outro bolo, abre a mesma receita - não reescreve do zero. Função é receita arquivada do código.

Exemplo:

int dobrar(int x) {
  return x * 2;
}

void main() {
  print(dobrar(7));    // imprime 14
  print(dobrar(15));   // imprime 30
  print(dobrar(100));  // imprime 200
}

Estrutura da função dobrar:

  • int - tipo do que a função vai devolver (um número inteiro).
  • dobrar - nome da função. Escolha você.
  • (int x) - parâmetro. A função vai receber um int e chamar de x enquanto estiver rodando.
  • return x * 2; - o resultado da função. Quem chama a função recebe esse valor de volta.

Funções servem para encapsular operações que você usa várias vezes. Em vez de escrever x * 2 em três lugares diferentes, você escreve uma vez na função e chama a função em três lugares. Se um dia decidir que dobrar deve ser x * 2 + 1, muda só na função.

Combinando os quatro

Cinco linhas, quatro conceitos juntos. Um “adivinhe o número” simplificado:

import 'dart:math';

int rolarDado() {
  return 1 + Random().nextInt(6);  // sorteia 1..6
}

void main() {
  var sorteado = rolarDado();
  var palpite = 4;

  if (palpite == sorteado) {
    print('Acertou! O dado caiu em $palpite.');
  } else {
    print('Errou. Caiu $sorteado, não $palpite.');
  }
}

Cinco conceitos em ação:

  • Função (rolarDado) que devolve um inteiro
  • Variáveis (sorteado, palpite)
  • Condicional (if/else)
  • Comparação (==)
  • Interpolação de string ($palpite dentro da string)

Não é jogo ainda. Mas é programa de verdade. O livro principal vai expandir cada um desses conceitos por capítulos inteiros. Aqui, só queremos garantir que você reconhece os quatro pilares quando aparecerem.

$ masmorra_ascii — terminal interativo
Bem-vindo. Digite help para ver os comandos. Esc para sair.
$