Cette page compare les propriétés des différents langages avec le langage Pascal. Les langages comparés sont le langage C, C++ (extension du C), Java, PHP, JavaScript, Python.
En Pascal, les noms d'instructions, de champs, de variables et fonctions sont insensibles à la casse!
Types de données
Les définitions de types des langages C, C++ et Pascal sont ceux existant en standard pour les langages dans les années 1990. Depuis ça a pu évoluer (notamment our Pascal avec Delphi et Free Pascal). Pour Java, il s'agit des normes courants (2020).En Pascal (et accessoirement JAVA) qui est un langage fortement typé, les types ont les propriétés de ce qu'ils sont et ne peuvent PAS être soumis à des opérations qui ne leur sont pas attribué, contrairement au C. Si vous voulez appliquer une opération à un type "pointeur" par exemple, vous devez d'aord le convertir en Longint par LongInt(ptr), alors que le C est plus permissif (plus souple).
Types numériques
types | Pascal | Langage C/C++ | Java |
---|---|---|---|
Numériques Entiers |
|
Les limites des types d'entiers à partir de 16 bits varient suivant les compilateurs!
|
|
Booléens | Type Boolean (de taille 1 octet). En pascal, les types sont gérés strictement, et une variable booléenne ne peut renvoyer que "true" ou "false" par "write". Pour afficher la "valeur" d'une variable de type booléenne, faire "ord(varbooleenne)" : Ces valeurs sont 0 ou 1. Voir ici. | Jusqu'à la norme C99, le langage C n'a PAS de type Booléen. Les compilateurs considéraient que les entiers non nuls étaient "vrais" et et les entiers nuls valaient "faux". | Type boolean comme en Pascal, sauf qu'ici, la taille est de 4 octets (à quoi bon gaspiller 3 octets pour une variable qui ne peut prendre que 2 valeurs ???) |
Numériques Réels |
|
|
|
Python et PHP effectuent les typages dynamiquement suivant le contexte. Pour les nombres, PHP et Python gèrent 3 types:
- bool (booléens) géré de la même manière qu'en Pascal ou Java
- int (Entier 32/64 bits) géré de la même manière qu'en C
- float (32/64 bits) géré de la même manière qu'en C
Concernant JavaScript, il gère tous les nombres en interne au format Réel Signé 64 bits (IEEEE754)
Types chaines
types | Pascal | Langage C/C++ | Java |
---|---|---|---|
Caractère |
Type char (1 octet).
Traite un octet comme caractère et QUE comme un caractère. Pour le traiter en Byte, faire "Ord(moncaractere)" ou "Byte(moncaractere)" |
Type char (1 octet).
Traite un type char comme caractère ou comme entier non signé. Le langage C est très permissif... |
Type char (2 octets).
Traite un octet comme un caractère de type Unicode. Il n'y a pas de manipulation d'octets unique possible en Java. |
Chaine de caractères |
|
Type char * toto ou char toto[taille]. En C, la déclaration d'une chaîne se fait de 2 manières. Soit un pointeur vers un espace contenant une chaine, soit une chaine de taille max fixée. |
Il n'existe pas de type Chaîne de base en Java, mais 3 classes:
|
Type Tableaux
Tous les langages de cette page peuvent manipuler des tableaux multidimensionnels (avec déclaration de Type pour le Pascal, C/C++ et Java). Cependant, le langage Pascal a un avantage que les autres n'ont pas. Le langage Pascal est le seul des langages dont les index de tableau peuvent être de différents types!! Ces types sont de type ordinal (Entiers, char, liste et même Booléen). Mais au final, on constate que tous ces types sont sous l'étiquette "entiers" en langage C (même si le type Booléen n'existe pas et que le type "char" est le même qu'un entier d'1 octet). Les langages de scripts, contraiement à Pascal, C, Java, permettent d'initialiser rapidement des tableaux en intégrant directement les valeurs entre crochets ou singleton suivant le contexte.En Pascal, tout comme en C, il est possible de créer un type de tableau Dynamique, sous forme de variable de type "Enregistrement" dont un des champs contiendrait le nombre d'éléments du tableau, un autre le type et un pointeur vers une adresse de début des données. Voir les types "enregistrement", et "pointeur" plus bas.
Types spéciaux en Pascal
Le langage Pascal possède des types n'existant ni en C ni en Java:- Le type Enuméré qui intègre des étiquettes aux valeurs d'un tableau ordinal (démarrant à 0 jusqu'à N-1 éléments). En C et Java, cela nécessiterait de déclarer des constantes à minima. Et cela ressemble fortement à une liste
- Le type Interval qui indique le début et la fin d'une liste d'éléments ordinaux. Ce type est très pratique pour écrire des instructions conditionnelles entre des bornes! (n'existe nulle part ailleurs)
- Le type Set (ensemble) qui permet de manipuler des ensembles indiquant la présence ou nom d'un élément dans cet ensemble!! Ce type est unique dans les langages de programmations de la liste! Bien que limité à 256 éléments max (mais là aussi on peut détourner cette limite), cela montre que,le Pascal est un langage dédié avant tout aux mathématiques!
Pointeurs de variables et fonctions
- En Pascal, comme en C, chaque variable peut être manipulé comme un pointeur. En Java, le terme employé est la Référence (en Programmation Objet). Il y a un signe pour indiquer "valeur dont l'adresse est" (^) et un autre pour indiquer "Adresse de" (@) en Pascal. En Pascal, une variable donnée comme pointeur ne peut pas subir les opérations d'une variable entière!! Il faut faire une conversion avec LongInt() auparavant. Dans ce type de déclaration de pointeur, il faut indiquer le type des objets pointés par l'adresse
- Il existe aussi le type Pointer pour des compilateurs comme Pure Pascal et Turbo Pascal 7. Ce type indique qu'on pointe vers un type inconnu (comme une encapsulation en POO).
- Enfin, comme en C, le Pascal permet les pointeurs de procédures ou fonctions avec le type Procedure
Type Enregistrement
En Pascal, l'équivalent du "stuct" du C est l'enregistrement,. De plus, le Pascal introduit une spécificité qui n'existe pas dans le langage C, les enregistrements VARIANTS!Les enregistrements variants sont des types d'enregistrements dont, pour un même type, le nombre, le type et le nom de champs peut varier suivant les valeurs d'un (et un seul) de ces champs.