limitations
Limitações do Módulo Portuguese / Portuguese Module Limitations
English
Summary
This module provides Portuguese functions and operators for Raku, but cannot modify the fundamental language syntax due to current Raku limitations (issue #2404).
What Works
✅ Translated Functions
Over 200 functions translated to Portuguese
All math, string, list, I/O, file, date/time functions
Examples:
dizer "Olá!"; # say "Hello!" my $soma = soma([1,2,3,4,5]); # sum([1,2,3,4,5]) my $texto = maiúsculas("olá"); # uc("hello")
✅ Custom Operators
Arithmetic:
mais,menos,vezes,dividido,mod,elevadoComparison:
igual,diferente,maior,menor,maior_igual,menor_igualLogical:
e,ou,nãoString:
concatenar,repetir_textoRange:
até_,antes_deAssignment:
mais_igual,menos_igual,vezes_igual,dividido_igual
Important Note: Operators require parentheses for precedence:
# Correct
my $resultado = (5 mais 3 vezes 2); # (5+3)*2 = 16
my $resultado = (5 mais (3 vezes 2)); # 5+(3*2) = 11
# In conditions
if ($idade maior_igual 18) { ... }✅ Constants
verdadeiro # True
falso # False
nulo # Nil
infinito # Inf
não_número # NaN
pi # 3.14159...
número_de_euler # 2.71828...What Does NOT Work
❌ Language Keywords
Cannot translate control structures:
# Does NOT work:
se ($x > 5) { ... } # if
enquanto ($x < 10) { ... } # while
para @lista { ... } # for
# Must use original:
if ($x > 5) { ... }
while ($x < 10) { ... }
for @lista { ... }❌ Variable Declaration
# Does NOT work:
meu $variável = 5; # my
nosso $compartilhado = 10; # our
# Must use:
my $variável = 5;
our $compartilhado = 10;❌ Class and Method Syntax
# Does NOT work:
classe MinhaClasse { ... } # class
método foo() { ... } # method
# Must use:
class MinhaClasse { ... }
method foo() { ... }❌ Statement Modifiers
# Does NOT work:
dizer "Olá" se $condição; # if modifier
# Must use:
dizer "Olá" if $condição;Technical Reason
Rakudo (Raku's implementation) has issue #2404 preventing modules from fully modifying the language grammar. Slangs currently cannot:
Change reserved keywords
Modify declaration syntax
Alter core control structures
However, they CAN:
Define new functions
Create custom operators
Export symbols to namespace
Workarounds
For Control Structures
Use provided functions with blocks:
# Instead of if/while syntax
se($x > 5, { dizer "Maior" }, { dizer "Menor ou igual" });
enquanto({ $x < 10 }, {
dizer $x;
$x++;
});
para([1,2,3,4,5], -> $n {
dizer "Número: $n";
});For Better Readability
Use Portuguese comments:
# Se o usuário é maior de idade
if ($idade maior_igual 18) {
dizer "Pode votar";
}
# Para cada estudante na lista
for @estudantes -> $estudante {
dizer "Processando: $estudante";
}Português
Resumo
Este módulo fornece funções e operadores em português para Raku, mas não pode modificar a sintaxe fundamental da linguagem devido às limitações atuais do Raku (issue #2404).
O que Funciona
✅ Funções Traduzidas
Mais de 200 funções traduzidas para português
Todas as funções matemáticas, de strings, listas, E/S, arquivos, data/hora
Exemplos:
dizer "Olá!"; # say "Hello!" my $soma = soma([1,2,3,4,5]); # sum([1,2,3,4,5]) my $texto = maiúsculas("olá"); # uc("hello")
✅ Operadores Personalizados
Aritméticos:
mais,menos,vezes,dividido,mod,elevadoComparação:
igual,diferente,maior,menor,maior_igual,menor_igualLógicos:
e,ou,nãoString:
concatenar,repetir_textoIntervalo:
até_,antes_deAtribuição:
mais_igual,menos_igual,vezes_igual,dividido_igual
Nota Importante: Operadores requerem parênteses para precedência:
# Correto
my $resultado = (5 mais 3 vezes 2); # (5+3)*2 = 16
my $resultado = (5 mais (3 vezes 2)); # 5+(3*2) = 11
# Em condições
if ($idade maior_igual 18) { ... }✅ Constantes
verdadeiro # True
falso # False
nulo # Nil
infinito # Inf
não_número # NaN
pi # 3.14159...
número_de_euler # 2.71828...O que NÃO Funciona
❌ Palavras-chave da Linguagem
Não é possível traduzir estruturas de controle:
# NÃO funciona:
se ($x > 5) { ... } # if
enquanto ($x < 10) { ... } # while
para @lista { ... } # for
# Deve usar o original:
if ($x > 5) { ... }
while ($x < 10) { ... }
for @lista { ... }❌ Declaração de Variáveis
# NÃO funciona:
meu $variável = 5; # my
nosso $compartilhado = 10; # our
# Deve usar:
my $variável = 5;
our $compartilhado = 10;❌ Sintaxe de Classes e Métodos
# NÃO funciona:
classe MinhaClasse { ... } # class
método foo() { ... } # method
# Deve usar:
class MinhaClasse { ... }
method foo() { ... }❌ Modificadores de Declaração
# NÃO funciona:
dizer "Olá" se $condição; # modificador if
# Deve usar:
dizer "Olá" if $condição;Razão Técnica
Rakudo (a implementação do Raku) tem o issue #2404 que impede módulos de modificar completamente a gramática da linguagem. Slangs atualmente não podem:
Alterar palavras-chave reservadas
Modificar sintaxe de declaração
Alterar estruturas de controle fundamentais
No entanto, PODEM:
Definir novas funções
Criar operadores personalizados
Exportar símbolos para o namespace
Soluções Alternativas
Para Estruturas de Controle
Use as funções fornecidas com blocos:
# Em vez da sintaxe if/while
se($x > 5, { dizer "Maior" }, { dizer "Menor ou igual" });
enquanto({ $x < 10 }, {
dizer $x;
$x++;
});
para([1,2,3,4,5], -> $n {
dizer "Número: $n";
});Para Melhor Legibilidade
Use comentários em português:
# Se o usuário é maior de idade
if ($idade maior_igual 18) {
dizer "Pode votar";
}
# Para cada estudante na lista
for @estudantes -> $estudante {
dizer "Processando: $estudante";
}Status Futuro
Quando o issue #2404 do Rakudo for resolvido, será possível:
Traduzir todas as palavras-chave
Criar uma sintaxe completamente em português
Modificar a gramática da linguagem
Por enquanto, este módulo oferece a funcionalidade máxima possível dentro das limitações atuais.
Recomendação
Para projetos educacionais ou de aprendizagem, este módulo é excelente para:
Ensinar programação a falantes de português
Demonstrar conceitos sem a barreira do idioma
Criar exemplos mais acessíveis
Para projetos de produção, considere:
Usar comentários em português com código em inglês
Documentar extensivamente em português
Criar funções auxiliares com nomes descritivos em português