Pular para o conteúdo

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 version

A saída confirma a versão instalada:

saída
DataForge v1.0.0
Python 3.12.x

O 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.df
saída
Ola, mundo!
contando: 1
contando: 2
contando: 3

Lendo o código#

Quatro coisas acontecem nesse programa, e todas seguem o vocabulário da linguagem:

LinhaO 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çãoBlocos 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.33

A linha de comando#

O dataforge faz mais do que executar. Estes são os comandos do dia a dia:

ComandoO que faz
dataforge run arquivo.dfExecuta 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.df
exemplo 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

Para onde ir agora#