• 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/04/2024

Écrivez une fonction

 

Dites bonjour au monde entier

Pour aborder ce chapitre, je dois vous présenter la notion de classe.

Une fonction peut être considérée comme un bloc de code avec un nom, qui exécute un service. Quand il s'agit d'une fonction   main  , le service effectué est en fait le programme lui-même ! Plutôt cool, non ? En d’autres termes, lorsque vous lancez votre programme, c’est la fonction  main  qui se lance. Elle est aussi appelée le point d’entrée.

Lorsqu'une fonction est située à l'intérieur d'une classe, elle s'appelle une méthode. Puisque tout le code est situé à l'intérieur de classes, vous pouvez utiliser les deux termes (fonctions et méthodes) de manière interchangeable.

Maintenant que vous connaissez la fonction   main  et que vous savez comment lancer un programme, il est temps d'écrire votre premier programme ! Traditionnellement, lorsque l'on apprend un langage pour écrire son premier programme, on cherche à afficher la chaîne de caractères Hello World! (Bonjour tout le monde, en français).

Si vous vous en souvenez – mais ce n’est pas si loin ! – je vous ai accueilli dans ce cours avec ce programme.

Regardons à nouveau  le code Java qui rend honneur à cette tradition :

package hello;

/** Ceci est une implémentation du message traditionnel "Hello world!"

* @author L'équipe Education d'OpenClassrooms

*/

public class HelloWorld {

    /** Le programme commence ici */

    public static void main(String[] args) {

        System.out.println("Hello World!");

    }

}

Décryptons ce code :

  • La première instruction,   package hello;  , est une déclaration de package. Ne tenez pas compte de cette ligne pour le moment.

  • La déclaration   public class HelloWorld   définit le nom de la classe comme étant  HelloWorld. En Java, l'ensemble du code doit se trouver à l'intérieur d'une classe.

  •  public static void main(String[] args)  . C'est le morceau de code que l'interpréteur Java recherche lorsque vous démarrez un programme.

  • Une instruction avec une classe utilitaire nommée   System  .  Ce genre de classe n'a pas besoin d'être instancié pour être utilisé. 

  • À l'intérieur de la méthode principale, vous trouverez l'instruction   System.out.println("Hello World !");  qui affiche le message attendu.

Mais, à quoi servent les lignes dans les caractères   /**  et   */   ?

Ce sont des commentaires de documentation, un code qui n’est pas utilisé lors de l'exécution du programme. C’est la version paragraphe de //. Cela vous permet de laisser des messages informatifs pour expliquer votre code (pour votre vous futur ou d’autres développeurs !)

En résumé, le code de démarrage d'un programme Java est contenu dans une fonction   main  (ou méthode). Cette fonction   main  est elle-même contenue dans une classe. Enfin, cette classe elle-même appartient à un package.

Maintenant que vous savez écrire du code, il est temps de l'exécuter !

Exécutez le programme à partir du terminal

En Java, il y a une correspondance directe entre :

  • les packages et les dossiers ;

  • les classes et les fichiers.

En effet, pour exécuter le programme sur votre ordinateur, vous devrez créer des dossiers qui correspondent à vos packages, et des fichiers qui correspondent à vos classes ! Pour le moment, nous avons écrit notre code Hello World! dans la méthode principale d'une classe HelloWorld. Cette méthode principale se trouve dans un package   hello  . Voyons maintenant ce que vous devez faire pour faire correspondre cela avec quelques fichiers et dossiers.

Voici les étapes principales :

  1. Tout d'abord, vous devez créer un dossier dans lequel vous allez mettre tout votre code. C'est ce qu'on appelle généralement le dossier root (racine).

  2. À l'intérieur de ce dossier racine, vous pouvez créer un dossier "hello" correspondant au nom de votre package.

  3. Ensuite, créez un fichier HelloWorld.java dans le dossier Hello, correspondant au nom de votre classe.

Vous voyez comment tout cela s'organise ? Package vers dossier, classe vers fichier. ✅
Une fois le fichier HelloWorld.java créé, vous pouvez saisir votre code Java. Utilisons le code de la section précédente :

