# NATURAL

NATURAL é uma linguagem de programação de Quarta Geração, uma geração após o Cobol, desenvolvida e distribuída pela Software AG no Brasil. É considerada Quarta Geração por trazer diversos comandos de controle automático do fluxo do programa, além de editor de tela de fácil uso, programação de eventos, dentre outras funcionalidades. É formado por dois componentes principais: o Sistema e a Linguagem.
O sistema é o veículo central de comunicação entre o usuário e todos os outros componentes do ambiente de processamento. As várias versões existentes permitem sua instalação em diversos equipamentos e sistemas operacionais.
A linguagem é estruturada e menos procedural que as linguagens convencionais.
Os objetos Natural (programas, mapas, áreas de dados, etc.) são armazenados em bibliotecas (“Libraries”), com estrutura parecida com o diretório DOS e podem ter 8 caracteres como nome máximo. Mesmo sendo objetos de diferentes tipos, não podem possuir o mesmo nome. Permite execução on-line e batch e utilitário de testes de programação.
NATURAL possui versões para MVS, UNIX, OS/2 e Windows. Pertence ao Paradigma Imperativo onde é utilizada a Programação imperativa, para saber mais sobre paradigmas de programação visite: Paradigma de programação.

## Características

Algumas características do Natural são:
* Linguagem de programação com acesso a diversos bancos de dados: ADABAS (Hierárquico e relacional), Oracle, DB2, etc.;
* Utiliza diversos editores para criar programas, funções, telas pré-formatadas e áreas de dados;
* Permite uma programação modular;
* Utiliza funções e variáveis do sistema;
* Permite execução on-line e batch;
* Possui utilitário de testes de programação;
* Possui utilitário de criação/manutenção de mensagens de erros de aplicação;
* Qualquer aplicação pode ser facilmente portada para várias outras plataformas.
Os objetos Natural (programas, mapas, áreas de dados, etc.) são armazenados em bibliotecas (“Libraries”), com estrutura parecida com o diretório DOS e podem ter 8 caracteres como nome máximo. Mesmo sendo objetos de diferentes tipos, não podem possuir o mesmo nome.

## Principais Vantagens

As principais vantagens do NATURAL em relação às linguagens tradicionais são:
* facilidade de acesso a Banco de Dados (ADABAS, DB2, ORACLE, etc..);
* velocidade de programação;
* dinamismo em testes e manutenção de programas; e
* menor preocupação com os demais recursos da instalação.
Diz-se "linguagem de IV geração" por possuir diversas vantagens de automatização de rotinas em relação às chamadas "III geração" (COBOL, PL/I, etc): editor de telas amigável, muito superior ao CICS; eventos (o que certamente ajudou a inspirar VB, Delphi etc.) e muitas outras inovações para a sua época. A linguagem NATURAL possui diversos controles automáticos que facilitam o controle do programa através de blocos de código acionados automaticamente. Exemplo:
Este bloco de código será sempre executado todas as vezes que o ponteiro de leitura alcançar o último registro selecionado, não sendo necessário que o programador se preocupe em que parte do programa este código será escrito (contanto que esteja dentro do LOOP de leitura).
Tal como o bloco no exemplo, o NATURAL possui outros que são ativados em diversas situações: no início da leitura; na quebra de seqüência da classificação da chave; antes da quebra; depois da quebra etc. Além destas características, a linguagem possui diversas outras que fizeram e fazem do NATURAL uma grande linguagem de programação.

## Componentes

O Natural tem os seguintes componentes principais:
* Núcleo - executa os comandos e instruções e gerência os demais componentes;
* Compilador - de execução interativa;
* System File - arquivo ADABAS de suporte ao Natural.
* Módulos de interface:
** Com o Sistema Operacional - executa todos os comandos de entrada/saída e demais comunicações;
** Com o monitor de TP - gerência todos os recursos necessários à aplicação;
** Com o ADABAS - executa todos os comandos ADABAS e controla vários processos de acessos/atualizações.

### Tipos

Tem tipagem Forte, Estática e Explicita.
| Formato | Código | Tamanho Máximo | Observação |
| Alfanumérico | A | 253 | |
| Numérico | N | 27 | Máximo de 7 decimais |
| Compactado | P | 27 | Máximo de 7 decimais |
| Inteiro | I | 1, 2 ou 4 | I1 – valores de -128 até 127 |
| | | | I2 – valores de -32768 até 32767 |
| | | | I4 – valores de -2147483648 até +2147483647 |
| Data | D | | |
| Hora | T | | |
| Lógico | L | | TRUE ou FALSE |
| Binário | B | 126 | |
| Controle | C | | Atributo de controle de mapas |
| Ponto Flutuante | F | 4, 8 | |

### System File

O System File é um arquivo ADABAS reservado para uso do Natural, que contém:
* Todos os programas Natural, tanto em formato fonte (programas) como em formato objeto (compilado), agrupados em bibliotecas;
* Os módulos de definição de arquivos, ou DDM’s (Data Definition Modules), com a definição para o Natural dos arquivos ADABAS e suas userviews;
* As mensagens de erro do Natural;
* Os textos da função “Help”.

### Programas

Os programas Natural, fontes e objetos são identificados por nomes com formação igual aos nomes das bibliotecas, ou seja, até 8 caracteres, sendo o primeiro alfabético. Fontes e objetos podem (mas não devem) ter nomes diferentes.
Os programas fontes são formados por linhas de até 72 posições, numeradas por 4 dígitos. Esta numeração é gerada pelo Natural durante a criação do programa e é usada pelo Compilador e Editores, e tem importantes funções lógicas dos programas.
Dentro das linhas, a disposição das instruções (statements ou comandos de programas) é livre, não havendo instruções nem parâmetros posicionais. Os comentários podem ser incluídos de duas formas:
* Caracter “*” ou “**” : toda linha que for iniciada com estes caracteres será considerada comentário (* todo o conteúdo da linha é um comentário);
* Sequência de Caracteres “/*” : tudo que estiver à direita será considerada um comentário (/* tudo a direita, será comentário);
Exemplo:
As instruções “END” ou “ . “ indicam fim de programa.

### Interface Natural

Ao entrar no Natural, nos é apresentada a seguinte tela:

## Compiladores

Aqui tem um exemplo: AG Natural 6.3
* http://www.softwareag.com/Corporate/products/natural/download/default.asp Em falta ou vazio |título= (ajuda)

## Exemplos

Um exemplo de código de um "Hello, World!"
Um exemplo de código com a implementação de um programa nessa linguagem que encontre os quatro primeiros números perfeitos: