OK merci !
Version imprimable
OK merci !
Un nouvel exercice est disponible ICI pour mettre � profit ce week-end de P�ques ;)
Merci ! :)
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 !!!
Le principe c'est :
Code:
1
2
3
4 var chaine = "abc"; console.log(chaine);// affiche --> abc chaine += "d"; console.log(chaine);// affiche --> abcd
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:
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); } }
@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.:cfou:
Mais lorsque nous aurons vu les classes en ES6 je ferai un exercice dans lequel il sera demand� de cr�� un objet StringBuffer :whistle:
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...
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:
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
Merci Sylvain pour ces explications sans appel :pastaper:
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
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 :)
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 ?
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
... 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).Code:
1
2
3 var s = 'rete ferer'; alert(s[5]); // affiche "f"
Il y a plusieurs exos sur ce sujet dans le tuto javascript mais ils viennent un peu plus tard ;)
@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
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...
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...
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)...
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 :mrgreen: Peut-�tre y a t-il plus de similitude entre php et javascript parce que ce sont deux langage web...
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:
De la m�me fa�on, lorsqu'on utilise un op�rateur, les �quivalents objets sont automatiquement cast�es en leurs valeurs primitives:Code:
1
2
3
4 "test".toUpperCase() 530..toFixed(1); 3.14.toExponential(5) true.toString()
Code:
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
@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 :no:
Mais merci pour ces explications techniques et ton retex sur les d�veloppeurs JEE :java: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 :toutcasse:
Bref c'�tait une fausse bonne id�e....
@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.
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 ?
Oui, on conna�t la chanson, AngularJS et Firebase c'est magnifique, c'est la solution � tous les probl�mes, �a fait le caf�, �a beurre les tartines et �a r�sout le conflit isra�lo-palestinien... :no:
D�sol� de devenir d�sagr�able mais pour un dev web sympa, tu passes beaucoup de temps � venir d�nigrer toutes les technos qui sortent de ton petit micro-besoin � toi tout seul. Ce qui en soi ne me poserait pas de probl�me si tu savais de quoi tu parles et si ton point de vue �tait argument�, mais on a pu v�rifier que ce n'�tait pas le cas. Depuis le temps qu'on te le dit et les kilos de pouces rouges que tu as re�u, j'avais pens� que tu aurais compris...
Par ta question "� quoi sert Node.js", tu nous demandes en r�alit� � quoi sert un back-end, et je n'ai pas d'autre r�ponse en l'�tat que te demander d'ouvrir les yeux sur ce qu'est le Web actuellement, et � quoi il ressemblerait si le Web entier tournait sur de b�tes Apache. Indice: on ne serait pas l� � en discuter.
Enfin, je suppose que c'est encore un message inutile et que tu reviendras nous parler de 3-way binding sur un autre topic d'ici quelques jours, alors � la prochaine... Tu peux quitter celui-ci et nous laisser travailler, merci au revoir.
Merci, mais ma question n'�tait pas une critique vis-�-vis de NodeJs, je voulais juste savoir en quoi c'est mieux que Apache par exemple, parce que je ne comprends pas.
J'ai voulu me lancer dedans plusieurs fois car j'aime bien l'id�e, mais je ne comprends pas parfois, si c'est vraiment mieux que de garder son serveur Apache.
Bref ma question est : quels sont les avantages de NodeJs par rapport � Apache , en quelques mots ? Est ce que �a vaut le coup de tout coder son serveur soit m�me ?
Est-ce que le code Javascript d'un serveur nodeJs est visible par un utilisateur? Je suppose que non?
Puis-je par exemple importer "du c�t�" nodeJs un fichier JSON, puis r�aliser des op�rations math�matiques dessus, puis les "passer" au Front end ?
Ce n'est pas du tout comparable. Apache est un serveur HTTP, Node.js est une plateforme avec un �cosyst�me immense et des champs d'application tr�s vari�s. Si Apache �tait serveur dans un bar, Node.js serait le proprio du bar, et de la bo�te de nuit � c�t�.
cf post pr�c�dent : http://www.developpez.net/forums/d15...h/#post8565825
Coder son serveur, �a ne veut pas dire grand chose. Est-ce que tu codes ton client ? Au sein d'applications web, il y a souvent des tas d'op�rations r�alis�es c�t� serveur. La question n'est pas de savoir si �a vaut le coup, car bien souvent c'est le seul choix possible si on a des contraintes de s�curit�, d'autorit�, d'�changes entre clients, de performance, de support logiciel...
non
oui
Non seulement c'est possible, mais �a se passe souvent comme �a (je dirais 99%).
Les Web Service consomm�s par Node.js sont en g�n�ral (encore 99%) du REST donc --> JSON
D'ailleurs JSON est le format privil�gi� pour JavaScript (� 99%)
Quant au biblioth�ques math�matiques, un coup de NPM te permettras d'obtenir ce que tu veux. J'aurais tendance � dire (a 99%) qu'il existe d�j� une biblioth�que Node.js qui satisfasse tout ce que tu veux. Pour les 1% restant si il existe, je te mets au d�fi de le trouver.
J'ajouterai que dans le cas ou on utilise Node avec mongoDB, on est pas loin de ramasser des donn�es format JSON (� 99%)
Merci beaucoup de vos r�ponses, alors hier, t�te dure que je suis, j'ai install� mongoDb en local et le logiciel mongoVue sous windows qui est super.
Et comme je suis assez parresseux, j'ai voulu me connecter directement dessus � partir de mon client AngularJs (hihi) avec JsonP.
Ben du coup �a marchotte � moiti� en se connectant au port WEB mais selon les sites Anglais, c'est pas bon du tout en production, et j'en d�duit qu'on est donc oblig� d'utiliser les libs/langages expressJs et Node.js pour �laborer des apps en noSql quand on veut son propre serveur mongoDb, en vue de gestion d'applications pros...
Je suis un peu d��u parce que j'adore me connecter directement � partir du client m�me si c'est d�conseill�.
Du coup, je suis oblig� d'apprendre expressJs apparamment, (mais pas forc�ment node.js...?) pour stocker mes objets Json sur mongoDb.
Le probl�me �tant qu'on me propose un projet et je sais pertinemment que le noSql est bien plus flexible et g�nial pour pareil projet, mais que je ne connais pas encore expressJs du coup ben c'est mort et je dois partir sur du mysql snif !:(
Pour moi, le principal attrait du noSql est la cr�ation automatis�e des branches et nodes par l'application client, pas besoin de remanier la base de donn�es, cela se fait automatiquement. On peut donc cr�er des applications "auto-scalables", qui s'auto alimentent dans le temps, c'est comme si les utilisateurs pouvaient cr�er sur le vif leurs propres tables en Sql, et �a, ca d�chire je trouve..:mrgreen:
Pour revenir � Firebase, en effet c'est g�nial pour d�buter avec la conception en noSql et comprendre les concepts, le petit soucis est un peu que les serveurs sont un peu loin. Par contre, il est clair que si un jour j'avais le niveau, je tenterais de vendre des micros apps avec un back end Firebase, avec une �ventuelle solution de repli (Mongo ou d'autres), c'est tellement flexible comme syst�me.
Pour �tre pr�cis, REST est une architecture de web services utilisant HTTP et qui est stateless (les requ�tes ne laissent pas d'�tat sur le serveur pour les appels successifs d'un m�me client (session)). Il n'y a pas de rapport direct entre REST et JSON. JSON est simplement un des formats les plus utilis�s pour encoder de la donn�es dans le body des requ�tes et r�ponses HTTP de ces web services.Citation:
REST donc --> JSON
ExpressJS est un module Node.js et sert comme micro-framework HTTP, pour aider � g�rer tes requ�tes, r�ponses, ... tout �a avec du routing et un syst�me de middlewares. Apprendre ExpressJS sans apprendre Node.js me parait peu viable mais �a peut �tre un point de d�part n�anmoins si tu n'es pas en mode professionnel. Sinon, il n'y a aucun rapport avec le MongoDB. Si tu veux utiliser MongoDB avec Node.js et a fortiori ExpressJS, utilise un package NPM (gestionnaire de package de Node.js) qui t'y aidera comme celui du driver (que tu trouveras sur le site de MongoDB) ou un ODM comme mongoose.Citation:
Du coup, je suis oblig� d'apprendre expressJs apparamment, (mais pas forc�ment node.js...?) pour stocker mes objets Json sur mongoDb.
Si tu te lances dans un projet professionnel en Node.js alors que tu ne connais pas, tu es s�r d'aller au casse pipe et ton client �galement. Apr�s cette phrase n'est pas tr�s compr�hensible. Il semble que tu penses que "Node.js" === "NOSQL" et "Pas Node.js" === "MySQL". Si c'est bien �a, je dis non: il n'y a pas de rapport direct entre le choix de ta technologie serveur et celle de ta base de donn�es. Ta base de donn�es doit �tre adapt�e � l'usage que tu veux en faire. De plus, utiliser MongoDB pour pouvoir cr�er n'importe quel document ou collection � la vol�e ne t'aidera pas � avoir des donn�es de qualit� (d'autant plus si tu ne fais pas l'indispensable validation serveur).Citation:
Le probl�me �tant qu'on me propose un projet et je sais pertinemment que le noSql est bien plus flexible et g�nial pour pareil projet, mais que je ne connais pas encore expressJs du coup ben c'est mort et je dois partir sur du mysql snif !
Thomas,
Oui j'ai fait un abus de langage. Je voulais dire que 99% des WS Rest renvoient du JSON. On va dire que c'est consacr� par l'usage car majoritairement interrogeable par un lecteur JSON.
Je fais cet abus de langage par opposition au WS SOAP qui � 99% renvoient un format XML. En effet pour faire du SOAP, tu es oblig� d��crire le WSDL en XML. Alors tant qu'� faire, tu choisis aussi de renvoyer du XML.
Historiquement, SOAP fut d'abord employ� en B2B pour faire du SOA quasiment � 99% en JAVA C# et PHP par d'anciens d�veloppeurs dont je fut et qui �taient tr�s branch�s XML. C��tait la belle �poque des serveurs d'application et des ERP. Puis JavaScript a impos� son format pour le B2C � travers REST et aujourd'hui il continue sa perc�e cot� serveur en imposant JSON pour tout (NPM - BDD ....).
@devwebsympa,
Si tu consid�res node.js comme un serveur d'applications du genre Apache + module PHP, tu peux l'utiliser avec n'importe qu'elle base de donn�es (relationnelle ou pas). Mais c'est vrai que souvent MongoDB est pr�sent�e comme la base nosql qui va avec node.js comme mysql allait il y a 10 ans avec Apache PHP.
Tu as sur DVP un tuto node+mongo ici :http://atinux.developpez.com/tutorie...dejs-mongoose/
Salut,
On a essay� de comprendre "touit" et moi, j'ai compris diff�remment comme expliqu� ici mais je ne veux pas l'induire en erreur donc si quelqu'un pouvait me corriger ou lui expliquer mieux... Mais peut-�tre que ce n'est pas le moment d'aborder ce sujet donc je vous laisse voir...
OK j'ai r�pondu l�-bas. C'est ma faute, je ne devrais pas r�pondre aux questions sur ce topic, sinon �a va devenir un fourre-tout. Il faut juste que je prenne l'habitude de m'abonner aux notifs sur les billets de blog de Marc ;)
Merci !
Ah justement je m'�tais demand� s'il �tait possible de savoir quand il y a un nouveau message sur un blog comme pour les fils du forum...
Oui, cherche le lien "S'abonner � ce billet", ou "S'abonner � ce blog" si tu veux aussi �tre notifi� des prochains billets.
Oui Node.js est c�t� serveur, et son module fs permet de manipuler le syst�me de fichiers du serveur. Il ne permet donc pas de lire ou d'�crire chez le client (c�t� navigateur dans le cas d'une appli web). En revanche, une application lourde, o� le client est �quivalent au serveur (par ex atom), peux manipuler le syst�me de fichiers du client puisque c'est le m�me que celui du serveur.
A noter, qu'on ne peut pas vraiment dire que ce soit une limitation du langage dans le cas du JavaScript s'ex�cutant sur un navigateur, mais comme le disais Marc, une limitation du navigateur pour garantir la s�curit� de l'utilisateur (imagine un script javascript qui pourrait aller fouiller gratuitement dans tes fichiers!).
J'ai extrait les messages de cette discussion relative aux choix de l'�diteur, pour les mettre dans cette discussion: http://www.developpez.net/forums/d15...cript-general/
Bonjour les �tudiants,
Nous avons un peu de retard pour la diffusion du cahier d'exercices. Alors j'ai post� un exercice de test de primalit� pour ce Week-End :D
Bon courage
Salut et merci !
Salut Autran,
Je me mettrai dessus ce dimanche avec plaisir :)
Salut, vu que je suis un peu paum� je vais plut�t patienter :)
Bon weekend !
@TSG,
C'est toi qui voit, mais comme j'ai choisi un exercice qui ne n�cessite que des connaissances de maths de coll�ge, tu peux toujours le faire sur le plan algorithmique. Donc le faire sans la machine avec tes mots pour mod�liser le probl�me.
Du genre je cr�e un tableau qui recevra les nombres premiers que je d�tecterai. Pour d�tecter qu'un nombre et premier je ...
L'algorithmique, on s'en sert tous les jours avant de coder. c'est la r�flexion qui pr�c�de le codage. Cela te permettrait de faire de la pseudo-programmation sans �tre g�n� par le langage-m�me.
Quoi que tu postes sur le fil on te r�pondra toujours
Bon Week-End
La section "exercice" est ouverte, je pense que je vais faire les exercices que je n'avais pas fait...
Faut-il poster nos solutions ou bien plus la peine (on doit juste poster nos �ventuelles questions) ?