package hello;
/** Ceci est une implémentation du message traditionnel "Hello world!"
* @author L'équipe Education d'OpenClassrooms
*/
public class HelloWorld {
    /** Le programme commence ici */
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Lorsque tout le code est à l'intérieur du fichier, vous devez convertir ce code Java en code exécutable par une machine, que l'ordinateur peut comprendre.

Exécutable ? Mais qu'est-ce que ça veut dire ?

Quel que soit le langage de programmation que vous utilisez pour écrire votre code, il doit être traduit en un ensemble d'instructions qu'un ordinateur peut exécuter. C'est ce qu'on appelle le code machine.

Mais alors, pourquoi ne pas écrire des programmes directement en code machine ?

Même si le code machine est parfaitement lisible pour les ordinateurs, il serait très difficile à utiliser pour les êtres humains.

Pensez votre code comme une recette de cuisine. Vous pouvez utiliser un langage de tous les jours pour décrire les ingrédients et les étapes à suivre, ou vous pouvez utiliser leur composition chimique et un vocabulaire spécialisé pour décrire les différentes étapes. Cette dernière option pourrait être comprise par certains, mais la plupart d'entre nous ne pourraient pas cuisiner avec de telles instructions. Et même pour ceux qui comprennent, le processus serait très long !

Le langage dans lequel le code Java doit être transformé est appelé Bytecode. Pour transformer le code Java en Bytecode, il est nécessaire d'utiliser le compilateur javac.

Et c'est à ce moment-là que les dossiers commencent à être utiles ! En utilisant la console/le terminal, naviguez jusqu'au dossier racine   root  de votre programme, et exécutez la commande suivante :

$ javac hello∖HelloWorld.java

La commande javac est en fait elle-même un programme. Si vous êtes sous Windows, elle sera nommée javac.exe.

Cette commande crée un fichier HelloWorld.class dans le dossier Hello. Ce fichier est un fichier binaire (vous ne pouvez pas l'ouvrir dans un éditeur de texte). Vous pouvez maintenant exécuter le programme avec la commande java (ou java.exe sous Windows) :

$ Java hello.HelloWorld Hello World!

Concrètement, lorsque vous développez, vous utilisez un environnement de développement (IDE) pour vous simplifier la vie. L'exécution de votre programme en cours de conception peut très bien se faire avec cet outil magique. Il se chargera de vous dire où sont les bugs, d'interpréter et d'exécuter tout seul le programme.

Dans le reste de ce chapitre, nous allons nous concentrer sur la façon d'organiser votre code afin que votre fonction  main  reste aussi petite que possible.

Organisez votre code de manière optimale

Le but de votre fonction   main  est de démarrer votre programme.

Dans les bonnes pratiques, il est d’usage que la méthode main soit la plus courte possible, en appelant uniquement les méthodes nécessaires.

Comme nous l'avons dit au début de ce chapitre, il existe deux types de classes que vous pouvez écrire et utiliser.

Utilisez des classes en tant que modèles

Vous pouvez définir des types complexes qui regroupent différents attributs représentant un concept nommé. Ce sont des classes de modèles. Vous les écrivez souvent pour modéliser le domaine de votre application : ce pour quoi vous écrivez votre programme.

Exemple : la classe   String  que vous utilisez pour stocker et manipuler les chaînes de caractères dans votre programme. Cette classe est disponible dans le package   java.lang  , qui est disponible depuis n'importe quelle partie de votre code.

Comment se fait-il que   String  soit une classe et non un type primitif tel que   int  ou   double    ?

String  est une classe non seulement parce que son nom commence par une lettre majuscule, mais aussi parce qu'il définit un état et un comportement :

  1. Son état est la chaîne de caractères que vous stockez. La valeur réelle est définie pour chaque objet lorsque vous l'instanciez.

  2. Son comportement est l'ensemble des méthodes que la classe   String  définit, et qui vous permettent d'opérer sur la chaîne que vous stockez.

Voyons cela en action :

Comment savoir quels comportements sont réellement disponibles ?

Vous vous souvenez de la Javadoc ? Chaque fois que vous écrivez une classe, vous êtes censé la documenter dans les marqueurs   /**  et   */  . Cela permet de générer automatiquement une page de documentation HTML. Les développeurs Java ont fait cette page pour vous, et l'ont rendue disponible sur le site officiel. Cette documentation va vous permettre de trouver les fonctionnalités disponibles rapidement ! Pratique, non ?

Jetez un coup d'œil à la Page Javadoc sur les  String  . Pouvez-vous trouver les méthodes   toUpperCase()  et   contains()  ?

Entraînez-vous à trouver des méthodes dans la page Javadoc, et faites en sorte que l'utilisation du site web Javadoc devienne un réflexe pour vous ! Cela vous permettra de gagner du temps par la suite.

Voyons maintenant le deuxième type de classes que vous allez définir et utiliser : les classes utilitaires.

Nettoyez votre fonction main 

Dans certains cas, vous n'aurez même pas accès à la fonction   main  ! Cela peut se produire si vous utilisez des frameworks, comme le kit de développement d'Android pour le développement mobile, ou le Spring Framework pour le développement web. Les frameworks sont des outils qui fournissent aux développeurs les fonctionnalités de base sur lesquelles ils peuvent s'appuyer, généralement sous la forme d'un ensemble de classes.

Penchons-nous maintenant sur votre fonction main  et prenons-en le contrôle. Nous allons la rendre aussi propre et nette que possible. Voici une implémentation « propre et nette » de notre programme HelloWorld :

package cleanHello;

/** Ceci est une implémentation du message traditionnel "Hello world!"
* @author L'équipe Education d'OpenClassrooms
*/
public class CleanWorld {
    
   /** Le programme commence ici */
   public static void main(String[] args) {
      sayHelloTo("world");
   }
   
   /** affiche le message "hello" au destinataire fourni
   *
   * @param recipient
   */
   private static void sayHelloTo(String recipient) {
      System.out.println("Hello " + recipient);
   }
   
}

Comme vous pouvez le voir, la classe   CleanWorld  définit deux méthodes :

  1. main  est le point d’entrée du programme. Son seul job, c'est de transmettre le travail à la méthode sayHello avec l'argument dont elle a besoin. Dans notre cas, c'est le destinataire prédéfini de notre hello : the world !

  2. La méthode   sayHello  imprime la chaîne « Hello » et ajoute la valeur fournie à la variable destinataire   recipient  lorsqu'elle est appelée par la méthode  main  .

En termes de fonctionnalité, rien n'a changé. Cependant, vous pouvez maintenant ajouter plus de logique au message que vous allez afficher, en changeant la méthode   sayHello  et en personnalisant le nom du destinataire.

Nous allons ajouter des fonctionnalités dans les chapitres suivants ! Pour cela, vous devez ajouter plus de logique à votre boîte à outils de programmation Java. Le chapitre suivant traite de ce premier outil : les conditions !

En résumé

  • Les programmes Java sont structurés en packages et en classes.

  • Aucun code n'est écrit en dehors d'une classe, ce qui signifie que toutes les fonctions sont des méthodes en Java.

  • Les packages sont mappés dans des dossiers et les classes dans des fichiers.

  • La commande javac convertit le code Java en Bytecode.

  • La commande java exécute le programme actuel en exécutant la fonction   main  dans la classe fournie.

  • Il existe deux types de classes :

  1. Les classes modèles qui sont utilisées comme modèles pour l'instanciation des objets.

  2. Les classes utilitaires qui contiennent des méthodes statiques qui peuvent être appelées directement sur la classe.

  • Vous pouvez accompagner vos classes et méthodes avec des commentaires de documentation, écrits entre  /**  et   */  , pour générer une page HTML avec toute la documentation de la classe, appelée un Javadoc. La méthode   main  peut vous être masquée si vous utilisez un framework.

  • Les principes du code propre exigent qu'aucune logique ne soit écrite à l'intérieur de la méthode   main  . Tout le travail doit être délégué à des fonctions bien nommées.

Dans le prochain chapitre, nous aborderons la portée des variables en Java. Certaines peuvent être localisées dans une méthode ou une section de code, alors que d'autres ont une portée plus globale.

Exemple de certificat de réussite
Exemple de certificat de réussite