cnam:utc503:td3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
cnam:utc503:td3 [2026/10/20 02:20] – jcheroncnam:utc503:td3 [2026/10/20 09:17] (Version actuelle) – jcheron
Ligne 1: Ligne 1:
-====== TD 3 : Fondamentaux de la programmation fonctionnelle en JavaScript ======+====== TD 3 : Pf en JS ======
  
 <WRAP info round> <WRAP info round>
Ligne 21: Ligne 21:
 | ''push'', ''pop'', ''shift'', ''unshift'', ''splice'', ''sort'', ''reverse'', ''fill'' | ''map'', ''filter'', ''reduce'', ''slice'', ''concat'', ''[...arr]'', ''toSorted'', ''toReversed'', ''with'' | | ''push'', ''pop'', ''shift'', ''unshift'', ''splice'', ''sort'', ''reverse'', ''fill'' | ''map'', ''filter'', ''reduce'', ''slice'', ''concat'', ''[...arr]'', ''toSorted'', ''toReversed'', ''with'' |
  
-Gardez ce tableau sous les yeux : ''sort'' et ''reverse'' sont des pièges classiques.+''sort'' et ''reverse'' sont des pièges classiques.
 </WRAP> </WRAP>
  
Ligne 30: Ligne 30:
 ==== 1.1 - Écrire une fonction pure ==== ==== 1.1 - Écrire une fonction pure ====
  
-  * Écrire ''double(numbers)'' qui retourne un **nouveau** tableau où chaque nombre est doublé. **Interdiction** d'utiliser ''for'', ''while'' ou ''forEach'' : utilisez ''map''.+  * Écrire ''double(numbers)'' qui retourne un **nouveau** tableau où chaque nombre est doublé. 
   * Écrire les tests suivants :   * Écrire les tests suivants :
  
Ligne 76: Ligne 76:
 </sxh> </sxh>
  
-<WRAP tip round> 
-**Indice pour D** : une fonction pure ne peut pas "aller chercher" l'heure. Que faut-il changer dans sa signature ? 
-</WRAP> 
  
 ==== 1.4 - Pour aller plus loin : l'impureté cachée ==== ==== 1.4 - Pour aller plus loin : l'impureté cachée ====
Ligne 183: Ligne 180:
   * Citez un cas où la mutation locale est acceptable (ex : accumulateur dans un ''reduce'' non exposé). À quelle condition préserve-t-elle la pureté //vue de l'extérieur// ?   * Citez un cas où la mutation locale est acceptable (ex : accumulateur dans un ''reduce'' non exposé). À quelle condition préserve-t-elle la pureté //vue de l'extérieur// ?
 </WRAP> </WRAP>
- 
-Je ne connaissais pas la balise ''<sxh>''. C'est celle du plugin SyntaxHighlighter pour DokuWiki, et je n'y ai pas pensé. Je suis parti sur ''<code javascript>'' puis sur des ''%%...%%'', alors que les blocs ''<sxh javascript>'' sont la bonne solution ici. 
-Elle règle aussi le problème d'imbrication, parce que le contenu d'un bloc ''<sxh>'' n'est pas interprété par DokuWiki. Les apostrophes ne risquent plus de casser le reste de la page. 
-Dans la version ci-dessous : 
- 
-Code : chaque extrait est dans un vrai bloc ''<sxh javascript>'', y compris les expressions courtes des listes. 
-Texte : les noms de fonctions dans les phrases sont en monospace avec ''%%...%%'', jamais avec le double apostrophe. 
-Code impératif de 5.1 : il est en un seul bloc au lieu d'une liste à puces. 
-Jeu de données de l'exercice 5 : il est remis en JS dans un bloc, comme dans ton énoncé d'origine. 
  
 ===== Exercice 3 : Transparence référentielle ===== ===== Exercice 3 : Transparence référentielle =====
Ligne 427: Ligne 415:
  
   * Rejouez une liste d'actions avec %%reduce%%. Observez le lien avec Redux et le pattern "état = fonction des événements passés".   * Rejouez une liste d'actions avec %%reduce%%. Observez le lien avec Redux et le pattern "état = fonction des événements passés".
 +
  
 <WRAP todo round> <WRAP todo round>
Ligne 436: Ligne 425:
   * La version fonctionnelle parcourt plusieurs fois le tableau (%%filter%%, %%map%%, %%reduce%%). Est-ce un problème ? Comment un //transducer// ou un évaluateur paresseux y répond-il ? À partir de quelle taille de données cela compte-t-il vraiment ?   * La version fonctionnelle parcourt plusieurs fois le tableau (%%filter%%, %%map%%, %%reduce%%). Est-ce un problème ? Comment un //transducer// ou un évaluateur paresseux y répond-il ? À partir de quelle taille de données cela compte-t-il vraiment ?
   * Dans 5.6 (réducteur), pourquoi l'immutabilité rend-elle possible le "time travel debugging" et l'annulation (undo) ?   * Dans 5.6 (réducteur), pourquoi l'immutabilité rend-elle possible le "time travel debugging" et l'annulation (undo) ?
-</WRAP+</WRAP>
  • cnam/utc503/td3.1792455606.txt.gz
  • Dernière modification : il y a 7 jours
  • de jcheron