Pour les articles homonymes, voirNatural (homonymie).
Natural est unlangage de programmation de quatrième génération semi-compilé, édité par la société allemandeSoftware AG.
Sa syntaxe est fortement inspirée de celle deCobol : on y retrouve des instructions telles quemove,perform,compute, ainsi que des principes tels que la redéfinition de données ou la possibilité de définir le scope d'une variable. Néanmoins, cette syntaxe reste assez simple et beaucoup moins verbeuse que Cobol :
L'intérêt d'un langage semi-compilé est saportabilité sur différents systèmes (mainframe,Unix,Windows, etc.) ; en effet il suffit de porter le « RunTime Natural » sur une plateforme pour pouvoir y exécuter des programmes Natural originellement créés sur une autre plateforme (c'est le même principe que celui deJava avec les portages desJVM).
Ce langage fut créé au départ pour permettre l'accès auxbases de donnéesAdabas (du même éditeur). Il s'est rapidement enrichi pour pouvoir supporter des bases de données relationnelles commeDB2 ou non relationnelles comme DL1,VSAM.Il est surtout utilisé dans l'industrie et les sociétés de grande taille, car la base Adabas est supportée non seulement sur des plateformes comme Unix ou Windows mais surtout sur de gros systèmes autorisant une gestion d'I/O massive.
Les instructions d'accès ausystème de gestion de base de données (SGBD) sont fonctionnelles (elles masquent les requêtes physiques et l'organisation des données) : chaque instruction d'accès à une table de la base se présente sous forme d'une boucle de lecture suivant une clé simple ou composée.
Par exemple, la lecture se présente sous la forme de deux mots-clefs.
READ Table (Accès à la table → Début boucle de lecture) instruction(s).... sur l'enregistrement gestion de sortie de la boucle de lecture souvent à la discrétion du programmeurEND-READ (Marqueur de fin de boucle)
Le langage dispose d'extension permettant également le codage des accès sous forme de requêtesSQL.
DEFINE DATA PARAMETER /* paragraphe de déclaration des paramètres du programme1 PARAM1 (A001) /* alphanumérique1 PARAM2 (N004) /* NumériqueLOCAL /* paragraphe de déclaration des variables du programme1 CLE_COMPOSEE (A022)1 REDEFINE CLE_COMPOSEE /* redéfinition de la variable cle_composee 2 VAR1_1 (A001) 2 VAR1_2 (N020)1 VAR3 (L) /* booléen1 VAR4 (D) /* Date1 VAR5 (N5) /* Numérique sur 5 positionsEND-DEFINE /* début de programmeON ERROR /* paragraphe de gestion des erreurs WRITE 'erreur N°' *ERROR-NR 'ligne ' *ERROR-LINE 'dans programme' *PROGRAMEND-ERRORMOVE PARAM1 TO VAR1_1MOVE PARAM2 TO VAR1_2/* le paragraphe find .... end-find définit une boucle de lecture. /* Tant que des enregistrements de la table satisfont aux critères/* de recherche, on revient au début de la boucle pour trouver /* l'enregistrement suivant ...FIND TABLE WITH TABLE.CLE = CLE_COMPOSEE /* boucle de recherche d'enregistrements IF NO RECORD FOUND WRITE 'aucun enregistrement trouve' ESCAPE BOTTOM /* sortie de la boucle de lecture END-NOREC IF TABLE.CHAMP1 = 'toto' ESCAPE TOP /* passage à l'itération suivante /* (pour éviter, par exemple, de traiter /* certains enregistrements) END-IF PERFORM TRAITER_CHAQUE_RECORD_LUEND-FINDDEFINE SUBROUTINE TRAITER_CHAQUE_RECORD_LU WRITE TABLE.CHAMP1 TABLE.CHAMP2END-SUBROUTINEEND /* fin de programme
Natural 2006 dispose d'un vocabulaire étendu pour traiter de façon native les documents XML.
Natural reste, comme Cobol, fortement orienté vers les applications de gestion, du fait:
| Concurrents | |
|---|---|
| Déclaratifs | |
| Fonctionnels | |
| Impératifs | |
| Orientés objet | |