Tutoriel Un premier programme en Java - partie 1

Introduction

Bienvenue dans la première partie de ce tutoriel d’introduction à la programmation en Java ! Java est un langage de programmation puissant et polyvalent qui est à la base de nombreuses applications que vous utilisez peut-être tous les jours, comme certaines applications Android ou des jeux comme Minecraft. Parce qu’il est orienté objet et très largement utilisé, Java est le langage que nous avons choisi pour l’apprentissage de la programmation à l’EPAI.

Avec ce tutoriel, nous visons à vous donner un aperçu bref, mais aussi complet que possible de l’utilisation de votre environnement de programmation et de la programmation en Java. Nous vous guidons pas à pas pour vous aider à construire votre premier programme : un jeu du pendu avec une interface en ligne de commande très simple.

Dans cette première partie, nous entrons tout de suite dans le vif du sujet en créant le répertoire du projet et le squelette du programme. Nous voyons ensuite comment programmer l’affichage de messages dans le terminal et comment exécuter notre programme. Nous terminons en passant en revue les différentes méthodes d’affichage de Java.

Avant de commencer, assurez-vous d’avoir suivi le tutoriel « Installer un environnement de programmation ». Si vous avez déjà installé votre environnement et que vous êtes prêt à faire vos premiers pas en programmation, commençons sans plus attendre !

Préparer le répertoire de notre projet

Lorsque l’on commence un travail avec un ordinateur, la première chose à faire est de se demander où enregistrer le résultat et quel nom lui donner.

Pour la première question : c’est un projet de programmation pour le module 319, nous le plaçons donc dans le sous-répertoire « m319 » de notre répertoire « projets ».

Vérifions d’abord que ces répertoires existent. Pour cela, ouvrez un terminal (sans privilège), tapez l’une après l’autre les commandes ci-dessous et pressez la touche [Entrer ⏎] pour lancer chacune d’elles. Ces commandes fonctionnes sous Windows, macOS et Windows.

1
2
cd $HOME\projets
cd m319
Fig. 1 — Commandes pour aller dans le répertoire « projets », puis dans le répertoire « m319 ».

Si les deux commandes s’exécutent sans erreur, vous vous trouvez maintenant dans le sous-répertoire « m319 » du répertoire « projets ».

Résultat des commandes de la figure 1 sous Windows Résultat des commandes de la figure 1 sous macOS (Linux)
Fig. 2 — Résultat des commandes de la figure 1 sous Windows et sous macOS (Linux)

Si la première commande échoue, cela signifie que le répertoire « projets » n’existe pas. Si la seconde commande échoue, cela signifie que le répertoire « m319 » n’existe pas. Dans les deux cas, reprenez la fin du tutoriel « Installer un environnement de programmation », ou demandez de l’aide avant de poursuivre.

Répondons maintenant à la seconde question : « Quel nom donner à notre travail ? »

Voici les éléments d’information dont nous disposons :

  • Le résultat d’un projet de programmation est un répertoire.
  • Le nom de ce répertoire doit indiquer ce dont il s’agit.
  • Par convention, nous prendrons l’habitude d’écrire les noms de répertoire en minuscules, sans accents et sans espaces.
  • C’est un premier programme en Java.

Compte tenu de cela, le nom du répertoire de notre projet pourrait être : « first‑java‑program ».

Dans le terminal, lancez l’une après l’autre les commandes ci-dessous. La première crée le répertoire, la deuxième permet de nous rendre dans ce répertoire, et la troisième ouvre le répertoire courant (.) dans Visual Studio Code.

Remarque : De manière générale dans le terminal, le répertoire « . » représente le répertoire courant, c’est-à-dire celui dans lequel nous nous trouvons. Le répertoire « .. » représente le répertoire parent du répertoire courant.

1
2
3
mkdir first-java-program
cd first-java-program
code .
Fig. 3 — Créer le répertoire « first-java-program » et ouvrir ce répertoire dans Visual Studio Code

Ces commandes fonctionnent sous Windows, macOS et Linux. La figure ci-dessous montre leur effet sous Windows et macOS. L’effet sous Linux est semblable à l’effet sous macOS.

