Feng,Clareza por design
Feng ajuda desenvolvedores e IA a escrever código claro, confiável e fácil de manter
- Amigável à IA
- Contratos explícitos
- Tipagem estática
- Memória gerenciada
- Compilada
- Multiplataforma
Instalação rápida
Copie o comando e execute-o no terminal
module app;
import std.io;
// main é o único ponto de entrada de um programa executável
func main(args: string[]) {
println("Hello, world!");
println("你好,世界!");
println("¡Hola, mundo!");
println("Olá, mundo!");
println("こんにちは、世界!");
println("Привет, мир!");
println("Hallo, Welt!");
println("Bonjour le monde !");
}
module app;
// type organiza dados e comportamento em um tipo estático
type User {
// campos let são somente leitura; campos var podem ser alterados
let name: string;
let email: string;
var active: bool;
// Métodos acessam a instância atual por meio de self
func greeting(): string {
return "Olá, " + self.name;
}
}
module app;
// Um contrato de objeto declara o comportamento exigido
spec Named {
func name(): string;
}
spec Persistable {
func save(): void;
}
// Um contrato de função declara a assinatura completa de um valor chamável
spec Formatter(value: string): string;
// Um contrato de união aceita valores de vários tipos candidatos
spec Identifier: int | string;
// Um contrato de interseção exige todos os contratos membros
spec Entity: Named & Persistable;
type User {
let username: string;
}
// fit satisfaz contratos de objeto sem alterar a declaração do tipo
fit User: Named, Persistable {
func name(): string {
return self.username;
}
func save(): void {
}
}
module app;
import std.io;
// T torna a lógica reutilizável sem perder a tipagem estática
func identity<T>(value: T): T {
return value;
}
func main(args: string[]) {
let language = identity("Feng");
println("Olá, {0}!", language);
}
module app;
func calculate_total(): int {
var total = 0;
// Um laço for de três partes serve para um intervalo de contagem definido
for var i = 1; i <= 3; i += 1 {
total += i;
}
// for/in percorre os elementos do array em ordem
let values = [4, 5, 6];
for let value in values {
total += value;
}
// while verifica novamente a condição antes de cada iteração
var remaining = 2;
while remaining > 0 {
total += remaining;
remaining -= 1;
}
return total;
}
module app;
func evaluate(score: int): string {
var status = "";
// Uma instrução if/else executa ações diferentes conforme a condição
if score >= 60 {
status = "Aprovado";
} else {
status = "Reprovado";
}
// Uma expressão if produz diretamente um valor para vincular
let level = if score >= 90 {
"Excelente"
} else if score >= 60 {
"Aprovado"
} else {
"Precisa melhorar"
};
return status + ": " + level;
}
module app;
func describe(code: int): string {
var detail = "";
// Uma instrução match executa o primeiro ramo correspondente
match code {
200 { detail = "Solicitação concluída"; }
404 { detail = "Recurso não encontrado"; }
else { detail = "Status desconhecido"; }
}
// Uma expressão match retorna o valor do ramo correspondente
let category = match code {
200...299 { "Sucesso" }
400...499 { "Erro do cliente" }
else { "Outro" }
};
return category + ": " + detail;
}
module app;
import std.io;
func require_port(port: int): int {
if port <= 0 {
// throw encerra o caminho atual e passa uma exceção ao chamador
throw "A porta deve ser positiva";
}
return port;
}
func main(args: string[]) {
// A forma de instrução executa ações ao tratar uma exceção
try require_port(-1) catch error: string {
println(error);
};
// A forma de expressão pode fornecer um valor alternativo em caso de exceção
let port = try require_port(-1) catch error: string {
println(error);
3000
};
println("Usando a porta: {0}", port);
}