petcarescript
Version:
PetCareScript - A modern, expressive programming language designed for humans
326 lines (258 loc) • 8 kB
Markdown
// Conectar ao banco SQLite
store db = connect("myapp.sqlite");
await db.connect();
// Criar tabelas
await db.createTable("users", {
id: types.PRIMARY_KEY,
name: types.TEXT + " NOT NULL",
email: types.TEXT + " UNIQUE NOT NULL",
age: types.INTEGER,
created_at: types.TIMESTAMP
});
await db.createTable("posts", {
id: types.PRIMARY_KEY,
user_id: types.INTEGER + " NOT NULL",
title: types.TEXT + " NOT NULL",
content: types.TEXT,
published: types.BOOLEAN + " DEFAULT 0",
created_at: types.TIMESTAMP
});
// CREATE - Inserir dados
store newUser = await db.insert("users", {
name: "João Silva",
email: "joao@example.com",
age: 30
});
show "Usuário criado com ID: " + newUser.lastID;
// READ - Consultar dados
store allUsers = await db.select("users");
store specificUser = await db.select("users", { email: "joao@example.com" });
// UPDATE - Atualizar dados
await db.update("users",
{ age: 31 },
{ email: "joao@example.com" }
);
// DELETE - Deletar dados
await db.delete("users", { id: 1 });
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Parse errors: Unexpected token: connect
❌ Error: Parse errors: Unexpected token: connect
// Usar transações para operações atômicas
await db.transaction(async build(db) {
// Criar usuário
store userResult = await db.insert("users", {
name: "Ana Costa",
email: "ana@example.com",
age: 28
});
// Criar post para este usuário
await db.insert("posts", {
user_id: userResult.lastID,
title: "Meu primeiro post",
content: "Olá mundo!",
published: 1
});
show "Usuário e post criados com sucesso!";
});
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Undefined variable 'db'.
❌ Error: Undefined variable 'db'.
// Conectar ao banco SQLite
store db = connect("myapp.sqlite");
await db.connect();
// Migrations
store migrations = [
createMigration("001_add_user_profile", async build(db) {
await db.run("ALTER TABLE users ADD COLUMN bio TEXT");
await db.run("ALTER TABLE users ADD COLUMN avatar TEXT");
}),
createMigration("002_create_comments", async build(db) {
await db.createTable("comments", {
id: types.PRIMARY_KEY,
post_id: types.INTEGER + " NOT NULL",
user_id: types.INTEGER + " NOT NULL",
content: types.TEXT + " NOT NULL",
created_at: types.TIMESTAMP
});
})
];
await db.migrate(migrations);
// Seeds
store seeds = [
createSeed("users_seed", async build(db) {
store sampleUsers = [
{ name: "João", email: "joao@example.com", age: 30 },
{ name: "Maria", email: "maria@example.com", age: 25 }
];
foreach (userData in sampleUsers) {
await db.insert("users", userData);
}
})
];
await db.seed(seeds);
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Parse errors: Unexpected token: connect
❌ Error: Parse errors: Unexpected token: connect
---
// math-utils.pcs
export build fibonacci(n) {
when (n <= 1) {
give n;
}
give fibonacci(n - 1) + fibonacci(n - 2);
}
export build isPrime(n) {
when (n < 2) give no;
loop (store i = 2; i <= sqrt(n); i = i + 1) {
when (n % i == 0) give no;
}
give yes;
}
export store PI = 3.14159;
// main.pcs
import { fibonacci, isPrime, PI } from "./math-utils";
show "Fibonacci(10): " + fibonacci(10);
show "É 17 primo? " + isPrime(17);
show "PI: " + PI;
Nao consigo importar o arquivo
----
// utils.pcs
module StringUtils {
export build reverse(str) {
give str.split("").reverse().join("");
}
export build capitalize(str) {
give str.charAt(0).toUpperCase() + str.slice(1);
}
}
module ArrayUtils {
export build unique(arr) {
store result = [];
foreach (item in arr) {
when (!contains(result, item)) {
push(result, item);
}
}
give result;
}
}
// main.pcs
use StringUtils from "./utils";
use ArrayUtils from "./utils";
store reversed = StringUtils.reverse("hello");
store capitalized = StringUtils.capitalize("world");
store uniqueItems = ArrayUtils.unique([1, 2, 2, 3, 3, 4]);
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Parse errors: Unexpected token: contains
❌ Error: Parse errors: Unexpected token: contains
---
store value = 10;
store text = "Hello World";
store numbers = [1, 2, 3, 4, 5];
// Operadores 'is' e 'isnt'
when (value is 10) {
show "Valor é exatamente 10";
}
when (value isnt 20) {
show "Valor não é 20";
}
// Operador 'between'
when (value between 5 and 15) {
show "Valor está entre 5 e 15";
}
// Operador 'contains'
when (text contains "World") {
show "Texto contém 'World'";
}
// Operador 'in'
when (3 in numbers) {
show "3 está no array";
}
// Operador 'like' (pattern matching)
when (text like "Hello*") {
show "Texto começa com 'Hello'";
}
when (text like "*World") {
show "Texto termina com 'World'";
}
// Operadores lógicos alternativos
when (value > 5 and value < 15) {
show "Valor está no intervalo (usando 'and')";
}
when (value < 5 or value > 15) {
show "Valor está fora do intervalo (usando 'or')";
}
when (not (value > 20)) {
show "Valor não é maior que 20 (usando 'not')";
}
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
Valor é exatamente 10
Valor não é 20
❌ Runtime Error: Unknown binary operator: BETWEEN
❌ Error: Unknown binary operator: BETWEEN
----
store users = ["Ana", "João", "Maria"];
store emails = ["ana@email.com", "joao@email.com"];
// Verificações em arrays
when ("João" in users) {
show "João está na lista de usuários";
}
// Verificações de padrão
foreach (email in emails) {
when (email like "*@email.com") {
show email + " é um email válido";
}
}
// Combinações complexas
store age = 25;
store hasLicense = yes;
when (age between 18 and 65 and hasLicense) {
show "Pode dirigir veículos comerciais";
}
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
João está na lista de usuários
❌ Runtime Error: Unknown binary operator: LIKE
❌ Error: Unknown binary operator: LIKE
---
store user = { name: "João", age: 30, city: "SP" };
// Propriedades
store keys = Object.keys(user); // ["name", "age", "city"]
store values = Object.values(user); // ["João", 30, "SP"]
store entries = Object.entries(user); // [["name", "João"], ...]
// Verificação
show hasProperty(user, "name"); // yes
show hasProperty(user, "email"); // no
// Clonagem
store copy = Object.assign({}, user);
store deepCopy = JSON.parse(JSON.stringify(user));
// Mesclagem
store defaults = { theme: "dark", lang: "pt" };
store settings = Object.assign(defaults, user);
node index.js teste-hello-world.pcs
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Undefined variable 'Object'.
❌ Error: Undefined variable 'Object'.
---
// Delay e timing
await delay(1000); // Espera 1 segundo
await sleep(500); // Alias para delay
// Timeout
store result = await timeout(longOperation(), 5000); // 5s timeout
// Retry
store result = await retry(unreliableOperation, 3, 1000);
// Parallel/Series
store results = await parallel([task1(), task2(), task3()]);
store results = await series([task1, task2, task3]);
// Throttle e Debounce
store throttled = throttle(expensiveFunction, 1000);
store debounced = debounce(searchFunction, 300);
🚀 Executing teste-hello-world.pcs...
❌ Runtime Error: Parse errors: Unexpected token: timeout
❌ Error: Parse errors: Unexpected token: timeout
cliente-Pro-de-Estevam petcarescript-lang