B2 · Episode 1 · 5:11

Functional Programming in Java

This episode introduces functional programming concepts in Java, focusing on treating functions as first-class values, anonymous classes, and functional interfaces—especially useful for event-driven programming like GUI development.

Source:Nicolas Hurtubise / classe.iro.umontreal.ca · License:CC BY-SA 4.0

Transcript

  1. bonjour tout le monde bienvenue dans cette première tentative de faire un cours à

    Hello everyone, welcome to our first attempt at a remote course!

  2. distance aujourd'hui on va parler d'un sujet qui est pas très très gros

    Today we’ll discuss a topic that isn’t very large

  3. Mais qui va être pas mal important pour la suite.

    yet will be quite important for what follows.

  4. Dans le fond, on va parler de notions de programmation fonctionnelle en Java,

    In fact, we’ll cover concepts of functional programming in Java,

  5. ce qui va beaucoup nous servir au niveau des interfaces graphiques.

    which will be highly useful when working with graphical user interfaces.

  6. Donc quand je parle de programmation fonctionnelle, je

    When I say functional programming, I mean

  7. parle de choses comme en JavaScript.

    features like those found in JavaScript.

  8. En JavaScript, on a que les

    In JavaScript, functions

  9. fonctions dans le langage sont des objets comme les autres.

    are objects just like any other objects.

  10. Dans le fond, une fonction comme direBonjour, on définit ça de cette façon- là.

    For instance, we define a function called sayHello like this:

  11. On peut définir une fonction comme étant la fonction du paramètre nom qui va aller

    We declare a function that takes a parameter named 'name',

  12. afficher bonjour nom sur la console.

    which prints 'Hello, name' to the console.

  13. Dans le fond, on déclare une fonction comme ça,

    Essentially, we declare a function this way,

  14. puis on l'assigne à une variable, puis à partir de là,

    then assign it to a variable; from that point on,

  15. on peut faire pas mal ce qu'on veut avec cette variable.

    we can do many things with that variable.

  16. Autrement dit, on peut par exemple se déclarer deux fonctions comme ça.

    In other words, we can define two functions like this:

  17. dire bonjour, dire bye bye,

    sayHello and sayByeBye,

  18. puis rien qui nous empêche mettons d'exécuter ce petit bout de code là ici,

    and then nothing prevents us from running this small piece of code here—

  19. où on va carrément assigner le contenu d'une des variables dans l'autre variable.

    where we directly assign the content of one variable into the other.

  20. Autrement dit, la fonction qu'il y a dans dire bye bye va se

    In other words, the function inside sayByeBye

  21. retrouver dans la variable fct, va

    will be placed into the variable fct,

  22. se retrouver copiée dans la variable fct.

    i.e., fully copied into the fct variable.

  23. Puis mettons qu'on exécute ce petit bout de code- là,

    Now suppose we run this piece of code:

  24. ben selon si ma variable aléatoire est plus petite que 0.5, autrement dit,

    If my random number is less than 0.5—that is,

  25. on a une chance sur deux que ce code- là s'exécute.

    there’s a 50% chance this code will execute.

  26. Une chance sur deux que ce code- là s'exécute.

    There's a 50% chance this code will execute.

  27. Fait qu'à la fin ici,

    So, in the end, right here,

  28. quand on arrive à exécuter cette ligne- là,

    when we reach and execute this line,

  29. ben le fait d'appeler fct de tel paramètre,

    calling the function 'fct' with a certain parameter,

  30. on sait pas si c'est cette fonction- là en haut ou cette fonction- là ici qui va

    we don’t know whether it’ll call the function defined above,

  31. être appelée. Dans le fond, la fonction va être définie selon qu'est- ce qui s'est

    or this one defined here. Fundamentally, which function gets used depends on what happened earlier.

  32. passé ici. puis puis puis puis donc c'est ça dans le fond les objets en javascript

    So fundamentally, objects in JavaScript are—

  33. sont vraiment définis comme étant des objets comme les autres des valeurs comme les

    just like other ordinary values,

  34. autres qu'on peut passer n'importe où n'importe quand

    which you can pass around anytime and anywhere.

  35. Un autre exemple de ce qui serait peut- être plus pratique que le précédent.

    Another example might be more practical than the previous one.

  36. serait celui- là ici.

    Here it is.

  37. On a une fonction ici qui sert à déterminer si un nombre est pair.

    Here’s a function that checks whether a number is even.

  38. Donc vraiment la fonction prend un paramètre x, puis

    It takes one parameter, x,

  39. fait rien d'autre que retourner si x modulo 2 est égal à 0.

    and simply returns whether x modulo 2 equals zero.

  40. On en a une autre qui sert à déterminer si un nombre est positif,

    We also have another function that checks whether a number is positive,

  41. donc plus grand ou égal à 0.

    meaning greater than or equal to zero.

  42. On a un tableau ici, puis on peut dans le fond aller utiliser la fonction filter qui

    Here’s an array, and we can use the built-in 'filter' method,

  43. est définie sur tous les tableaux

    which is available on all arrays,

  44. pour aller filtrer les éléments selon cette fonction- là.

    to filter its elements based on this function.

  45. Dans le fond, n'importe quel élément de ce tableau- là

    Essentially, any element in this array,

  46. qui retourne vrai pour cette condition- là.

    that satisfies this condition and returns true,

  47. va être gardé, puis tous les autres vont être discartés.

    will be kept; all others will be discarded.

  48. Dans le fond, c'est une fonction qui va appliquer ça sur chacun des éléments,

    Essentially, it’s a function that applies this condition to each element,

  49. puis créer un tableau en fonction de ça.

    then creates a new array based on the results.

  50. Donc, cette fonctionnalité- là dans les langages est particulièrement pratique dans

    So, this feature is especially useful in programming,

  51. le contexte de programmation événementielle.

    particularly in event-driven programming contexts.

  52. La programmation événementielle,

    Event-driven programming,

  53. c'est un paradigme de programmation qui va focusser sur les événements qui peuvent

    is a programming paradigm that focuses on events that may occur while a program is running,

  54. se produire pendant l'exécution d'un programme.

    events that can happen at any time during program execution.

  55. Dans le fond, ça s'oppose à la programmation séquentielle,

    Fundamentally, it contrasts with sequential programming,

  56. ce que vous êtes habitués de faire jusqu'à maintenant.

    the approach you’ve been using up to now.

  57. La programmation séquentielle,

    Sequential programming means,

  58. c'est quand vous programmez dans le but que tout s'exécute à peu près dans un ordre

    writing code with the intention that everything executes roughly in a predefined order,

  59. prédéfini. Dans la programmation événementielle,

    whereas in event-driven programming,

  60. on va plutôt focusser sur qu'est- ce qui pourrait se produire comme événement,

    we instead focus on what events might occur,

  61. puis qu'est- ce qu'on fait selon quel événement se produit.

    and then decide what action to take depending on which event occurs.

  62. Un exemple de ça, ça serait sur une page web.

    A typical example is web development.

  63. Un utilisateur sur une page web peut cliquer sur n'importe quel bouton n'importe

    A user on a webpage can click any button at any time,

  64. quand. On n'a pas une séquence d'événements prédéterminée,

    there’s no predetermined sequence of events,

  65. on a vraiment juste un tas pont de boutons sur lesquels on peut cliquer,

    just a collection of buttons available for clicking,

  66. puis ça va être à l'utilisateur de décider qu'est- ce qu'il fait.

    and the user decides exactly what to do.

  67. La programmation événementielle repose donc sur définir des actions à prendre en

    Thus, event-driven programming relies on defining actions to take in response to,

  68. réaction à ce que les utilisateurs vont faire.

    what users will actually do.

  69. Mettons qu'on se fait une page web

    Suppose we build a webpage that responds to two or three actions,

  70. qui répond à deux, trois actions,

    Suppose we build a webpage that responds to two or three actions,

  71. on pourrait par exemple dire que quand on clique quelque part sur la page,

    for instance, we could specify that when someone clicks anywhere on the page,

  72. ben ça affiche un pop- up, ou

    a pop-up appears;

  73. quand on appuie sur la touche espace,

    or when they press the spacebar,

  74. ça affiche bonjour dans la console, par exemple.

    it prints 'Hello' in the console.

  75. Le langage JavaScript a vraiment été conçu spécifiquement pour ce genre de code

    The JavaScript language was specifically designed for this kind of usage,

  76. utilisation- là.

    that is, for writing event-driven code.

  77. ça paraît dans justement dans cette fonctionnalité là,

    This becomes apparent precisely in this feature,

  78. ça paraît dans le fait que les fonctions soient des valeurs

    namely, that functions themselves are values,

  79. comme les autres.

    just like other values.

  80. Mettons qu'on se définit une fonction ici qui va afficher un pop up à l'écran.

    Suppose we define a function here that displays a pop-up on screen.

  81. On peut directement passer

    We can directly pass

  82. cette valeur- là, donc la valeur contenue dans la variable popup,

    this value—the value stored in the variable 'popup'—

  83. à une fonction qui va se charger d'enregistrer une paire de"

    to another function, which handles recording a pair of

  84. selon tel événement, exécute telle fonction".

    'when a certain event occurs, execute a certain function' rule.

  85. Dans le fond, ici ce que ça dit, c'est

    Essentially, what this says here is:

  86. quand on a un événement de type clic, il

    when a click-type event occurs,

  87. faut exécuter la fonction popup.

    execute the 'popup' function.

  88. Remarquez vraiment qu'ici on parle de la fonction,

    Notice carefully: here we refer to the function itself,

  89. ici on n'exécute pas la fonction popup, on fait vraiment

    we are not calling the 'popup' function; instead, we are simply

  90. juste donner une référence à ce qu'il y a dans cette variable- là.

    providing a reference to what’s stored in this variable.