IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Ludique] Défis code en un tweet


Sujet :

JavaScript

  1. #401
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Variables globales ? Où ça ?
    One Web to rule them all

  2. #402
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Ben, je n'ai pas vu un seul var/let, pour déclarer tes variables...

    Pendant ce temps-là, j'ai encore réussi à raccourcir ma solution à 38 chars, avec un var ^^
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  3. #403
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Rha j'ai un truc qui fait 40 caractères mais qui ne marche pas avec arguments
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #404
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Rha j'ai un truc qui fait 40 caractères mais qui ne marche pas avec arguments
    Avec un var ? ^^

    Sinon, en résumé...
    avec un var -> j'arrive à 38 chars
    sans le var -> j'arrive à 34 chars

    à vous de voir
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  5. #405
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    39
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=m=>(...a)=>b=>m.bind(...a).apply(8,b)
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #406
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par Watilin Voir le message
    39
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=m=>(...a)=>b=>m.bind(...a).apply(8,b)
    ça fait donc encore au moins 3 de trop ^^
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  7. #407
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Lcf.vs Voir le message
    Ben, je n'ai pas vu un seul var/let, pour déclarer tes variables...
    Ce sont toutes des variables locales déclarées en tant qu'argument de fonction.

    Il va falloir réviser ES6

    Je reste sur ma dernière solution à 37 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(c,...r)=>a=>F.call(c,...r,...a)
    One Web to rule them all

  8. #408
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Désolé je ne trouve pas mieux que 39, je vais faire une pause et y revenir peut-être ce soir.
    Au moins, ce défi m'a aidé à mieux comprendre l'opérateur ... que je maîtrisais mal
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #409
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Ce sont toutes des variables locales déclarées en tant qu'argument de fonction.

    Il va falloir réviser ES6
    Et ton f alors? ^^

    Citation Envoyé par SylvainPV Voir le message
    Je reste sur ma dernière solution à 37 caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(c,...r)=>a=>F.call(c,...r,...a)
    Je pense que c'est la meilleure, jusqu'ici... concernant la mienne, j'sais pas trop ce que je testais mais j'crois que j'me suis emmêlé les pinceaux dans mes versions... car au reboot du pc, l'une marchait avec array/arguments, l'autre avec des params bindés...

    Pour parfaire la tienne, mais qui ne peut, non-plus, respecter le "no globals", sans dépasser la limite de taille en même temps, je propose celle-ci :

    f=m=>(i,...a)=>b=>m.apply(i,a.concat(b))
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  10. #410
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Parfaire ? Ta version est plus longue, *peut mieux faire* et on s'en fiche du f, c'est juste le nom donné à la fonction pour tester les exemples. Ça devrait même pas compter dans le décompte

    Pour aller plus loin dans la recette du curry :
    si F=>F.bind.bind(F) est la recette du curry en 2 temps, c'est à dire curry2(func)(...args1)(...args2) === func.call(...args1, ...args2)

    - Quelle est la solution la plus courte pour le curry en 3 temps, c'est-à-dire curry3(func)(...args1)(...args2)(..args3) === func.call(...args1, ...args2, ..args3) ?

    curry3("".substring)("hello world!")(6)(11) === "world";

    - Quelle est le solution la plus courte pour le curry à n temps, c'est-à-dire curryN(n)(func)(...args1)(...args2) (...) (...argsN) === func.call(...args1, ..., ...argsN)

    curryN(1)("".substring)("hello world", 6, 11) === "world";
    curryN(2)("".substring)("hello world", 6)(11) === "world";
    curryN(2)("".substring)("hello world")(6, 11) === "world";
    curryN(3)("".substring)("hello world!")(6)(11) === "world";
    curryN(3)("".substring)("hello world!",6)()(11) === "world";

    curry curry ! curryyy !
    One Web to rule them all

  11. #411
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Hum, oui, il y avait visiblement un truc que j'avais pas saisi avec le spread... merci aussi et bien joué
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  12. #412
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Vous oubliez un détail : ni le spread ni concat ne marchent avec un objet arguments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (function () {
      var result = substringFromHello(arguments);
      console.log(result);
      console.assert("world" === result, "failed");
    }(6, 11));
    C'est à cause de ça que j'ai pas pu me débarrasser de mon apply
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #413
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Si on oublie cette contrainte du arguments on peut descendre à 33 en reprenant la solution de Sylvain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f=F=>(...p)=>a=>F.call(...p,...a)
    En effet rien ne nous oblige à distinguer le premier argument (anciennement c) du reste des arguments (r).

    Avec le test case de mon précédent post, j'obtiens cette erreur sous Firefox :
    TypeError: a[Symbol.iterator] is not a function
    Il semblerait que le spread appelle en interne le même mécanisme d'itération que for..of. Dans SpiderMonkey tout du moins.

    Avec Chrome… Pas d'erreur. Ok, si je suis le seul ici à utiliser Firefox, je comprends mieux pourquoi personne n'avait remarqué ce problème avec arguments avant moi. Il s'agit d'un bug de Firefox.

    Note au passage, les erreurs dûes au spread sous V8 sont plus difficiles à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (function (nonIterable) { console.log(...nonIterable); }(42))
    Uncaught TypeError: undefined is not a function(…)
    En attendant, on est sur un double score de 33 (V8) / 39 (SpiderMonkey).




    Citation Envoyé par SylvainPV Voir le message
    Pour aller plus loin dans la recette du curry :
    Voilà voilà. Désolé. Vraiment.

    Citation Envoyé par SylvainPV Voir le message
    - Quelle est le solution la plus courte pour le curry à n temps, c'est-à-dire curryN(n)(func)(...args1)(...args2) (...) (...argsN) === func.call(...args1, ..., ...argsN)

    curryN(1)("".substring)("hello world", 6, 11) === "world";
    curryN(2)("".substring)("hello world", 6)(11) === "world";
    curryN(2)("".substring)("hello world")(6, 11) === "world";
    curryN(3)("".substring)("hello world!")(6)(11) === "world";
    curryN(3)("".substring)("hello world!",6)()(11) === "world";
    Là ça me fait réfléchir. Qu'est-ce qui se passerait si on ne donnait pas le nombre de temps (l'arité) en paramètre ? A priori on ne saurait pas à quel moment renvoyer une fonction ou la valeur finale. Mais en utilisant un Proxy, je pense qu'on peut renvoyer un objet qui apparaît comme une valeur mais qui peut également se comporter comme une fonction.

    Mais bref ^^ Je vais déjà tâcher de répondre à tes deux questions.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #414
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ah ben oui c'est évident comme optimisation, je ne sais pas comment j'ai pu louper ça... Parfois on ne voit pas les choses qui sautent aux yeux.

    L'opérateur spread gère bien les arguments de fonction, c'est d'ailleurs l'exemple de démo le plus couramment utilisé. Mais son implémentation est encore balbutiante sur les navigateurs. Mieux vaut tester le code transpilé par Babel.

    Citation Envoyé par Watilin Voir le message
    A priori on ne saurait pas à quel moment renvoyer une fonction ou la valeur finale. Mais en utilisant un Proxy, je pense qu'on peut renvoyer un objet qui apparaît comme une valeur mais qui peut également se comporter comme une fonction.
    Ce qui serait à la fois très très cool et très très idiot Pour un usage "pratique" d'une telle fonction, l'arité est toujours prédéfinie. Sinon on ne sait plus ce qu'on manipule.

    J'ai choisi de passer l'arité en argument initial parce que ça simplifie de mon point de vue le code la fonction derrière. On supposera qu'il s'agit toujours d'un nombre entier supérieur ou égal à 1.

    Voilà ma solution :

    Non minifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var curry3= function(F){  
      var n = 3;
      var argsStack = [];
     
      return function R(...args){
        argsStack.push(...args);
        return --n ? R : F.call(...argsStack)
      }
     
    }
    curryN minifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var curryN = n=>(F,s=[],R=(...a)=>(s.push(...a),--n?R:F.call(...s)))=>R

    Et une version encore plus récursive, mais pas forcément plus courte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var curryN = n=>(f,...s)=>(...a)=>--n?curryN(n)(f,...s,...a):f.call(...s,...a)
    One Web to rule them all

  15. #415
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    J'ai trouvé des trucs pour curryN. Curieusement, j'ai deux solutions légèrement différentes mais qui font la même longueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n=>f=>{var r=(n,...a)=>n?(...b)=>r(--n,...a,...b):f.call(...a);return r(n)}
    n=>f=>function r(n,...a){return n?(...b)=>r(--n,...a,...b):f.call(...a)}(n)
    Ce qui montre que ce n'est pas forcément gagnant de remplacer function par var.

    Je n'ai pas pensé à utiliser les valeurs d'arguments par défaut du coup on peut peut-être trouver plus court en mélangeant nos deux versions.

    Au fait j'ai essayé Babel, c'est impressionnant Mais il doit y avoir des trucs qu'il ne peut pas faire, non ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  16. #416
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    J'pense avoir mieux, les gars...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var c,curryN=c=i=>(f,...a)=>i?c(--i).bind(i,f,...a):f.call(...a)
    Qu'en pensez-vous?

    En non-minifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var curryN;
     
    curryN = function (arity) {
        return function (fn, ...args) {
            return arity
                ? curryN(--arity).bind(arity, fn, ...args)
                : fn.call(...args);
        };
    };

    EDIT:

    En bonus, par rapport aux vôtres, la mienne marche aussi avec arity = 0
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  17. #417
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Vous aimez l'épicé? J'crois que ça va vous plaire... ^^

    Cette version a la même longueur que celle de SylvainPV... mais elle est réutilisable et supporte des usages supplémentaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var c,curryN=c=(...a)=>((i,f,...b)=>i--?c(i,f,...b):f.call(...b)).bind(a,...a)
    Démo

    Curry thaï?


    EDIT :

    Même si, perso, je trouverais plus logique et plus élégant que le arity = 0 ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curryN(0, "".substring, "hello world!", 6, 11)
    Ce qui donnerait, en version courte ne permettant pas d'aliaser curryN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var c,curryN=c=(i,f,...a)=>i?c.bind(i,--i,...(f?[f,...a]:a)):f.call(...a)
    Démo


    Ou en version longue, permettant d'aliaser curryN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var c,curryN=c=(i,f,...a)=>i<1?f.call(...a):c.bind(i,...(i?[--i]:[]),...(f?[f,...a]:a))
    Démo
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  18. #418
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ben si l'arité est nulle par définition c'est plus du Curry vu qu'on ne retourne plus de fonction. Et ça ne présente pas plus d'un intérêt qu'un f.call ^^

    Pas bête le bind, j'oublie toujours que les arguments bound sont concaténés et non remplacés. Du coup je pense que ta solution curryN = i=>(f,...a)=>i?curryN(i-1).bind(f,f,...a):f.call(...a) est la meilleure.

    Difficile de savoir quoi mettre comme premier argument du bind, le contexte des fonctions curry n'a en principe pas d'importance vu qu'on finit par un .call.

    @Lcf: pas compris ce que tu voulais dire par "aliaser"
    One Web to rule them all

  19. #419
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    740
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 740
    Points : 805
    Points
    805
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Ben si l'arité est nulle par définition c'est plus du Curry vu qu'on ne retourne plus de fonction. Et ça ne présente pas plus d'un intérêt qu'un f.call ^^
    C'était un peu l'idée, que l'on puisse aussi s'en servir comme d'un .call... avec une légère différence tout de même, c'est que dans l'usage avec une méthode d'un objet, c'est qu'on peut éviter l'accès à la méthode (en tant que telle) et/ou de devoir connaître l'objet en question.

    Citation Envoyé par SylvainPV Voir le message
    Pas bête le bind, j'oublie toujours que les arguments bound sont concaténés et non remplacés. Du coup je pense que ta solution curryN = i=>(f,...a)=>i?curryN(i-1).bind(f,f,...a):f.call(...a) est la meilleure.
    La plus courte, oui... mais à mon sens, pas la meilleure, perso, je choisirais tout de même une des versions réutilisables...

    En effet, si on ne peut se resservir d'une des fonctions résultantes, connaissant déjà les premiers arguments spécifiés, pour faire un second appel, on n'en utilise son potentiel qu'à moitié.


    Citation Envoyé par SylvainPV Voir le message
    Difficile de savoir quoi mettre comme premier argument du bind, le contexte des fonctions curry n'a en principe pas d'importance vu qu'on finit par un .call.
    Pour ça que j'ai mis le arity, mais j'aurais pu mettre n'importe quoi, tant que ça fait sauter le param du contexte.


    Citation Envoyé par SylvainPV Voir le message
    @Lcf: pas compris ce que tu voulais dire par "aliaser"
    Bah, faire une copie de curryN, quoi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var alias;
     
    alias = curryN();
    Afin d'obtenir plus facilement de l'aide, n'hésitez pas à poster votre code de carte bancaire

    Mon GitHub

    Une alternative à jQuery, Angular, Vue.js, React, ... ? Testez anticore, en quelques secondes à peine !
    (Contributions bienvenues)

  20. #420
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je ne comprends pas pourquoi tu dis que cette version n'est pas réutilisable. Toutes les fonctions sont locales donc regenérées.

    Dans tes dernières versions tu as réduit de 1 le décompte des appels en ajoutant l'arité avec le reste des paramètres, ce qui n'a pas beaucoup de sens selon moi. En repartant des tests d'origine, ça fonctionne très bien et c'est réutilisable : démo
    One Web to rule them all

Discussions similaires

  1. Défi : Toutes les semaines un peu de code pour aller plus loin avec Windows 7
    Par Jérôme Lambert dans le forum Développement Windows
    Réponses: 41
    Dernier message: 05/01/2012, 13h00
  2. [Ludique] Mini-jeu : épisode 3 (déchiffrage de code, niveau : facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 03/11/2010, 01h45
  3. [Ludique] Mini-jeu - niveau 2 : déchiffrage de code (niveau modéré)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 29/07/2010, 00h15
  4. [Ludique] Mini-jeu : déchiffrage de code (niveau facile)
    Par RomainVALERI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/07/2010, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo