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 :

Apprendre le Javascript et Node.js from scratch


Sujet :

JavaScript

  1. #161
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    OK merci !

  2. #162
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Un nouvel exercice est disponible ICI pour mettre à profit ce week-end de Pâques

  3. #163
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 40
    Points : 54
    Points
    54
    Par défaut
    Merci !

  4. #164
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Merci.

    Cet exercice m'a fait réfléchir... Je me suis aperçu qu'on ne pouvait pas modifier une string même en JS !!!

  5. #165
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Le principe c'est :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var chaine = "abc"; 
    console.log(chaine);// affiche --> abc
    chaine += "d";
    console.log(chaine);// affiche --> abcd

  6. #166
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Oui c'est finalement ce que j'ai fait en troisième solution (après celle des tableaux et de la fonction repeat).

    Je ne sais pas comment cela se passe en JS (je me le demande d'ailleurs) mais en Java une instruction comme "chaine += "d";" ne modifie pas l'objet "chaine", un autre objet string est instancié... Je crois que c'est pour cela que certains utilise un stringbuffer...

    Je viens de le faire en Java :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public class Sapin {
     
        public static void main(String[] args) {
     
            int leavesHeight = 5;
            int trunkHeight = 4;
            int trunkWidth = 3;
     
            String line = "" , sapin = "";
     
            int nbrSpace ;
            int nbrCroix ;
            int tailleLigne ;
     
            //Le feuillage...
            for(int i= 0; i<leavesHeight; i++){
     
                  nbrSpace = leavesHeight-1-i ;
                  nbrCroix = 2*i + 1 ;
                  tailleLigne = nbrSpace + nbrCroix ;
     
                  for(int j=0; j<nbrSpace; j++){    
                    line += " ";    
                  }
     
                  for(int j=nbrSpace; j<tailleLigne; j++){
                    line += "*";  
                  } 
     
                  sapin += line +"\n";
                  line = "";
     
            }
     
            nbrSpace = leavesHeight-1-(trunkWidth-1)/2;
            nbrCroix = trunkWidth ;
            tailleLigne = nbrSpace + nbrCroix ;
     
            for(int j=0; j<nbrSpace; j++) line += " ";        
            for(int j=nbrSpace; j<tailleLigne; j++) line += "*";
            for(int i=0; i<trunkHeight; i++) sapin += line +"\n";
     
     
            System.out.println(sapin);
     
        }
    }

  7. #167
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    @Beginner,

    Non en JavaScript il n'y a pas d'objet StringBuffer.

    Mais cela ne gène pas dans cet exercice car comme tu le dis en faisant maString += maString + "chaine"; le compilateur crée une nouvelle instance de maString en concaténant "chaine" avec l'ancienne instance de maString.

    Mais lorsque nous aurons vu les classes en ES6 je ferai un exercice dans lequel il sera demandé de créé un objet StringBuffer

  8. #168
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Justement j'ai vu un tout petit peu les classes en ES6, ça a l'air vraiment bien, ça me semble plus familier et plus lisible, en JS j'ai du mal à savoir la différence entre fonction et classe, je trouve ça étrange au premier abord surtout quand on a fait un peu de Java...

    Un objet StringBuffer en ES6 ça m'a l'air intéressant...

  9. #169
    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
    Il n'y a pas de classes en JavaScript.

    Vous essayez de reproduire un concept servant aux micro-optimisations, un Buffer, en utilisant des aspects haut niveau du langage, les classes ES6 (qui pour rappel ne sont pas des classes dans leur définition traditionnelle OOP mais du sucre syntaxique pour faire des objets prototypés avec constructeurs). Je suis prêt à parier mon chapeau que ce StringBuffer fera une contre-perf par rapport à un simple String#concat. Pour que cela soit vraiment intéressant, il faudrait utiliser les TypedArray comme le fait Node.js et son API Buffer : https://nodejs.org/api/buffer.html

    Rappelons aussi qu'en JavaScript, les primitives sont immutables. Les valeurs primitives sont stockées dans une autre pile que celle des valeurs par référence. Pour les primitives, la valeur est directement stockée à l'emplacement mémoire attribué pour la variable. Tandis que pour les références, ce qui est stocké, c'est un pointeur vers l'emplacement mémoire réel de l'objet. Manipuler des primitives est donc plus rapide que ce que vous croyez, et beaucoup de micro-optimisations dans d'autres langages n'ont pas lieu d'être en JavaScript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function changeStuff(a, b, c){
      a = "changed";
      b.item = "changed";
      c = {item: "changed"};
    }
     
    var primitive = "unchanged";
    var reference1 = {item: "unchanged"};
    var reference2 = {item: "unchanged"};
     
    changeStuff(primitive , reference1 , reference2 );
     
    console.log(primitive, reference1.item, reference2.item);
    // affiche unchanged changed unchanged

  10. #170
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Merci Sylvain pour ces explications sans appel

    Néanmoins, utiliser le sucre syntaxique pour faire des classes à l'identique d'autres langages historiquement objet resterait un exercice pédagogique. Une mesure comparative des célérités d’exécution pouvant ajouter vérité et piment à l'exercice.

    Je suis également convaincu que tu as raison en anticipant les résultats de ces mesures.
    Dommage, j'aurais bien aimé te voler ton chapeau

  11. #171
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par autran Voir le message
    Néanmoins, utiliser le sucre syntaxique pour faire des classes à l'identique d'autres langages historiquement objet resterait un exercice pédagogique.
    D'un autre côté javascript a tellement de spécificités que je ne sais pas si l'on y gagnerait quelque chose, tout au moins j'ai des doutes dans une phase d'initiation au langage. Il y a tellement de choses à voir et qui sont différentes que je ne sais pas si c'est une bonne idée de vouloir transposer systématiquement vers un autre langage que javascript. J'aurais plutôt tendance à dire aux débutant qu'il est préférable "d'oublier" les autres langages. Enfin pas tout à fait, il reste l'algorithmie et les concepts généraux, mais pour le reste c'est un langage un peu à part et pour mieux l'apprivoiser peut être vaut-il mieux ne pas trop chercher à le comparer point par point.

    Enfin c'est le ressenti que j'ai eu quand je suis passé de php à javascript. A partir du moment où je n'ai plus eu le réflexe de me demander comment j'aurais fait avec mon premier langage, j'ai avancé beaucoup plus vite en javascript

  12. #172
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    Il me faut du temps pour réfléchir au message de Sylvain, j'y reviendrai plus tard...

    Sinon pour ce qui est du StringBuffer ça part d'un constat quand même : pour faire l'exercice je me suis aperçu qu'on ne pouvait pas changer une string... Par exemple, je ne peux pas (à moins que je me trompe ?) changer le caractère de rang n, ou bien le supprimer, ou insérer un caractère...

    On peut faire tout ça avec un tableau par exemple... Alors l'idée ce serait de pouvoir faire cela avec une string... Alors j'ai pensé qu'on pouvait à chaque fois transformer la string en tableau, faire ce qu'on a à faire sur le tableau et transformer le résultat en string... Ou bien on utilise à chaque fois juste les fonctions slice, concat... Plus rapide ?

    Dans tous les cas si on avait un tel objet avec certaines des méthodes de l'objet tableau ce serait plus simple, non ?

  13. #173
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui on transforme souvent les chaines de caractères en tableau avec les méthodes "split" et ensuite "join" pour concaténer le résultat après traitement.

    Cela dit on peut également accéder aux éléments d'une chaine de caractère avec son index
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var s = 'rete ferer';
    alert(s[5]);
    // affiche "f"
    ... mais pour autant on ne peut pas appliquer directement les fonctions sur les tableaux sur une chaine de caractères (même principe que dans d'autres langages).

    Il y a plusieurs exos sur ce sujet dans le tuto javascript mais ils viennent un peu plus tard

  14. #174
    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
    @autran: c'est bien là le problème, il ne s'agit pas de classes à l'identique d'autres langages historiquement objet. Je le répète, il n'y a pas de classes en JavaScript. C'est pour ça que je déteste la notation class ES6 : elle induit en erreur les développeurs quant au fonctionnement réel des prototypes. J'en ai déjà beaucoup parlé sur Developpez, et il y a aussi énormément de littérature sur ce sujet : https://github.com/joshburgess/not-awesome-es6-classes

    Ceci dit, je ne suis pas opposé à les présenter et à les utiliser pour un exercice. Par contre, il me paraît primordial de les présenter en dernier, après avoir fait des exercices sur les prototypes, puis sur les constructeurs, puisque c'est ce qui est utilisé en arrière-plan par les classes ES6. Si l'élève ne connaît pas ces notions, il n'a aucune chance de bien comprendre les classes ES6. Je le vois déjà à l'oeuvre avec mes collègues issus du monde Java: depuis qu'on utilise Babel, ils utilisent à tout bout de champ le mot-clé extends et font des hiérarchies de classes complètement absurdes quand un simple mixin ferait parfaitement le travail.

    @ABCIWEB: même avis que toi. Je sais repérer de quel langage vient un codeur en regardant un bout de son JS. Mais aucun autre langage ne met en avant tous les atouts propres à JS.

    @Beginner: oui, les String ne peuvent pas être changées, c'est ce que je veux dire par "les primitives sont immutables". Mais les String disposent de nombreuses méthodes utilitaires : https://developer.mozilla.org/fr/doc...ring/prototype

  15. #175
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Cela dit on peut également accéder aux éléments d'une chaine de caractère avec son index
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var s = 'rete ferer';
    alert(s[5]);
    // affiche "f"
    Ah ok si j'ai bien compris c'est équivalent à : alert(s.charAt(5));

    Ok mais je crois qu'on ne peut pas faire : s[5] = 'a' ; ni s.charAt(5) = 'a' ; d'où la question du StringBuffer...

    Citation Envoyé par ABCIWEB Voir le message
    ... mais pour autant on ne peut pas appliquer directement les fonctions sur les tableaux sur une chaine de caractères (même principe que dans d'autres langages).
    Oui d'où peut-être une des raisons de l'introduction de la classe StringBuffer en Java... ? En gros une string qu'on peut modifier...

    Citation Envoyé par SylvainPV Voir le message

    @Beginner: oui, les String ne peuvent pas être changées, c'est ce que je veux dire par "les primitives sont immutables". Mais les String disposent de nombreuses méthodes utilitaires : https://developer.mozilla.org/fr/doc...ring/prototype
    Ah ok, mais en JS les strings sont des objets ou des primitives ? Ou peut-être que la question ne se pose pas en JS... Ah je viens du Java moi (niveau débutant cela dit)...

  16. #176
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Oui d'où peut-être une des raisons de l'introduction de la classe StringBuffer en Java... ? En gros une string qu'on peut modifier...
    SylvainPV t'a donné un lien vers les méthodes disponibles. Et si ça ne suffit pas, comme dit plus haut on peut transformer la chaine en tableau et utiliser les méthodes des tableaux. En php c'est un peu le même principe donc je n'ai pas eu ta frustration Peut-être y a t-il plus de similitude entre php et javascript parce que ce sont deux langage web...

  17. #177
    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
    Les String sont des primitives, mais les primitives sont automatiquement castées en leurs équivalents objets (constructeurs String/Number/Boolean) dès qu'on utilise une méthode dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "test".toUpperCase()
    530..toFixed(1);
    3.14.toExponential(5)
    true.toString()
    De la même façon, lorsqu'on utilise un opérateur, les équivalents objets sont automatiquement castées en leurs valeurs primitives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typeof (new Number(42)) // object
    typeof (new Number(42) * 1) // number
    (new String("hello") + new String(" world")) // "hello world"
    !!(new Boolean(1)) // true

  18. #178
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    @Alain
    Je pense que ton conseil est sage ne pas mélanger les langage pour les débutant et suivre une progression qui s'appuie sur le langage cible

    @Sylvain
    Je ne voulais pas lancer un troll
    Mais merci pour ces explications techniques et ton retex sur les développeurs JEE qui arrivent sur JavaScript, parce-qu’il est plus avantageux, mais qui gardent leurs mauvaises manières.

    Alors du coup je renonce à cet éxo qui s’avérerait anti-pédagogique. Cependant quand j'aurai le temps je ferai une classe ES6 StringBuffer et je le testerai sur mon blog histoire de me faire de nouveaux amis
    Bref c'était une fausse bonne idée....

  19. #179
    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
    @autran: Je ne l'ai pas pris pour un troll, et n'y vois aucune animosité de ma part ; je tenais juste à souligner ce point de vigilance, parce que je connais par expérience toutes les déviances et incompréhensions que les classes ES6 peuvent susciter. C'est vrai que l'exemple du StringBuffer me paraît mal choisi, mais on peut sans doute trouver un sujet adéquat comme exercice pratique pour les classes ES6. Mais avant ça, il faut bosser les exos sur les prototypes, car c'est à la base de tout le reste.

  20. #180
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous, j'ai une question très bête à laquelle je n'ai jamais trouvé de réponse.

    Etant donné qu'on peut accéder aux bases de données avec angularJs et $http. et élaborer des mécanismes d'identification
    Etant donné que le serveur Apache existe

    A quoi sert Node.js ?
    Dernière modification par Invité ; 31/03/2016 à 01h02.

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. Apprendre le Node.JS from scratch
    Par TheSuperGeek dans le forum NodeJS
    Réponses: 62
    Dernier message: 08/02/2016, 11h25
  3. question linux from scratch
    Par e=mc2 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 06/01/2008, 14h11
  4. [Débutant] Commencer Java "from scratch"
    Par Rakken dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 25/04/2007, 09h42
  5. [VB.NET] Créer une textbox from scratch
    Par AP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2006, 10h09

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