Translate

Mostrar mensagens com a etiqueta TRIM. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta TRIM. Mostrar todas as mensagens

domingo, 18 de setembro de 2022

Funções Intrínsecas no Enterprise COBOL : O Superpoder Escondido da Linguagem que Todo Programador COBOL Padawan Deveria Conhecer

 

Bellacosa Mainframe e as funcoes intrinsecas no cobol

☕ Um Café no Bellacosa Mainframe

Funções Intrínsecas no Enterprise COBOL

O Superpoder Escondido da Linguagem que Todo Programador COBOL Padawan Deveria Conhecer

"Existe um momento na vida de todo Programador COBOL em que ele percebe que passou anos escrevendo dezenas de linhas de código para resolver problemas que poderiam ser solucionados com apenas uma única função. Esse momento normalmente vem quando ele descobre as Funções Intrínsecas do Enterprise COBOL."


Introdução

Todo Programador COBOL começa aprendendo praticamente o mesmo conjunto de comandos:

  • MOVE

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

  • IF

  • EVALUATE

  • PERFORM

Com eles já é possível desenvolver sistemas inteiros.

Durante muitos anos isso foi suficiente.

Entretanto, conforme os sistemas ficaram mais sofisticados, surgiu um problema.

Como calcular uma data futura?

Como descobrir o tamanho de um texto?

Como converter letras para maiúsculas?

Como obter o ano atual?

Como calcular valor absoluto?

Como descobrir o maior número entre vários?

Como manipular datas sem escrever centenas de linhas de código?

Foi justamente para resolver essas necessidades que surgiram as Funções Intrínsecas (Intrinsic Functions).

Elas representam uma das maiores evoluções da linguagem COBOL moderna.


O que são Funções Intrínsecas?

Podemos imaginar as Funções Intrínsecas como pequenas ferramentas prontas, fornecidas pelo próprio compilador.

Ao invés de escrevermos toda a lógica...

Apenas chamamos uma função.

Exemplo.

Ao invés de fazer:

Receba a data

↓

Separe dia

↓

Separe mês

↓

Separe ano

↓

Valide

↓

Calcule

Podemos simplesmente escrever:

FUNCTION CURRENT-DATE

O compilador faz todo o trabalho.


Por que elas existem?

Imagine que cem empresas precisem calcular o valor absoluto de um número.

Sem funções.

Cada equipe escreveria um algoritmo diferente.

Com funções.

Todos utilizam exatamente a mesma implementação.

Mais simples.

Mais segura.

Mais rápida.

Mais padronizada.


Como reconhecer uma Função Intrínseca?

Todas começam com a palavra:

FUNCTION

Por exemplo.

MOVE FUNCTION UPPER-CASE(WS-NOME)
    TO WS-NOME

Ou.

COMPUTE WS-IDADE =
        FUNCTION INTEGER(WS-VALOR)

Sempre que enxergar FUNCTION, provavelmente estará utilizando uma Função Intrínseca.


Os grandes grupos de funções

Embora existam dezenas de funções disponíveis no Enterprise COBOL, podemos agrupá-las em algumas categorias principais.

  • Funções Matemáticas

  • Funções Estatísticas

  • Funções de Texto

  • Funções de Datas

  • Funções Financeiras

  • Funções de Conversão

  • Funções Numéricas

  • Funções de Internacionalização

  • Funções de Manipulação de Caracteres

Organizar mentalmente essas categorias facilita muito a escolha da função adequada.


1. Funções Matemáticas

São utilizadas para cálculos.

Algumas das mais conhecidas:

  • ABS

  • SQRT

  • INTEGER

  • INTEGER-PART

  • FRACTION-PART

  • REM

  • MOD

  • EXP

  • LOG

  • LOG10


ABS

Valor absoluto.

-50

↓

50

Exemplo.

COMPUTE WS-VALOR =
        FUNCTION ABS(WS-NUMERO)

Muito útil quando não importa o sinal.


SQRT

Raiz quadrada.

81

↓

9

Sem precisar implementar Newton-Raphson ou outro algoritmo matemático.


INTEGER

Remove a parte decimal.

123.98

↓

123

Muito usado em cálculos financeiros.


2. Funções de Texto

Uma das categorias mais utilizadas.

Inclui funções como:

  • UPPER-CASE

  • LOWER-CASE

  • REVERSE

  • LENGTH

  • TRIM


UPPER-CASE

