1. Variáveis — atribuição e tipagem implícita
Em REXX, você atribui um valor a uma variável simplesmente escrevendo nome = valor. Não há declaração prévia, não há tipo fixo:
Uma variável não inicializada tem como valor seu próprio nome em maiúsculo. Isso é importante saber para evitar bugs silenciosos:
⚠️ Variável não inicializada vale seu próprio nome
Este é o comportamento mais surpreendente do REXX para quem vem de outras linguagens. Se você escreve SAY X sem ter atribuído nada a X, o resultado é a string X, não um erro. Isso mascara typos — se você escrever COUNTR em vez de COUNTER, o REXX não reclama.
2. Operadores aritméticos
| Operador | Operação | Exemplo | Resultado |
|---|---|---|---|
+ | Adição | 10 + 3 | 13 |
- | Subtração | 10 - 3 | 7 |
* | Multiplicação | 10 * 3 | 30 |
/ | Divisão | 10 / 3 | 3.33333... |
% | Divisão inteira | 10 % 3 | 3 |
// | Resto (módulo) | 10 // 3 | 1 |
** | Potência | 2 ** 8 | 256 |
3. Operadores de string — concatenação
O REXX oferece três formas de concatenar strings:
🦕 Analogia — concatenação por espaço
No REXX, colocar dois tokens lado a lado com espaço entre eles já concatena com um espaço. É como se cada token fosse uma palavra numa frase — o REXX junta tudo naturalmente. Isso torna o SAY especialmente conveniente: SAY 'Olá,' NOME 'você tem' IDADE 'anos' produz uma frase bem formatada sem precisar de ||.
4. Operadores de comparação
| Operador | Significado | Alternativa |
|---|---|---|
= | Igual | == (estrito) |
\= | Diferente | \== (estrito) / <> |
< | Menor que | — |
> | Maior que | — |
<= | Menor ou igual | — |
>= | Maior ou igual | — |
A diferença entre = e == é importante: = ignora espaços à esquerda e direita e compara numericamente quando possível. == compara byte a byte, exigindo correspondência exata:
💡 Operadores lógicos
Para combinar condições, use & (AND), | (OR) e \ (NOT). Exemplo: IF A > 0 & B > 0 THEN SAY 'ambos positivos'. O REXX representa true como 1 e false como 0.
5. SAY e PULL — output e input
SAY exibe uma linha de texto. PULL lê uma linha do terminal (ou SYSTSIN em batch) e armazena em uma variável, convertendo para maiúsculo:
💡 PULL converte para maiúsculo — use PARSE PULL para preservar
PULL é um atalho para PARSE UPPER PULL — ele converte o que o usuário digitou para maiúsculo antes de armazenar. Se você precisa preservar a capitalização original (ex.: para senhas ou nomes de arquivo), use PARSE PULL VARIAVEL em vez de PULL VARIAVEL.
6. ARG — recebendo parâmetros
Quando um exec é chamado com parâmetros (EXEC MEUEXEC PARAM1 PARAM2), o ARG captura esses valores. Assim como PULL, ARG converte para maiúsculo:
Para acessar todos os parâmetros como uma string única (sem dividir por espaço), use ARG TUDO — e depois processe manualmente com funções de string como WORD() e WORDS(), que você aprenderá no artigo de funções.