$ masmorra_ascii

Item 02 de 10

2. O que é uma linguagem de programação

Linguagens vs línguas humanas

Uma linguagem de programação tem as mesmas três camadas de uma língua humana:

  • Vocabulário - as palavras-chave da linguagem. Em Dart: var, if, for, class, return, void, final. Cerca de 60 palavras no total. Você não decora todas; você reconhece quando aparecem.
  • Gramática (sintaxe) - como combinar essas palavras. “Toda função abre e fecha chaves.” “Toda declaração termina em ponto-e-vírgula.” “Strings vivem entre aspas.”
  • Estilo (idiomas) - o jeito mais natural de escrever certas coisas. Em Dart, o estilo é declarar variáveis com var quando o tipo for óbvio, e nomear funções em camelCase.

A diferença com línguas humanas é o nível de tolerância. Português aceita “vou na padaria” mesmo sendo gramaticalmente discutível. Código não aceita um ponto-e-vírgula faltando no fim de uma linha. O compilador para tudo e te informa o que falta. Parece chato; na verdade é ajuda - você sempre sabe exatamente onde está o problema.

Compilada vs interpretada

Existem dois jeitos principais de uma linguagem rodar:

  • Compilada (Dart, C, Go, Rust): você escreve o código, um programa chamado compilador traduz tudo para instruções da máquina antes de rodar, e só depois o programa executa. Resultado: rápido. Custo: precisa compilar a cada mudança (no Dart é instantâneo, mas em C pode demorar).
  • Interpretada (Python, JavaScript - sem Node, Ruby): você escreve o código, e um programa chamado interpretador lê linha por linha e executa na hora, sem traduzir antes. Resultado: rápido para começar. Custo: mais lento ao rodar.

Dart é compilada quando o jogo termina (modo AOT - Ahead Of Time), e interpretada quando você está desenvolvendo (modo JIT - Just In Time). O melhor dos dois mundos: rápido para iterar enquanto escreve, rápido para o jogador quando o jogo está pronto.

Para os 37 capítulos do livro, isso quase não importa. Você vai usar dart run, que cuida disso por você.

Tipada vs não tipada

Outra divisão importante: como a linguagem trata os tipos dos dados (número, texto, lista, etc.).

  • Tipada (Dart, Java, C#, Go, Rust, TypeScript): você declara que idade é número, e o compilador para tudo se você tentar atribuir texto. Erros aparecem antes de o programa rodar.
  • Não tipada ou tipagem dinâmica (Python, JavaScript original, Ruby): a variável aceita qualquer tipo a qualquer momento. Erros só aparecem quando o programa roda e tenta usar o valor errado.

Dart é tipada com inferência. Você nem sempre precisa escrever o tipo - se você escreve var nome = 'Aragorn';, Dart deduz que nome é String. Mas se você tentar fazer nome = 42; depois, ele recusa.

A vantagem de ser tipada é que o compilador pega muitos erros antes do jogador ver. O custo é digitar um pouco mais. Para um jogo com dezenas de classes interagindo (jogador, inimigos, itens, salas), tipagem estática evita problemas que ninguém quer depurar de noite.

Por que Dart especificamente

Várias razões coincidem em Dart:

  • Sintaxe limpa - parecida com JavaScript ou Java, mas sem as ruindades de cada um.
  • Null safety poderoso - você é obrigado a tratar valores que podem ser null, e o compilador te lembra. Reduz uma classe inteira de bugs (o famoso NullPointerException).
  • Ferramentas oficiais maduras - dart analyze (analisador estático), dart format (formatador automático), dart pub (gerenciador de pacotes), dart test (testes). Tudo numa instalação só, mantido pelo Google.
  • Compila para rodar rápido - terminal, web e mobile a partir do mesmo código.
  • Porta de entrada pro Flutter - se você decidir fazer apps mobile depois, já vai falar a linguagem.

E uma razão prática: o livro principal usa Dart. Aprender outra linguagem aqui só pra depois traduzir mentalmente seria perda de tempo.

Outras linguagens, mesmas ideias

Aprender Dart não é se prender a Dart. Os conceitos que você vai pegar aqui - variável, função, condição, loop, classe, herança, mixin, async - existem em todas as linguagens grandes. A sintaxe muda; a ideia não.

ConceitoDartPythonJavaScriptJava
Variávelvar nome = 'X';nome = 'X'let nome = 'X';String nome = "X";
Funçãovoid f() { }def f():function f() { }void f() { }
Condicionalif (a > b) { }if a > b:if (a > b) { }if (a > b) { }

Investir tempo em Dart agora é investir em programar em geral. Você não está aprendendo um produto; está aprendendo uma forma de pensar que se aplica em qualquer linguagem por décadas.

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