Imagine.

Bellacosa Mainframe

Resultado.

BELLACOSA MAINFRAME

Código.

MOVE FUNCTION UPPER-CASE(WS-NOME)
    TO WS-NOME

Excelente para padronização.


LOWER-CASE

O inverso.

IBM MAINFRAME

↓

ibm mainframe

LENGTH

Retorna o tamanho do dado.

COBOL

↓

5

Sem precisar contar caracteres manualmente.


TRIM

Remove espaços desnecessários.

Muito útil antes de comparar textos ou montar mensagens.


3. Funções de Datas

Provavelmente as mais importantes no ambiente corporativo.

Imagine calcular datas manualmente.

Teríamos que considerar:

  • anos bissextos;

  • meses com 28, 29, 30 ou 31 dias;

  • calendário gregoriano;

  • mudança de século.

As funções fazem isso automaticamente.


CURRENT-DATE

Obtém data e hora do sistema.

MOVE FUNCTION CURRENT-DATE
    TO WS-DATA

Retorna informações como:

  • ano;

  • mês;

  • dia;

  • hora;

  • minuto;

  • segundo;

  • frações de segundo.

É muito utilizada para auditoria, logs, trilhas de execução e identificação de transações.


INTEGER-OF-DATE

Transforma uma data em um número inteiro.

Isso facilita cálculos de diferença entre datas.


DATE-OF-INTEGER

Faz exatamente o contrário.


4. Funções Estatísticas

Pouca gente lembra delas.

Mas existem.

Exemplos.

  • MAX

  • MIN

  • MEAN

  • MEDIAN

Imagine.

12

40

9

18

Maior valor.

FUNCTION MAX(...)

Menor valor.

FUNCTION MIN(...)

Muito útil em processamento analítico.


5. Funções Financeiras

O Enterprise COBOL também oferece funções voltadas para cálculos financeiros.

Dependendo da versão do compilador e do ambiente, é possível utilizar funções relacionadas a juros, amortização e cálculos financeiros padronizados.

Embora nem todas sejam amplamente utilizadas em aplicações corporativas modernas, é importante conhecer sua existência, principalmente em projetos legados ou ambientes específicos.


6. Conversões

Outra categoria extremamente útil.

Imagine receber um número com casas decimais.

1234.987

Desejamos apenas.

1234

Basta.

FUNCTION INTEGER(...)

Sem escrever dezenas de IFs.


Um exemplo passo a passo

Imagine um cadastro.

Nome

João da Silva

Precisamos:

  • remover espaços;

  • converter para maiúsculas;

  • descobrir tamanho.

Passo 1.

FUNCTION TRIM(...)

Resultado.

João da Silva

Sem espaços extras.


Passo 2.

FUNCTION UPPER-CASE(...)

Resultado.

JOÃO DA SILVA

Passo 3.

FUNCTION LENGTH(...)

Resultado.

14

Perceba.

Cada função resolve um problema específico.

Elas podem inclusive ser combinadas para formar soluções elegantes e fáceis de manter.


Podemos combinar funções?

Sim.

Exemplo.

MOVE FUNCTION UPPER-CASE(
         FUNCTION TRIM(WS-NOME))
    TO WS-NOME

Primeiro remove espaços.

Depois converte para maiúsculas.

O resultado é obtido em uma única instrução.


Performance

Uma dúvida muito comum.

"As funções são mais lentas?"

Na enorme maioria dos casos.

Não.

Pelo contrário.

Elas fazem parte do próprio compilador.

São altamente otimizadas.

Na maioria das situações são mais rápidas e muito mais confiáveis do que algoritmos desenvolvidos manualmente.


Vantagens das Funções Intrínsecas

Entre os principais benefícios estão:

  • Menor quantidade de código.

  • Maior legibilidade.

  • Melhor manutenção.

  • Menor chance de erros.

  • Código mais padronizado.

  • Aproveitamento das otimizações do compilador.

  • Maior produtividade.

É um excelente exemplo do princípio de reutilização: em vez de reinventar uma solução, utilizamos uma implementação consolidada e amplamente testada.


Quando NÃO utilizar?

Existe apenas um cuidado.

Não utilizar funções apenas porque elas existem.

Por exemplo.

MOVE A TO B

Não precisa virar uma função.

Outro exemplo.

Somar dois números.

ADD A TO B

Continua sendo mais simples.

Funções devem resolver problemas específicos.

