Voir les cours et résoudre les problèmes en :
Le C est un langage de programmation impératif conçu pour la programmation système. Inventé au début des années 1970 avec UNIX, C est devenu un des langages les plus utilisés. De nombreux langages plus modernes se sont inspirés de sa syntaxe. Il privilégie la performance sur la simplicité de la syntaxe. [En savoir plus]
Le C++ est un langage de programmation impératif. Inventé au début des années 1980, il apporte de nouveaux concepts au langage C (les objets, la généricité), le modernise et lui ajoute de nombreuses bibliothèques. C++ est devenu l'un des langages les plus utilisés. Sa performance et sa richesse en font le langage de prédilection pour les concours. [En savoir plus]
Pascal est un langage de programmation impératif inventé dans les années 1970 dans un but d'enseignement. Quoiqu'encore utilisé à cette fin, l'absence de bibliothèque standard en limite son utilisation malgré une grande efficacité. Sa syntaxe a été reprise par d'autres langages plus modernes avec plus ou moins de succès. [En savoir plus]


Remarque : Les cours pour ce langage ne sont disponibles que jusqu'au chapitre 4, « Lecture de l'entrée ». Les corrections sont toutefois toujours fournies.
OCaml est un langage de programmation fonctionnel inventé au milieu des années 1990. Il permet aussi une programmation impérative ou objet. Il permet d'écrire des programmes courts et faciles à vérifier et est ainsi utilisé pour certains systèmes embarqués très sensibles comme ceux des avions. Il est utilisé dans l'enseignement en classes préparatoires aux grandes écoles. [En savoir plus]


Remarque : Les cours pour ce langage ne sont disponibles que jusqu'au chapitre 4, « Lecture de l'entrée ». Les corrections sont toutefois toujours fournies.
Java est un langage de programmation impératif et orienté objet. Inventé au début des années 1990, il reprend en grande partie la syntaxe du langage C++ tout en la simplifiant, au prix d'une performance un peu moins bonne. S'exécutant dans une machine virtuelle, il assure une grande portabilité et ses très nombreuses bibliothèques en font un langage très utilisé. On lui reproche toutefois la « verbosité » de son code. [En savoir plus]


Remarque : Pour un débutant souhaitant apprendre Java, nous conseillons fortement de commencer par JavaScool, plus facile à apprendre, bien que fortement similaire.
Java's Cool (alias JavaScool) est conçu spécifiquement pour l'apprentissage des bases de la programmation. Il reprend en grande partie la syntaxe de Java sur laquelle il s'appuie, mais la simplifie pour un apprentissage plus aisé. La plateforme JavaScool est accompagnée d'un ensemble d'activités diverses de découverte de la programmation. [En savoir plus]
Python est un langage de programmation impératif inventé à la fin des années 1980. Il permet une programmation orientée objet et admet une syntaxe concise et claire qui en font un langage très bien adapté aux débutants. Étant un langage interprété, il n'est cependant pas aussi performant que d'autres langages. [En savoir plus]
Objectif

Ce chapitre précise le principe des expressions. Les expressions, c'est la vision que le compilateur a du code qu'on a écrit. Pour le compilateur, l'intégralité du code est construit avec des expressions. Comprendre comment le code est interprété par le compilateur a deux intérêts. Le premier est de pouvoir comprendre les messages d'erreurs qu'on peut obtenir. Le second est de pouvoir comprendre précisément de quelle manière sera interprété le code que l'on écrit. Détaillons ces deux points.

Des messages d'erreurs, on en a déjà vu un bon nombre. Lorsque le compilateur n'arrive pas à décortiquer le code en expression, il nous renvoie de sympathiques erreurs de syntaxes (syntax error), ou bien d'erreur de typage (this expression has type ... but is here used with type ...). Lorsqu'on utilise des noms qui ne sont associés à rien, on a le unbound value, facile à corriger. Il y a encore des erreurs d'utilisation de fonctions. Lorsqu'on utilise une valeur comme une fonction : This expression is not a function, it cannot be applied. Et lorsqu'on place plus d'arguments qu'il n'est censé en avoir : This function is applied to too many arguments.

L'étude des expressions nous apportera aussi une compréhension nécessaire de certaines difficultés de la programmation. La première arrive lorsqu'on essaie d'associer une valeur à un nom qui est déjà associé à une autre valeur. On appelle cela la surdéfinition de variable. Une deuxième difficulté est la construction de valeurs avec des structures if : on associe un nom à une valeur qui dépend d'un test. Troisième chose : connaître précisément le fonctionnement des expressions avec des && et des || du calcul booléen. En dernier, on s'intéressera aux fonctions.

Principe

Le principe de base est que chaque mot écrit dans le programme forme une expression, et que chaque expression est d'un et un seul type. On construit des expressions plus grande en groupant des petites expressions, puis des expressions encore plus grandes en regroupant ces grandes expressions, et ainsi de suite. A la fin, le code du programme tout entier forme une seule très grande expression. Avant de voir comment on peut construire de grandes expressions à partir de petites, il faut déjà commencer par voir les petites.

Les valeurs immédiates sont les plus courtes expressions. On connaît les entiers, les flottants, les caractères, et les booléens :

  • 5 est une expression de type int.
  • -4.67 est une expression de type float.
  • 'c' est une expression de type char.
  • true est une expression de type bool.

Les références, les tableaux et les chaînes peuvent être construits à partir de ces valeurs immédiates :

  • ref 5 est une expression de type int ref.
  • [| 3.4; 5.7; -2.34; 9.1 |] est une expression de type float array.
  • "super" est une expression de type string.
  • 4 <> 5 est une expression de type bool.

Remarques : une chaîne est une succession de caractères placés entre des guillemets. Autre remarque : on verra plus tard que le mot ref est en fait le nom d'une fonction.

Un autre type est très utile:

Par définition, une expression qui réalise une action est de type unit.

Dans ce contexte, ce mot veut simplement dire "action". Une telle expression n'a pas besoin d'être terminée par un point-virgule s'il n'y a rien après. En effet, le point-virgule ne sert qu'à séparer des expressions, comme on le précisera ensuite.

  • print_int 5 est une expression de type unit.
  • print_float 3.14 est une expression de type unit.
  • print_string "super" est une expression de type unit.
  • print_newline() est une expression de type unit.

Remarque : ces expressions sont l'application d'une fonction avec des paramètres. Il s'agit donc déjà d'expressions construites à partir de petits bouts.

Deux expressions permettent de dire de ne rien faire :

  • begin end est une expression de type unit.
  • () est une expression de type unit.

Avec des fonctions prédéfinies, on peut demander à l'utilisateur de fournir des valeurs. Par exemple : read_int est une fonction de type unit -> int. Lorsqu'on applique la fonction avec le paramètre () représentant le type unit, ce qui donne read_int(), on obtient une expression de type int. Ainsi :

  • read_int() est une expression de type int.
  • read_float() est une expression de type float.
  • read_line() est une expression de type string.
Pensez à vous inscrire pour valider les cours et résoudre les exercices.