limitations

Limitações do Módulo Portuguese / Portuguese Module Limitations

English | Português

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, elevado

  • Comparison: igual, diferente, maior, menor, maior_igual, menor_igual

  • Logical: e, ou, não

  • String: concatenar, repetir_texto

  • Range: até_, antes_de

  • Assignment: 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:

  1. Change reserved keywords

  2. Modify declaration syntax

  3. 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, elevado

  • Comparação: igual, diferente, maior, menor, maior_igual, menor_igual

  • Lógicos: e, ou, não

  • String: concatenar, repetir_texto

  • Intervalo: até_, antes_de

  • Atribuiçã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:

  1. Alterar palavras-chave reservadas

  2. Modificar sintaxe de declaração

  3. 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

Portuguese v0.0.1

Portuguese language support for Raku - Suporte para língua portuguesa no Raku

Authors

  • Danslav Slavenskoj

License

Artistic-2.0

Dependencies

Test Dependencies

Provides

  • Portuguese
  • Português

Documentation

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.