[MUSIQUE] [MUSIQUE] Nous allons maintenant étudier la notion de méthode et voir comment elle peut être mise en action dans le langage Scala. Des méthodes, nous en avons déjà utilisées. Ces méthodes, elles sont disponibles dans l'API de Scala, au travers des différents packages qui sont proposés. Nous allons voir maintenant comment il est possible de créer nos propres méthodes. [BRUIT] Qu'est-ce qu'une méthode? Une méthode, on peut la voir comme d'une part une super instruction, [BRUIT] une instruction qu'on ne pourrait pas réaliser, ou elle va réaliser une activité qu'on ne pourrait pas réaliser avec une instruction élémentaire du langage Scala. On va avoir besoin d'un ensemble d'instructions, d'un bloc d'instructions, donc on va regrouper ce bloc d'instructions pour réaliser cette tâche et on va lui donner un nom, et c'est ce nom qui va créer une super instruction. On peut imaginer ou faire une représentation de la méthode sous forme de cette super instruction. On peut aussi la voir comme un mini programme à l'intérieur d'un programme. C'est un sous-programme, d'une certaine façon, ou un bout de programme qui va être réalisé à l'intérieur du programme. Là aussi, en général, qu'on le voie sous forme d'une super-instruction ou comme un mini programme, notre méthode, elle va avoir pour but de réaliser une tâche bien précise, une tâche cohérente et une tâche indépendante. Quel est l'intérêt d'utiliser des méthodes? Il y a deux intérêts principaux. Le premier intérêt c'est dans la réutilisation du code. Utiliser une méthode, définir une méthode c'est quelque chose qu'on va pouvoir réutiliser. Si on identifie une tâche particulière qui a une activité suffisamment générale pour être réutilisée dans d'autres programmes, plutôt que d'avoir à redévelopper à chaque fois le code correspondant, on va tout simplement rédiger une méthode, et cette méthode, on va l'inclure à chaque fois de façon à pouvoir l'utiliser dans les programmes sans avoir besoin de la reprogrammer. La notion de méthode, elle facilite la réutilisation du code en permettant de mutualiser des bloc d'instructions qui réalisent des tâches plus ou moins complexes, mais qui peuvent être utiles dans un certain nombre de programmes. L'autre intérêt de la méthode ou de la notion de méthode c'est au niveau de l'analyse du problème qu'on va avoir à programmer. Une méthode, je vous l'ai dit, ça peut être vu comme un mini programme, et donc on peut voir un programme, finalement, comme une succession de mini programmes. Quel est l'intérêt? Tout simplement, ça permet de partir d'un problème complexe et de le décomposer en tâches indépendantes, chaque tâche étant moins complexe que le problème global. De cette façon-là , on simplifie la résolution du problème en le décomposant en tâches plus simples. Chaque tâche va être réalisée par une méthode et l'intégralité du programme sera réalisé tout simplement en en combinant les méthodes, l'ensemble des méthodes les unes avec les autres. L'intérêt des méthodes, il est double : faciliter la réutilisation du code, et dans l'approche d'analyse qu'on peut avoir, de dé-complexifier un problème, tout simplement en le décomposant en sous-tâches qui vont être plus simples que la tâche principale. Ce qu'on a vu c'est le principe de fonctionnement aussi d'une méthode. Une méthode, elle va avoir besoin de données qui vont être fournies sous forme de paramètres, elle va éventuellement fournir des résultats, et ici à l'intérieur de la boîte, ce qu'on va avoir c'est un ensemble d'instructions qui vont utiliser les paramètres fournis en entrée pour produire les résultats. L'intérêt c'est que l'utilisateur de la méthode n'a pas à se poser la question de savoir ce que réalisent ces instructions, il a juste à utiliser la méthode, fournir les paramètres et récupérer les résultats. Nous avons déjà vu une partie de la déclaration, de la description d'une méthode en utilisant par example la méthode max du package math. On se rappelle cette partie. C'est ce ce qu'on appelle la signature de la méthode. Cette signature, qu'est-ce qu'elle indique? Elle indique qu'on définit une méthode, qu'on lui donne un nom qui est ici max, que cette méthode a besoin de deux paramètres, un premier paramètre de type Double, un deuxième paramètre de type Double, Et après le double-point ici, cette signature indique tout simplement qu'on va récupérer un résultat de type Double. La signature, elle permet d'avoir la description de la méthode : son nom, les paramètres dont elle a besoin et le type. Qu'est-ce qui va manquer maintenant pour décrire, pour déclarer une méthode pour pouvoir ensuite l'utiliser? La partie qui va manquer c'est simplement le bloc d'instructions qui va regrouper toutes les instructions qui seront à exécuter chaque fois qu'on voudra exécuter la méthode max. Imaginons que cette méthode n'existe pas dans le package math et que nous devions l'écrire nous-mêmes. Comment est-ce que nous ferions? Nous avons déjà la signature, donc le terme def, le nom de la méthode, les paramètres dont on a besoin, le type du résultat qui va être fourni. À la suite, nous avons simplement à ouvrir un bloc d'instructions et à y insérer les instructions qui vont être nécessaires pour réaliser la tâche. Ici, si on veut savoir laquelle des valeurs, de celle de x ou celle de y, est la plus grande, on va par exemple tout simplement tester si x est plus grand que y. Si c'est le cas, c'est que c'est la valeur qui est dans x qui est la plus grande, donc on va indiquer ici qu'on va retourner, avec le terme return, la valeur de x. Sinon c'est que c'est y qui est la plus grande valeur, et à ce moment-là , on va retourner la valeur qui est dans y. Et on aura ici réalisé l'intégralité des instructions nécessaires à la réalisation de la méthode max. On voit bien qu'ici, l'instruction return permet d'indiquer le résultat qui va être renvoyé par la méthode max, et qui correspond évidemment au type qui est indiqué ici dans la signature. La déclaration d'une méthode, son principe général est résumé ici. On commence par indiquer le terme def pour dire qu'on va définir une méthode, fournir sa signature composée du nom, de la liste des paramètres nécessaires pour la réalisation de la tâche à faire par la méthode, double-points le nom du type du résultat, et puis un bloc d'instructions, les instructions nécessaires pour la réalisation de la tâche. Et une fois que le résultat a été déterminé, on indique comment ce résultat va être retourné à l'aide de l'instruction return. Il est possible d'avoir des méthodes qui ne renvoient pas de résultat. Elles vont simplement faire une action, mais cette action ne se traduira pas sous l'effet du calcul d'un nouveau résultat. On va rester sur cette méthode et on va imaginer tout simplement qu'au lieu de renvoyer le maximum, la méthode va afficher le maximum. [BRUIT] On va avoir la même signature, mais cette fois-ci, on va simplement afficher, on ne va pas renvoyer le résultat. Le type qu'on va indiquer ici ne va pas être le type Double mais un type particulier qui s'appelle Unit. La mention comme type de retour du type Unit va indiquer tout simplement que la méthode ne retourne pas de valeur. Dans ce cas-là , [BRUIT] [BRUIT] [BRUIT] notre méthode va effectivement exécuter une activité mais elle ne va pas retourner de résultat. Donc il n'y a pas de mention return, et ici l'indication du type Unit va justement indiquer qu'il n'y a pas de retour de valeur. Ces deux types de méthodes sont les deux schémas possibles : une méthode qui renvoie un résultat, on indique le type, on indique la valeur qui va être renvoyée avec la mention return ; des méthodes qui ne renvoient pas de résultat, on indique comme type de retour Unit, et évidemment ici, dans le bloc d'instructions de la méthode, il n'y aura pas d'instruction return puisque la méthode ne renverra aucun résultat. [MUSIQUE] [MUSIQUE]