Résultat des commandes de la figure 3 sous Windows Résultat des commandes de la figure 3 sous macOS (Linux)
Fig. 4 — Effet des commandes de la figure 3 sous Windows et sous macOS (Linux)

Si tout a bien fonctionné, le répertoire « $HOME/projets/m319/fist-java-program » doit maintenant être ouvert dans Visual Studio Code.

Comme c’est la première fois que vous ouvrez ce répertoire, « Visual Studio Code » s’assure que vous faites confiance à l’auteur des programmes qui s’y trouvent (ou qui s’y trouveront) et que vous l’autorisez à les exécuter. Il vous propose, par la même occasion, de lui accorder la même autorisation pour le répertoire « m319 ».

Ouverture du répertoire courant (.) dans VVisual Studio Code
Fig. 5 — Ouverture du répertoire courant (.) dans Visual Studio Code

Nous voilà prêts à programmer. Commençons !

Ajouter un fichier à notre projet

Pour commencer, voyons comment afficher dans le terminal un message de bienvenue pour notre jeu de pendu. Pour cela, ajoutons un fichier à notre projet et nommons-le « HangmanGame.java » (attention, il est important de respecter les majuscules et les minuscules).

Ajouter un fichier HangmanGame.java
Fig. 6 — Ajouter un fichier HangmanGame.java

Un fichier avec l’extension « .java » est un fichier de texte qui contient du code écrit avec le langage de programmation Java. En Java, un fichier contient toujours la « définition d’une classe » et le nom de cette classe doit être exactement le même que le nom du fichier. C’est pourquoi l’éditeur de texte vous propose de choisir l’une des possibilités de définir la classe « HangmanGame ». Sélectionnez la première.

Afficher un message de bienvenue

Pour ordonner à l’ordinateur d’afficher notre message de bienvenue dans le terminal, beaucoup de langages de programmation utilisent le mot Print suivi du texte qu’il doit afficher entre guillemets (double quotes), par exemple : Print("Bienvenue dans le jeu du pendu !").

Le mot Print est le nom d’un « sous-programme » ou, dans le vocabulaire de la programmation orientée objet, le nom d’une « méthode ». Le texte entre guillemets est une « chaîne de caractères ». La ligne de code Print("Bienvenue dans le jeu du pendu !") est un « appel de méthode ». Elle ordonne à l’ordinateur d’« appeler » la méthode Print pour afficher dans le terminal, la chaîne de caractère « passée en paramètre ».

Remarque : En programmation, une ligne de code qui ordonne à l’ordinateur de faire quelque chose qui à un effet (ici, afficher un texte dans le terminal) est une « instruction ». Un appel de méthode est une instruction.

Si l’on écrit cette instruction directement dans la définition de notre classe, c’est-à-dire entre les accolades ({}, en anglais, braces), l’éditeur nous informe qu’il y a une « erreur de syntaxe ».

Définition de la classe HangmanGame
Fig. 7 — Définition de la classe HangmanGame

Une erreur de syntaxe, pour un langage de programmation, est comme une erreur de grammaire pour une langue naturelle. Elle indique qu’une « construction syntaxique », l’équivalent d’une phrase, n’est pas formée correctement.

En effet, dans un programme en Java, une instruction ne peut pas se trouver directement dans la définition d’une classe. Une instruction doit se trouver dans la « définition d’une méthode », qui doit elle-même se trouver dans la définition d’une classe. De plus, la première instruction d’un programme doit impérativement se trouver dans une méthode appelée main.

Résultat des commandes de la figure 3 sous Windows
Fig. 8 — Ajout de la définition de la méthode main

La définition d’une classe et la définition d’une méthode main constituent le plus petit programme possible en Java. Le nom de la classe doit être écrit en « UpperCamelCase », et doit être parlant. Par exemple, le nom du programme, comme ici, ou Exercice1, Exercice2, etc., s’il s’agit d’un exercice. Le code de notre programme doit se trouver entre les accolades de la définition de la méthode main. Nous vous recommandons d’apprendre par cœur les quelques lignes de code ci-dessous.

Remarque : En Java, une ligne qui commence par une double barre oblique (slash) est une ligne de commentaire. Les commentaires servent à documenter le code et sont ignorés par le compilateur ou l’interpréteur.