Não substituir comandos básicos da linguagem.


O que um Programador COBOL Padawan deve decorar?

Não é necessário memorizar todas as dezenas de funções disponíveis.

Mas vale conhecer as mais utilizadas:

✔ CURRENT-DATE

✔ LENGTH

✔ UPPER-CASE

✔ LOWER-CASE

✔ TRIM

✔ ABS

✔ INTEGER

✔ MAX

✔ MIN

✔ DATE-OF-INTEGER

✔ INTEGER-OF-DATE

Essas aparecem frequentemente em aplicações corporativas.

À medida que surgirem novas necessidades, outras funções poderão ser incorporadas naturalmente ao seu repertório.


Easter Egg Bellacosa ☕

Existe uma curiosidade interessante.

Quando um Programador COBOL Júnior escreve um algoritmo enorme para descobrir o maior valor de uma lista.

Um Programador Pleno costuma lembrar da função MAX.

Quando o Júnior implementa uma rotina inteira para converter textos para maiúsculas.

O Pleno utiliza UPPER-CASE.

Quando o Júnior cria dezenas de linhas para manipular datas.

O Sênior pergunta primeiro:

"Será que já existe uma Função Intrínseca para isso?"

Essa mudança de pensamento representa uma das maiores evoluções na carreira de um desenvolvedor.

A experiência não consiste apenas em conhecer mais comandos.

Consiste em saber que o compilador já oferece ferramentas prontas, seguras e altamente otimizadas para resolver muitos problemas comuns.


Conclusão

As Funções Intrínsecas representam um verdadeiro kit de ferramentas embutido no Enterprise COBOL. Elas simplificam cálculos, manipulação de textos, tratamento de datas, conversões e diversas outras tarefas recorrentes, permitindo que o desenvolvedor concentre seus esforços na regra de negócio em vez de reescrever algoritmos básicos.

Para um Programador COBOL Padawan, dominar esse recurso significa dar um passo importante rumo a um código mais limpo, legível e profissional. Em vez de decorar todas as funções existentes, o mais importante é compreender seus grupos, saber quando utilizá-las e criar o hábito de consultar a documentação do compilador sempre que surgir um novo desafio.

Lembre-se: um bom Programador COBOL não é aquele que escreve mais código. É aquele que conhece melhor a linguagem e utiliza seus recursos para construir soluções simples, robustas, eficientes e fáceis de manter. Afinal, no universo do IBM Mainframe, elegância e confiabilidade caminham sempre lado a lado.

quinta-feira, 1 de março de 2007

O que é Função Intrínseca em COBOL?

 

Bellacosa Mainframe e as funções intrinsecas em COBOL

O que é Função Intrínseca em COBOL?

As funções intrínsecas (Intrinsic Functions) são funções internas do COBOL que permitem realizar operações comuns sem a necessidade de criar rotinas próprias.

Elas foram introduzidas para facilitar tarefas como:

  • manipulação de datas;

  • cálculos matemáticos;

  • conversão de dados;

  • tratamento de strings;

  • operações estatísticas.

Em vez de escrever dezenas de linhas de código, você pode usar uma função pronta fornecida pelo compilador COBOL.


O que significa "intrínseca"?

Significa:

embutida na linguagem.

Ou seja, já faz parte do compilador COBOL.

Não é necessário:

  • COPY;

  • CALL;

  • subprograma;

  • biblioteca externa.


Sintaxe básica

FUNCTION nome-da-funcao(argumentos)

Exemplo:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Exemplo simples

Sem função intrínseca:

COMPUTE WS-IDADE = ANO-ATUAL - ANO-NASCIMENTO

Com função:

COMPUTE WS-RAIZ =
        FUNCTION SQRT(144)

Resultado:

12

Principais categorias

Datas e Horas

Matemáticas

Conversão de Dados

Strings

Estatísticas

Financeiras


Função CURRENT-DATE

Uma das mais usadas.

Retorna:

  • data;

  • hora;

  • milissegundos;

  • fuso horário.

Exemplo:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA-HORA

Resultado:

2026080215304500

Função LENGTH

Retorna o tamanho de um campo.

Exemplo:

COMPUTE WS-TAM =
        FUNCTION LENGTH(WS-NOME)

Função UPPER-CASE

Converte texto para maiúsculo.

MOVE FUNCTION UPPER-CASE(WS-NOME)
     TO WS-NOME-MAIUSCULO

