Javascript : Bases du langage Le langage Javascript n’est qu’un langage de programmation parmi tant d’autres. Il est très répandu dans la mesure où c’est ce langage qui a été choisi pour rendre les pages web interactives. Il est donc au cœur des applications web qui se développent se plus en plus. Frise historique des langages Le schéma suivant, figurent les dates de création des langages les plus connus ainsi que leurs liens de parenté. diagram of programming languages history [source : http://rigaux.org/language-study/diagram-light.png] Un diagramme encore plus complet du même auteur est disponible ici À présent, nous allons nous intéresser au véritable sujet de ce cours c’est-à-dire le langage Javascript. Fiche d’identité du langage Javascript Date de création : 1995 Créateur : Brendan Eich pour le compte de la société Netscape Communication Corporation (éditeur d’un navigateur internet qui n’existe plus aujourd’hui). Logo : Version actuelle (en 2020) : La dernière version en date qui commence à être bien supportée dans les navigateurs internet est celle connue sous le nom de ECMAscript 7. Le nom ECMAscript au lieu de Javascript provient de l’organisation (Ecma International) qui standardise le langage et évite la confusion avec le langage Java avec lequel il n’a rien à voir malgré quelques ressemblances. Domaines d’utilisation : codage de pages web dynamiques à travers l’utilisation de librairies (JQuery, Bootstrap.js, Highcharts.js, D3.js, P5.js…) codage d’applications web côté serveur via Node.js Popularité : À la 7ième place dans le classement Tiobe en Août 2020. Javascript est le 2ème langage de script dans ce classement après Python. Caractéristiques principales du langage Javascript haut niveau interprété orienté objet (…mais également procédural) typage dynamique extensible Haut niveau Le niveau d’un langage de programmation traduit aussi bien sa dépendance vis à vis du matériel sur lequel il s’exécute que sa capacité à “faciliter” la tâche du programmeur en lui proposant un ensemble de fonctionnalités de base accessibles avec une syntaxe qui tend à se rapprocher du langage humain. Plus le niveau est bas, plus on se rapproche du matériel. Javascript est souvent considéré par ses adeptes comme un langage de très haut niveau pour le différencier un peu des langage C/C++, Java, PHP, Perl qui sont des langages de haut niveau. Il s’oppose alors à des langages bas niveau tels que les langages machine ou assembleur. Interprété Javascript est fondamentalement un langage interprété. Interprété signifie que l’on peut lancer directement l’exécution du programme correspondant au code source. Rappelez vous que le code source est toujours traduit en langage machine avant d’être exécuté. Dans un langage interprété, cette traduction est simplement transparente pour l’utilisateur. Dans un langage interprété, le code source peut prendre 2 formes : une seule instruction ; un ensemble d’instructions sauvegardées dans un fichier. Dans le 1ier cas, on exécutera un programme nommé interpréteur Javascript qui, comme son nom l’indique, interprète et exécute les instructions Javascript qu’on lui soumet. Par défaut, l’interpréteur se lance dans un mode appelé interactif qui consiste à attendre puis à exécuter chaque instruction saisie par l’opérateur, un peu à la manière d’une calculatrice. Dans le 2ième cas, on exécutera le même interpréteur mais, cette fois-ci, en lui indiquant le nom d’un fichier contenant du code Javascript. L’interpréteur exécutera alors, les unes après les autres, les instructions Javascript contenues dans le fichier et ce, sans aucune intervention de l’opérateur. Par opposition aux langages interprétés, on trouve les langages compilés. Compilé signifie que le code source doit d’abord être transformé sous forme d’un fichier — appelé exécutable — spécifique à la machine et au système d’exploitation sur lesquels on désire l’exécuter grâce à un programme communément appelé compilateur. Parmi les avantages des langages compilés, on retriendra leur plus grande rapidité par rapport aux langages interprétés et leur fonctionnement autonome (ils ne requièrent pas la présence d’un interpréteur sur la machine). Les langages interprétés offrent quant à eux une plus grande portabilité. Il est ainsi inutile de recompiler un fichier source codé dans un langage interprété lorsqu’on désire l’exécuter sous Linux alors qu’on l’a codé sous Windows (…à condition de ne pas faire appel à des spécificités de chaque plateforme). Pour réunir le meilleur des 2 mondes, on trouve maintenant des langages semi-compilés comme Python, Java, C#. Ces langages vont transformer le code source, de manière transparente pour l’utilisateur, dans un dialecte intermédiaire appelé bytecode. Ce bytecode reste indépendant de la plateforme mais autorise une plus grande rapidité d’exécution. Toutefois, les programmes semi-compilés nécessitent toujours la présence d’un interpréteur sur la machine (appelé Machine Vituelle dans le cas du langage Java ou framework .Net dans le cas du langage C#). Leur vitesse d’exécution est de ce fait toujours moins élevée que celle des programmes générés par les compilateurs. Depuis l’implication de Google dans le développement de Javascript, les performances du langage ont énormément progressé notamment grâce à l’utilisation d’une sorte d’interpréteur Javascript nommé V8 engine qui va compiler le code source “à la volée” (→ Just In Time Compiler) en réalisant au passage certaines optimisations. Ceci fait qu’il est désormais difficile d’affirmer que Javascript est interprété. Une évolution du moteur V8, avec son interpréteur appelé Ignition, utilise même la semi-compilation pour des questions de gain de mémoire (voir Firing up the Ignition Interpreter pour plus d’explications). Orienté objet La programmation objet est un modèle de programmation (on dit aussi parfois “paradigme”) qui consiste à décomposer les fonctionnalités d’un programme en terme d’interactions entre objets plutôt qu’en terme de séquences d’actions (cas du modèle de programmation dit procédural) Pour tenter d’illustrer les 2 approches, nous allons prendre un exemple qui consiste à calculer la circonférence d’un cercle. Ce traitement informatique se décompose de la façon suivante selon le modèle de programmation choisi : en programmation procédurale : saisir le rayon du cercle ; multiplier par 2 pour obtenir le diamètre ; multiplier par PI pour obtenir la circonférence ; afficher le résultat. en programmation objet : créer un objet de type Cercle en spécifiant son rayon ; “Demander” au cercle sa circonférence. C’est une de ses caractéristiques donc il sait la calculer lui-même et nous n’avons pas nécessairement besoin de connaître la formule ; afficher la valeur qu’il nous retourne. Typage dynamique En Javascript, les variables ne nécessitent pas de spécifier le type de la valeur qu’elles contiennent lors de leur déclaration : le type est déduit automatiquement lors de l’affectation d’une valeur à cette variable avec l’opérateur '=' dont la signification en informatique diffère donc de celle en mathématiques (affectation ≠ égalité). Exemple > var prompt = 'Saisissez votre nom : '; > typeof prompt < "string" > var anneeNaissance = 1980; < typeof anneeNaissance "number" Dans cet exemple, la variable prompt est considérée automatiquement de type “texte” après son affectation avec 'Saisissez votre nom : '. L’instruction typeof dont le rôle est justement de déterminer le type courant d’une variable renvoie effectivement "string". “String” signifie “chaîne” → du texte doit donc être considéré comme une “chaîne” de caractères). Dans ce même exemple, la variable anneeNaissance est considérée, quant à elle, de type “nombre” (→ "number"). Javascript, contrairement à de nombreux autres langages, ne distinguent pas les nombres entiers des nombres décimaux. Il n’existe donc qu’un seul type qui est number. En Javascript, la nature d’une variable peut également évoluer au cours du temps. Par exemple, une variable peut contenir un entier à un moment puis une chaîne de caractères à un autre moment. Exemple > var age = 18; > typeof age < "number" > age = 'inconnu'; > typeof age < "string" Dans cet exemple, on déclare la variable age et on lui affecte successivement une valeur numérique puis une valeur “texte” (on dit aussi alphanumérique). On constate bien que l’instruction typeof retourne 2 types qui reflètent la valeur courante que contient la variable age. Extensible Les possibilités de Javascript peuvent facilement être étendues grâce à l’adjonction de librairies — appelées aussi modules — qui donnent accès à des fonctionnalités couvrant de nombreux domaines (bases de données, web, calcul scientifique, réseau, traitement d’images …). Cette caractéristique fait de Javascript un langage généraliste même s’il est plus connu pour son utilisation dans les pages web. 🞄 🞄 🞄 Javascript Qt