Introdução ao Jech

Jech é uma linguagem de programação educacional, projetada para ser simples, intuitiva e fácil de aprender. O principal objetivo do projeto é servir como base para o estudo de como compiladores, interpretadores e máquinas virtuais funcionam.

O nome "Jech" é um jogo com as iniciais de seus conceitos fundamentais e do seu criador. Ela é implementada inteiramente em C e pode ser executada tanto nativamente quanto no navegador via WebAssembly.

📖 História do JECH

O Jech começou como uma curiosidade minha: eu queria entender como uma linguagem de programação é feita e como ela funciona por baixo dos panos.

Com isso, veio a ideia de abrir esse processo ao público, criando uma documentação onde pessoas com pouco conhecimento em C, compiladores e interpretadores possam acompanhar e entender como tudo funciona.

O nome JECH vem das iniciais dos meus filhos: Jonathan Edwards e Charles Haddon.

🚀 Instalação

Atualmente, a maneira mais fácil de experimentar Jech é através do nosso Playground Online. Nenhuma instalação é necessária!

Para rodar localmente, você precisará compilar o código fonte. No futuro, disponibilizaremos binários para os principais sistemas operacionais.

git clone https://github.com/joaoluke/jech
cd jech
make
./jech seu_arquivo.jc

🎨 Tipos de Dados

Jech suporta quatro tipos principais de dados. Vamos explorar cada um em detalhes:

1. Números (Numbers)

Jech trabalha com números inteiros e decimais. Não há distinção entre int e float.

// Números inteiros
keep age = 25;
keep quantity = 100;

// Números decimais
keep price = 19.99;
keep pi = 3.14;

2. Strings (Texto)

Strings são sequências de caracteres delimitadas por aspas duplas.

keep greeting = "Olá, Mundo!";
keep name = "Jech";

3. Booleanos (true/false)

keep isOnline = true;
keep hasPermission = false;

4. Arrays (Listas)

keep numbers = [1, 2, 3, 4, 5];
keep names = ["Ana", "Bruno", "Carlos"];

🔢 Operadores Aritméticos

Jech suporta as quatro operações matemáticas básicas.

keep sum = 5 + 3;      // Adição → 8
keep diff = 20 - 8;    // Subtração → 12
keep prod = 4 * 5;     // Multiplicação → 20
keep quot = 100 / 4;   // Divisão → 25

🔀 Condicionais (when/else)

Condicionais permitem que seu programa tome decisões baseado em condições.

Operadores de Comparação

x == y    // Igual a
x != y    // Diferente de
x > y     // Maior que
x < y     // Menor que
x >= y    // Maior ou igual a
x <= y    // Menor ou igual a

when/else

keep age = 16;

when (age >= 18) {
    say("Você pode votar");
}
else {
    say("Muito jovem para votar");
}

Múltiplas Condições (else when)

keep grade = 85;

when (grade >= 90) {
    say("Nota A");
}
else when (grade >= 80) {
    say("Nota B");
}
else {
    say("Reprovado");
}

📋 Arrays

Arrays são coleções ordenadas de valores indexadas a partir de 0.

Acessando Elementos

keep fruits = ["Maçã", "Banana", "Uva"];
say(fruits[0]);  // Exibe: Maçã
say(fruits[1]);  // Exibe: Banana

Modificando Elementos

keep list = [10, 20, 30];
list[1] = 99;
say(list);  // Exibe: [10, 99, 30]

Método map

keep numbers = [1, 2, 3, 4, 5];
keep doubled = numbers.map(* 2);
say(doubled);  // Exibe: [2, 4, 6, 8, 10]

🛠️ Funções (do)

Funções permitem agrupar código para reutilização. Em Jech, usamos a palavra-chave do.

Função Simples

do sayHello() {
    say("Olá de dentro da função!");
}
sayHello();

Função com Parâmetros

do greet(name) {
    say("Olá, " + name + "!");
}
greet("Alice");  // Exibe: Olá, Alice!

Função com Retorno

do double(n) {
    return n * 2;
}
keep res = double(10);
say(res);  // Exibe: 20

🎯 Exemplos Práticos

1. Sistema de Autenticação

keep username = "admin";
keep isAuth = false;

when (username == "admin") {
    isAuth = true;
    say("Usuário válido");
}
else {
    say("Usuário desconhecido");
}

when (isAuth) {
    say("Bem-vindo ao sistema!");
}

2. Calculadora de Área

do calculateArea(width, height) {
    keep area = width * height;
    say("A área é: " + area);
}

calculateArea(5, 10);  // Exibe: A área é: 50

3. Carrinho de Compras

keep products = [100, 250, 50];
keep subtotal = products[0] + products[1] + products[2];
keep final = subtotal * 1.1;
say("Total com impostos: R$ " + final);

💡 Dica: Todos estes exemplos estão prontos para executar! Copie e cole no playground para ver como funcionam na prática.

⚠️ Importante: Jech está em desenvolvimento ativo. Algumas funcionalidades podem mudar em versões futuras.

Pronto para começar?

Teste seus conhecimentos no playground interativo!

Abrir Playground