1
2
3
4
5
6
7
8
9
10
// Définition de la classe HangmanGame
public class HangmanGame {

    // Définition de la méthode main
    public static void main(String[] args) {

        // Instructions du programme

    }
}
Fig. 9 — Définition d’une classe et de la méthode main

Essayons une nouvelle fois de donner l’ordre d’écrire notre message de bienvenue. Nous avons à nouveau une erreur de syntaxe. Cette fois, plaçons notre curseur sur l’erreur et voyons ce que nous dit l’éditeur.

Résultat des commandes de la figure 3 sous Windows
Fig. 10 — Ajout de la définition de la méthode main

L’éditeur nous informe que la méthode « Print » n’est pas définie dans main, ce qui est vrai. Java est un langage orienté objet, une méthode doit soit être appelée sur une classe ou sur un objet. Par exemple :

  • Math.sin(30)
  • System.out.print(“Hello world !”)

Dans le premier exemple, le nom de la méthode est le mot sin. On remarque que le mot qui se trouve à gauche du point : Math, commence par une majuscule. C’est donc le nom d’une classe. Le point (.) entre Mathet sinindique que la méthode sinest appelée sur la classe Math.

Dans le deuxième exemple, le nom de la méthode est le mot printet le mot qui se trouve immédiatement à gauche du point : out, commence par une minuscule. C’est donc le nom d’un objet. Le point (.) entre « out » et printindique que la méthode printest appelée sur l’objet out. Plus précisément, la méthode est appelée sur l’objet référencé par la variable outde la classe System(System.out).

La classe System est une représentation très simplifiée de notre programme. La variable out de cette classe représente la sortie standard (stdout). Par défaut, la sortie standard est l’écran du terminal. La classe System a également une variable in qui représente l’entrée standard (stdin). Par défaut, l’entrée standard est le clavier du terminal.

Pour afficher notre message de bienvenue dans le terminal, nous devons donc appeler notre méthode Print sur l’objet qui représente la sortie standard (System.out). Essayons.

Donner l'ordre d'afficher le message de bienvenue
Fig. 11 — Donner l’ordre d’afficher le message de bienvenue

L’éditeur nous informe qu’il y a encore deux erreurs de syntaxe. En effet, Java est « sensible à la casse » et, par convention, le nom d’une méthode commence par une minuscule. De plus, en Java, une instruction se termine généralement par un point-virgule. Nous devons donc écrire print avec en minuscule et terminer l’instruction par un point-virgule.

1
2
3
4
5
public class HangmanGame {
    public static void main(String[] args) {
        System.out.print("Bienvenue dans le jeu du pendu !");
    }
}
Fig. 12 — Code de du programme

Nous voilà enfin prêts à exécuter notre programme.

Exécuter le programme

Notre programme a une interface utilisateur en ligne de commande (CLI). Pour l’exécuter, nous avons donc besoin d’un terminal. Nous pouvons bien sûr utiliser celui que nous avons ouvert pour créer le répertoire du projet et lancer Visual Studio Code, mais Visual Studio Code dispose d’un terminal intégré.

Pour ouvrir le terminal intégré, sous Windows, allez dans le menu « View » et cherchez l’entrée « Terminal ». Sous macOS, allez dans le menu « Terminal », et cherchez l’entrée « New Terminal ». Le terminal s’ouvre alors juste au-dessous de la fenêtre de l’éditeur.

Exécuter le programme dans un terminal intégré
Fig. 13 — Ouvrir une fenêtre du terminal intégré sous Windows

Pour exécuter un programme en Java, nous avons besoin d’un programme capable d’exécuter du code Java. Un tel programme est appelé « interpréteur ». L’interpréteur de Java est le programme appelé java que nous avons installé avec le OpenJDK.

Dans la fenêtre du terminal, lancez la commande ci-dessous pour exécuter votre programme.

1
java HangmanGame.java
Fig. 14 — Lancez le programme avec l’interpréteur Java

Le programme affiche le message de bienvenue et comme il ne contient pas d’autres instructions, il se termine.

Exécuter le programme dans un terminal intégré
Fig. 15 — Exécuter le programme dans un terminal intégré

