Primeiros passos
Instale o DataForge, escreva seu primeiro programa e conheça a linha de comando.
Instalar#
DataForge precisa de Python 3.10 ou superior. Nada além disso — o runtime não tem dependências externas.
bash
git clone https://github.com/estevam5s/DataForge.git
cd DataForge
python3 -m venv .venv && source .venv/bin/activate
pip install .
dataforge versionA saída confirma a versão instalada:
saída
DataForge v1.0.0
Python 3.12.xO primeiro programa#
Crie um arquivo ola.df:
ola.df
// ola.df — o primeiro programa
nome := "mundo"
out $"Ola, {nome}!"
cycle i from 1 to 3:
out $"contando: {i}"Execute:
bash
dataforge run ola.dfsaída
Ola, mundo!
contando: 1
contando: 2
contando: 3Lendo o código#
Quatro coisas acontecem nesse programa, e todas seguem o vocabulário da linguagem:
| Linha | O que faz |
|---|---|
nome := "mundo" | := atribui. Cria a variável se não existir. |
out $"..." | out imprime. O prefixo $ liga a interpolação de {nome}. |
cycle i from 1 to 3: | cycle é o laço. O limite é inclusivo nos dois extremos. |
| indentação | Blocos abrem com : e são delimitados por 4 espaços. Tab é erro. |
Um programa com estrutura#
O próximo passo é organizar o código em ações e tipos. Este exemplo já usa quase tudo o que a linguagem tem de característico:
turma.df
record Aluno:
nome: String
nota: Number
action conceito(nota: Number) -> String:
given nota bigger_eq 9:
yield "A"
orif nota bigger_eq 7:
yield "B"
otherwise:
yield "C"
turma := [
Aluno("Ana", 9.5),
Aluno("Bruno", 7.0),
Aluno("Carla", 5.5)
]
cycle a in turma:
out $"{a.nome.pad_end(8)} {a.nota} {conceito(a.nota)}"
media := turma >> morph a: a.nota >> distill acc, n: acc + n 0
out $"\nmedia da turma: {round(media / len(turma), 2)}"saída
Ana 9.5 A
Bruno 7.0 B
Carla 5.5 C
media da turma: 7.33A linha de comando#
O dataforge faz mais do que executar. Estes são os comandos do dia a dia:
| Comando | O que faz |
|---|---|
dataforge run arquivo.df | Executa um programa |
| `dataforge check` | Análise estática: nomes, aridade, tipos — antes de executar |
| `dataforge test` | Descobre e roda *_test.df e tests/ |
| `dataforge fmt` | Formata o código |
| `dataforge lint` | Aponta problemas de estilo |
| `dataforge repl` | Console interativo |
| `dataforge init` | Cria um projeto novo |
Verifique antes de rodar#
O check encontra erros sem executar uma linha:
bash
dataforge check turma.dfexemplo de saída
turma.df:9:11: erro: Parameter 'nota' of 'conceito' expects Number but got String
sugestão: Pass a Number
turma.df:14:5: erro: Undefined action 'Alunoo'
sugestão: Did you mean 'Aluno'?Um projeto de verdade#
Para algo além de um arquivo solto, o init cria a estrutura:
bash
dataforge init meu-app
cd meu-app
dataforge run # usa a entrada declarada no forge.toml
dataforge test # roda tests/O que ele gera:
text
meu-app/
forge.toml manifesto: nome, versão, entrada, scripts
src/main.df o programa
tests/principal_test.df os testes