Javascript est un langage de scripte executé par le navigateur coté client. C'est un langage object à prototype. Les objects ne sont pas des instances de classe, mais sont équipé de constructeur permettant de créer leur propriétés.
Les object javascripts :
Classe |
Description |
Exemple |
boolean |
Les valeurs logiques | true, false |
number |
Les nombre flottant sur 64 bits | 21, 1.5, 2.5e3, 0xFF, 010 |
string |
Les chaines de carcatères | "", "abc", 'abc', '\n', '\u000A |
math |
Des méthodes mathématiques | Math.PI, Math.sin, Math.exp |
array |
Les liste d'objects | [], [21,"abc",Math.cos] |
object |
Les objects | {toto:"titi", f:function(x){return x*x}, u:3} |
function |
Les functions | function sum(x,y){return x+y} |
date |
Les dates | new Date(); |
function A(x,y) {this.x=x; this.y=y;} // crée la classe A
function B(u,v) {this.u=u; this.v=v;} // crée la classe B
A1= new A(12, "toto") // crée l'objet A1 de classe A
B1 = new B(7, A) // crée l'objet B1 de classe B
B1.v.y // retourne "toto"
B1.v.y = "titi" // modifie sa valeur en "titi"
Selon les principes généraux de la programmation, celle-ci est séparé en unités liée entres elles selon un graphe transitif antisymétrique. Une unité tient dans un fichier et éxecute des méthodes définies dans l'unité en question et dans des unités en amont, mais elle peut utiliser une interface graphique qui est alors une portion de code html dans la page web, les balise utilisé sont identifié par un attribut id spécifique qu'il convient de déclaré dans le contexte graphique
Le programme est séparé en autant de fichiers qu'il y a d'unités, et le développeur ne travail que sur un fichier à la fois, pour éviter les modifications accidentelles intempestives.
L'une unité est composée d'une entête, d'un contexte, d'un interface graphique, d'un corps, d'une synopsie, et d'un teste.
La première unité que l'on conçoie est le tableau de saisie de plusieurs valeurs. Cela comprend un élément graphique, un tableau comprenant un titre, une liste de couple libellé-input pour la saisie.
Tableau de saisies |
|
Liste des attributs id utilisés : V1, V2, V3 |
|
<table> <tr><td colspan="2" align="center">TITRE</td></tr> <tr><td>L1</td><td><input type="text" id="V1" value="100" ></td></tr> <tr><td>L2</td><td><input type="text" id="V2" value="5000"></td></tr> <tr><td>L3</td><td><input type="text" id="V3" value="10" ></td></tr> </table> |
Affiche le titre TITRE Affiche le libellé L1 et l'input de saisie initialisé à 100 Affiche le libellé L2 et l'input de saisie initialisé à 5000 Affiche le libellé L3 et l'input de saisie initialisé à 10 |
La difficulter consiste à formalise le procédé d'intégration de l'unité dans un site web en minimiser l'effort du developpeur.
Tableau de saisies |
|
Liste des attributs id utilisés : data | |
<textarea id="data"></textarea> |
Affiche un champ multilignes de saisie |
Une liste de bouton de commande
Tableau de saisies et de commandes | |
Liste des attributs id utilisés : B1, B2, B3 |
|
<input type="button" name="B1" id="B1" value="B1"> <input type="button" name="B2" id="B2" value="B2"> <input type="button" name="B3" id="B3" value="B3"> |
Affiche le bouton B1 Affiche le bouton B2 Affiche le bouton B3 |
window.addEventListener("load", init, false) |
Associe à l'évènement "Chargement de la fenètre" l'action init(). |
function init(){ document.getElementById("B1").addEventListener("click",initL,false) document.getElementById("B2").addEventListener("click",aff,false) document.getElementById("B3").addEventListener("click",aff2,false) initL() } |
init() va associer au bouton d'id "B1" l'action initL(), au bouton d'id "B2" l'action aff(), et au bouton d'id "B3" l'action ok(), et puis va executer initL(). |
function initL(){ V1=parseInt(document.getElementById("V1").value) V2=parseInt(document.getElementById("V2").value) V3=parseInt(document.getElementById("V3").value) M = document.getElementById("data").value.split('\n').parseFloat } |
initL() va initialiser les variables V1,V2,V3 avec les valeurs saisies dans les champs input d'id respectif "V1", "V2", "V3". |
function aff() {alert([V1, V2, V3]) } |
aff() va afficher les valeurs V1, V2, V3 dans une fenètre alerte. |
function aff2() {alert(M) } |
ok() va afficher "ok" dans une fenètre alerte. |
var WV1 var WV2 var WV3 window.addEventListener("load",init,false) |
Définie les éléments WV1,WV2,WV3 Associe à l'évènement "Chargement de la fenètre" l'action init(). |
function init(){ WV1 = document.getElementById("V1") WV2 = document.getElementById("V2") WV3 = document.getElementById("V3") WV1.addEventListener("change", changeV1, false) WV2.addEventListener("change", changeV2, false) WV3.addEventListener("change", changeV3, false) } |
init() trouve les éléments WV1,WV2,WV3 |
function changeV1(){V1=parseInt(WV1.value)} |
changeV1() recopie la valeur saisie V1 |
function changeV2(){V2=parseInt(WV2.value)} |
changeV2() recopie la valeur saisie V2 |
function changeV3(){V3=parseInt(WV3.value)} |
changeV3() recopie la valeur saisie V3 |
contexte
M = Liste de nombres
WCanvas = Elément canvas
Tableau de saisies et de commandes | |
Interface graphique | Description |
<canvas id="canvas" width="400" height="200"></canvas> |
Canvas |
Corps |
Description |
function rand(n) Math.floor(n * Math.random()) |
rand(n) retourne un entier compris entre 0 et n-1 |
function minMax(M){ a=Infinity b=-Infinity let L = M.length for(var i=0;i<L;i++){ if (M[i]<a) {a=M[i]} if (M[i]>b) {b=M[i]} } return [a,b] } |
minMax(M) retourne le minimum et le maximum de la liste M sous la forme d'un couple. |
function draw(WCanvas,M,nlx,nl,legendY,legendX,titre1,titre2) { let m = 45 // marge let Lx = WCanvas.getAttribute("width")-2*m let Ly = WCanvas.getAttribute("height")-2*m let L = M.length let [a,b] = minMax(M) let ctx = WWWcanvas.getContext("2d") let d = (b-a)/nl let e = 0 while (d<1) {d*=10,e--;} while (d>10) {d/=10,e++;} if(d<2) Q=1 else if(d<4) Q=2 else Q=5 // pour obtenir des entiers compris entre 0 et 999 //Erreur à corriger, valable seulement si nl=1. let e0=Math.floor(e/3)*3 let e1=e-e0 Sig = new Array("p","n","µ","m",' ',"K","M","G","T") let s = Sig[4+e0/3]; e0=Math.pow(10,e0) e1=Math.pow(10,e1) a/=e0 b/=e0 Q*=e1 let a0 = Math.floor(a/Q)*Q a=a0 let gx = Lx/(L-1) let gy = Ly/(b-a) function fx(x) x*gx + m function fy(y) Ly-(y-a)*gy + m let n = (b-a)/Q+2 ctx.strokeStyle = "grey" ctx.beginPath() ctx.clearRect(0,0,Lx+2*m,Ly+2*m); for(let j=0; j<n; j++){ g = a0 + j*Q if (g<b) { let y=fy(g) ctx.moveTo(m, y); ctx.lineTo(Lx+m, y); ctx.fillText(cc(g.toString()+" "+s,9), 3, y); } } |
|
f //ctx.fillStyle = "rgba(255, 255, 0, .5)" Array.prototype.bcherche = function(x){ Array.prototype.bajoute = function(x){ Array.prototype.benleve = function(x){ function Test(){ |