Une autre manière d’exécuter le programme est de cliquer sur le petit lien « Run » que Visual Studio Code affiche juste au-dessus de la méthode main.

Exécuter le programme dans un terminal intégré
Fig. 16 — Exécuter le programme avec CodeLens

Cette action exécute dans le terminal une commande un peu plus compliquée que celle que vous avez saisie à la main, mais qui produit exactement le même effet.

Autres méthodes d’affichage

Avant de terminer cette première partie, voyons encore les autres méthodes d’affichage de Java.

Nous l’avons déjà vu, la méthode printaffiche le texte que nous lui passons en « paramètres ». Les paramètres d’une méthode sont les données d’entrée de cette méthode. La méthode printne prend qu’un seul paramètre, le texte qu’elle doit afficher.

Essayons d’ajouter un autre message à la suite du message de bienvenue. Tapez le code suivant à l’intérieur de la méthode mainjuste après l’instruction d’affichage du message de bienvenue.

1
System.out.print("Le jeu consiste à deviner un mot en proposant une lettre à la fois. Vous avez droit à 10 propositions erronées.");
Fig. 17 — Donner l’ordre d’afficher le principe du jeu

Si vous exécutez votre programme, vous remarquez que le texte du deuxième message vient d’afficher immédiatement à la suite du message de bienvenue.

Exécuter le programme dans un terminal intégré
Fig. 18 — Utilisation la méthode print ne fait pas de retour à la ligne

Pour afficher un message avec un retour à la ligne, nous pouvons utiliser la méthode println à la place de la méthode print. Nous pouvons également utiliser un appel à la méthode println sans paramètre pour afficher une ligne vide après le message de bienvenue, comme l’illustre la copie d’écran ci-dessous.

Remarque : en Java, un appel de méthode a toujours des parenthèses. Si la méthode n’a pas de paramètre, les parenthèses sont vides.

Exécuter le programme dans un terminal intégré
Fig. 19 — Utilisation de la méthode println

En guise d’exercice, modifiez le code pour afficher la chaîne de caractères "Vous avez droit à 10 propositions erronées.", immédiatement au-dessous de la chaîne de caractères "Le jeu consiste à deviner un mot en proposant une lettre à la fois.". Exécutez le code pour voir l’effet de votre modification.

Résultat attendu de l'exercice
Fig. 20 — Résultat attendu de l'exercice

Le nombre de propositions incorrectes auxquelles a droit la joueuse ou le joueur est une donnée du programme. De plus, cette valeur peut varier pour adapter le niveau de difficulté. Nous devons donc placer cette valeur dans une « variable ». De manière générale, une variable représente une donnée stockée dans la mémoire de l’ordinateur, et permet d’associer un nom à une valeur. En Java, le nom doit être composé de lettres minuscules et majuscules et de tirets du bas (_). Par convention, on écrit le nom d’une variable en « lowerCamelCase ». Appelons notre variable maxNumberOfWrongGuess et affectons-lui la valeur 10.

Variable maxNumberOfWrongGuess
Fig. 21 — Variable maxNumberOfWrongGuess

L’éditeur nous informe qu’il y a une erreur de syntaxe. En plaçant le curseur sur l’erreur, nous apprenons que le mot maxNumberOfWrongGuess n’est pas reconnu comme étant une variable. En effet, en Java, il est nécessaire de déclarer une variable avant de pouvoir lui affecter une valeur et l’utiliser. La syntaxe d’une déclaration de variable est le nom d’un « type de donnée » suivi d’une espace et du nom de la variable.

Le type de donnée d’une variable détermine quelles valeurs peuvent lui être affectées et quelles opérations peuvent être appliquées à ces valeurs. Par exemple, une variable de type String (chaîne de caractères) représente une donnée dont la valeur est un texte. Une variable de type int représente une donnée dont la valeur est un nombre entier. Une variable de type double représente une donnée dont la valeur est un nombre à virgule.

Dans notre cas, le nombre maximal de propositions incorrectes est un nombre entier. Nous déclarerons donc notre variable maxNumberOfWrongGuess avec le type int. Lorsque l’on déclare une variable et qu’on lui affecte une valeur sur la même ligne, on dit que l’on définit cette variable. La ligne de code est une « définition de variable ».