Função LOWER-CASE

Converte texto para minúsculo.

MOVE FUNCTION LOWER-CASE(WS-NOME)
     TO WS-NOME-MINUSCULO

Função REVERSE

Inverte caracteres.

MOVE FUNCTION REVERSE("COBOL")
     TO WS-TEXTO

Resultado:

LOBOC

Função NUMVAL

Converte texto para número.

Exemplo:

MOVE FUNCTION NUMVAL("12345")
     TO WS-VALOR

Função NUMVAL-C

Converte valores monetários.

Exemplo:

MOVE FUNCTION NUMVAL-C("R$1.234,56")
     TO WS-VALOR

(Dependendo da configuração regional do compilador.)


Função INTEGER

Remove casas decimais.

COMPUTE WS-INTEIRO =
        FUNCTION INTEGER(123.99)

Resultado:

123

Função ABS

Valor absoluto.

COMPUTE WS-VALOR =
        FUNCTION ABS(-500)

Resultado:

500

Função SQRT

Raiz quadrada.

COMPUTE WS-RAIZ =
        FUNCTION SQRT(625)

Resultado:

25

Função RANDOM

Gera número aleatório.

COMPUTE WS-NUM =
        FUNCTION RANDOM

Função MOD

Retorna resto da divisão.

COMPUTE WS-RESTO =
        FUNCTION MOD(10 3)

Resultado:

1

Função MAX

Maior valor.

COMPUTE WS-MAX =
        FUNCTION MAX(10 20 30)

Resultado:

30

Função MIN

Menor valor.

COMPUTE WS-MIN =
        FUNCTION MIN(10 20 30)

Resultado:

10

Função MEAN

Média aritmética.

COMPUTE WS-MEDIA =
        FUNCTION MEAN(10 20 30)

Resultado:

20

Função ORD

Retorna código ordinal do caractere.

COMPUTE WS-COD =
        FUNCTION ORD("A")

Função CHAR

Retorna caractere de um código.

MOVE FUNCTION CHAR(65)
     TO WS-LETRA

Resultado:

A

Função TRIM

Remove espaços.

MOVE FUNCTION TRIM(WS-NOME)
     TO WS-NOME-LIMPO

Exemplo prático

WORKING-STORAGE SECTION.

01 WS-NOME          PIC X(20).
01 WS-NOME-MAIUS    PIC X(20).

PROCEDURE DIVISION.

    MOVE 'bellacosa'
         TO WS-NOME

    MOVE FUNCTION UPPER-CASE(WS-NOME)
         TO WS-NOME-MAIUS

    DISPLAY WS-NOME-MAIUS

    STOP RUN.

Saída:

BELLACOSA

Funções muito usadas em Mainframe

As mais encontradas em sistemas corporativos:

  • CURRENT-DATE

  • LENGTH

  • NUMVAL

  • NUMVAL-C

  • UPPER-CASE

  • LOWER-CASE

  • TRIM

  • INTEGER

  • MOD

  • ABS


Vantagens

Menos código

Mais legibilidade

Melhor manutenção

Menos rotinas auxiliares

Melhor produtividade


Cuidados

Nem todas as funções estão disponíveis em compiladores muito antigos.

Alguns ambientes COBOL legados podem não suportar:

  • TRIM

  • UPPER-CASE

  • LOWER-CASE

  • funções estatísticas mais modernas


Curiosidade

Antes das funções intrínsecas, tarefas simples exigiam dezenas de linhas de código COBOL.

Converter um texto para maiúsculo, por exemplo, frequentemente exigia tabelas de tradução e loops complexos.

As funções intrínsecas simplificaram enormemente o desenvolvimento COBOL moderno.


Resumo rápido

FunçãoFinalidade
CURRENT-DATEData e hora atual
LENGTHTamanho do campo
UPPER-CASEMaiúsculas
LOWER-CASEMinúsculas
TRIMRemove espaços
NUMVALTexto → Número
ABSValor absoluto
SQRTRaiz quadrada
MODResto da divisão
MAXMaior valor
MINMenor valor
RANDOMNúmero aleatório

Conclusão

As funções intrínsecas são recursos nativos do COBOL que simplificam cálculos, manipulação de dados, datas e strings. Elas tornam os programas mais legíveis, reduzem a quantidade de código e são amplamente utilizadas em aplicações modernas de COBOL no ambiente mainframe IBM Z.