Définition de la variable maxNumberOfWrongGuess
Fig. 22 — Définition de la variable maxNumberOfWrongGuess

On remarque que le nom de la variable est toujours souligné, mais cette fois elle l’est en jaune. Ce n’est pas une erreur, mais un avertissement. L’éditeur nous avertit que la variable est déclarée, mais qu’elle n’est pas utilisée et qu’elle est donc inutile.

Faisons donc quelque chose avec cette variable. Remplacez l’instruction d’affichage de la chaîne de caractères "Vous avez droit à 10 propositions erronées." par le code ci-dessous.

1
2
3
int maxNumberOfWrongGuess = 10;

System.out.println("Vous avez droit à " + maxNumberOfWrongGuess + " propositions erronées.");
Fig. 23 — Concaténation de la valeur de la variable

Dans cette instruction, les opérations avec l’opérateur + ne sont pas des additions, mais des « concaténations », car dans les deux cas, l’une des deux valeurs (opérandes) est une chaîne de caractères. Une concaténation est la juxtaposition de deux chaînes de caractères. Dans notre cas, la concaténation de la chaîne "Vous avez droit à ", du nombre entier 10 transformé en chaîne de caractères ("10"), et de la chaîne " propositions erronées.", produit la chaîne "Vous avez droit à 10 propositions erronées.". Remarquez l’espace à la fin de la première chaîne et l’espace au début de la seconde.

Exécutez votre programme pour vérifier qu’il fonctionne correctement.

Concaténation de la valeur de la variable
Fig. 24 — Concaténation de la valeur de la variable

Il existe une autre méthode d’affichage qui permet de faire la même chose de manière plus élégante : la méthode printf. Remplacez le dernier appel à la méthode println par la ligne de code ci-dessous.

1
System.out.printf("Vous avez droit à %d propositions erronées.\n", maxNumberOfWrongGuess);
Fig.25 — Utilisation de la méthode printf

La méthode printf prend plusieurs paramètres. Le premier est une chaîne de caractères qui contient un ou plusieurs emplacements pour la valeur d’une variable. Une telle chaîne est appelée un modèle (template). Dans notre code, %d est un emplacement pour un nombre entier. On peut également avoir des emplacements pour des chaînes de caractère (%s) ou pour des nombres à virgules (%f). Il doit y avoir ensuite un paramètre supplémentaire pour la valeur de chaque emplacement. Dans notre code, il n’y a qu’un emplacement, il n’y a donc qu’un seul paramètre après la chaîne. Enfin, la méthode printf ne fait pas de retour à la ligne. Pour ajouter un retour à la ligne dans une chaîne de caractère, on utilise la combinaison \n.

Remarque: Dans une chaîne de caractère en Java (et dans beaucoup d’autres langages de programmation), la barre oblique inversée (\, en anglais, backslash) est le « caractère d’échappement ». Ce caractère indique que le caractère suivant a une signification spéciale. Par exemple, dans « \n », le « n » qui suit le caractère d’échappement ne représente pas la lettre n, mais un retour à la ligne (line feed). Pour écrire un backslash dans une chaîne de caractères, il faut le doubler ("\\").

Concaténation de la valeur de la variable
Fig. 26 — Utilisation de la méthode printf

Nous voilà parvenus au terme de cette première partie.

Conclusion

Félicitations, vous venez d’accomplir vos premiers pas en Java et dans votre apprentissage de la programmation ! Dans ce tutoriel, vous avez appris à :

  • Créer un répertoire pour votre projet dans le terminal.
  • Ouvrir le répertoire courant dans Visual Studio Code avec la commande code .
  • Écrire un programme minimal en Java (définition d’une classe et de la méthode main).
  • Exécuter un programme en Java dans le terminal intégré de Visual Studio Code.
  • Utiliser les méthodes d’affichage print, println et printf.
  • Déclarer et définir une variable.

N’hésitez pas à expérimenter avec le code que vous avez écrit, à essayer différentes chaînes de caractères et différentes valeurs pour la variable. Il est important de pratiquer, alors continuez à écrire du code et à vous amuser !

Au besoin, n’hésitez pas à demander de l’aide à votre enseignant ou à vos camarades. Bonne programmation !