Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/07/2016, à 17:03

carambar

Besoin d'aide en javascript

Bonjour,

Je ne suis pas certain de poster ma demande au bon endroit!
Ayant décidé d'apprendre le javascript, je me trouve face à un problème que je n'arrive pas à résoudre.
Voilà l'énoncé :
" Créer une fonction qui prend en paramètre un tableau (de 1 ou plusieurs cases) et qui renvoie la  somme des nombres contenus dans ces cases.
Si l’une de ces cases n’est pas un nombre elle doit renvoyer null."
Mon code ne fonctionne pas:

       

var tab = [23, 54, 145, 47, 333];
					
			function somme (tab[i]){
			if (isNaN tab[i]){
				alert("Null");
			}
			else{
			for (var i = 0; i < tab.length; i++) {
   			 somme += tab[i];
}}
}

 		alert(somme);

Si quelqu'un pouvait me venir en aide ce serait sympa.
Merci
Nb: Si mon code ne rime à rien ne vous moquez pas trop! smile


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#2 Le 11/07/2016, à 17:27

alexandre958

Re : Besoin d'aide en javascript

salut, il y plusieurs problèmes dans ta fonctions, de syntax et d'algo.

pour l'algo:
ta fonction test si

tab[i]

  n'est pas un nombre et renvoie alors un message null dans ce cas, si

tab[i]

est un nombre alors elle fait toute la boucle de TOUT les nombre pour les additionner sans ce soucier de

tab[i+1]

ou

tab[i+2]

, tu vois l'erreur ?
il faut:
- faire une boucle qui par court ton tableau ( ta boucle "for" est correctement écrite)
- dans cette boucle vérifier si le tableau à l'index i est bien un nombre
- si c'est le cas tu addition, sinon tu renvoie null.

pour la syntax:
tu donne en paramètre ton tableau avec i entre crochet, c'est faut il faut donner une variable, javascript saura que c'est un tableau, genre:

function somme (tab){
...
}

May the 4th be with you

Hors ligne

#3 Le 11/07/2016, à 18:11

Rufus T. Firefly

Re : Besoin d'aide en javascript

Salut,

D'abord une remarque sur la présentation :

function somme (tab[i]){
			if (isNaN tab[i]){
				alert("Null");
			}
			else{
			for (var i = 0; i < tab.length; i++) {
   			 somme += tab[i];
}}
}

C'est très moche et surtout peu intelligible :

}}
}

Pour faire le lien avec ce qu'elles ferment, bonjour...
Il faut vraiment prendre l'habitude tout de suite de faire des indentations correctes, du genre de celle-ci :

function somme (tab[i]) {
    if (isNaN tab[i]) {
        alert("Null");
    } else {
        for (var i = 0; i < tab.length; i++) {
            somme += tab[i];
        }
    }
}

Ensuite, tel qu'est formulé l'énoncé, ta fonction doit prendre un tableau en paramètre :

function somme (tableau) {
 ... test, calculs, et retour de la somme ou de null
}

Et après tu appelles la fonction, par exemple de cette manière :

var tab1 = [23, 54, 145, 47, 333];
ma_somme = somme (tab1);
alert ("La somme vaut : " + ma_somme);
...
var tab2 = [23, 27, 14, 47, 33];
ma_nouvelle_somme = somme (tab2);
alert ("La somme vaut : " + ma_nouvelle_somme);

Dernière modification par Rufus T. Firefly (Le 11/07/2016, à 18:17)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#4 Le 11/07/2016, à 22:12

soshy

Re : Besoin d'aide en javascript

petit point que les personnes précédentes n'ont pas (trop) évoqué : la fonction doit renvoyer une valeur.

En gros ça donne ca :

var mon_tableau = [ 1, 2, 3, 4 ];

// on declare la fonction "somme" qui prend un objet en paramètre et qui sera nommé "tableau" dans la fonction
function somme(tableau) {
    var resultat = 0;
    // des trucs...

    // on retourne le resultat
    return resultat;
}
// on appelle la fonction "somme" avec l'objet "mon_tableau" en paramètre et on stock son retour dans une variable "y"
var y = somme(mon_tableau);
// on affiche y
alert(y);

pour retourner null il faut écrire

return null;

PS : au passage on admire les commentaires qui décrivent ce que fait le code big_smile. Ici c'est bien trop long pour quelque chose d'aussi basique, mais c'est toujours un plus pour la personne qui passe derrière afin de comprendre ce qui est fait (ou au moins l'intention).
Un vrai commentaire utile aurait par exemple été :

// retourne la somme des éléments du tableau passé en paramètre, null si au moins un des éléments n'est pas un nombre.
function somme(tableau) {
...

Dernière modification par soshy (Le 11/07/2016, à 22:41)

Hors ligne

#5 Le 12/07/2016, à 00:17

carambar

Re : Besoin d'aide en javascript

Merci les gars sympa de votre part, mais il faut croire que je suis un peu con, je n'y arrive pas!

function somme (tab){
		 somme = 0;
	for (var i = 0; i < tab.length; i++) {
   			 somme += tab[i]
   			 return somme;

   		}
   	}
   	 	
   	 var tab1 = [23, 54, 145, 47, 333];
   	 ma_somme = somme(tab1);
alert ("La somme vaut : " + ma_somme);

Qu'est ce qui bloque ???


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#6 Le 12/07/2016, à 00:32

soshy

Re : Besoin d'aide en javascript

le return est mal positionné. La, tu rentres dans ta boucle for, tu fais 0 + valeur de la case 0, et tu retournes directement le résultat. Toi tu ne veux retourner le resultat qu'après avoir parcouru toutes les cases (après la boucle for donc, et pas dedans comme actuellement).

Dans une fonction, dès qu'on tombe sur return on arrête tout et on retourne la valeur.

Dernière modification par soshy (Le 12/07/2016, à 00:34)

Hors ligne

#7 Le 12/07/2016, à 00:40

Rufus T. Firefly

Re : Besoin d'aide en javascript

C'est encore de l'indentation au pif...
Il faut qu'elle soit logique, pour refléter la logique du programme

function somme (tab) {
  ... la fonction
}
...
  for (var i = 0; i < tab.length; i++) {
    ... le contenu de la boucle for
  }
...

Et ça donne :

function somme (tab) {
  somme = 0;
  for (var i = 0; i < tab.length; i++) {
    somme += tab[i]
    return somme;
  }
}

Et là tu vois immédiatement que return est à l'intérieur de la boucle for, et dàs que la boucle passe par là, tu sors de la boucle et de la fonction (par définition de return). Et ton alert t'affiche le premier élément du tableau...

Edit : ce n'est jamais une bonne idée d'utiliser le même nom pour plusieurs choses différentes. Là tu as une fonction somme() et une variable somme. Il vaudrait mieux par exemple une fonction Somme() et une variable somme. Ce n'est pas obligatoire, encore que dans certains cas, ça pourrait poser des problèmes... Donc il vaut mieux éviter...
En plus, ta variable somme, ce n'est réellement la somme qu'au moment où le programme sort de la boucle for, mais tant qu'il est dedans, ce n'est qu'une somme partielle...
Personnellement, je ferais plutôt ça :

function Somme (tab) {
  tmp = 0;
  for (var i = 0; i < tab.length; i++) {
    tmp += tab[i];
  }
  return tmp;
}

var tab1 = [23, 54, 145, 47, 333];
somme = Somme(tab1);
alert ("La somme vaut : " + somme);

Ça a l'air d'être du pinaillage, mais je t'assure que sur quelques centaines ou milliers de lignes de code, c'est bien utile...

Dernière modification par Rufus T. Firefly (Le 12/07/2016, à 01:27)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#8 Le 12/07/2016, à 09:48

bruno

Re : Besoin d'aide en javascript

Pinaillons, pinaillons … wink

Ça c'est une mauvaise habitude à ne pas prendre (quel que soit le langage utilisé) :

for (var i = 0; i < tab.length; i++) {

En faisant ainsi la taille du tableau est recalculée à chaque tour de la boucle for.
Il vaut mieux placer cela dans une variable pour ne la calculer qu’une seule fois  :

items=tab.length;
for (var i = 0; i <items; i++) {

Hors ligne

#9 Le 12/07/2016, à 10:19

MicP

Re : Besoin d'aide en javascript

Une autre formulation possible pour la boucle for :

function Somme (tab) {
  tmp = 0;
  for (idx in tab)  { 
    tmp += tab[idx];
  }
  return tmp;
}

La même avec le test : "…Si l’une de ces cases n’est pas un nombre…"

function Somme (tab) {
  tmp = 0;
  for (idx in tab)  { 
    if ( typeof( tab[idx] ) === 'number' ) {
      tmp += tab[idx];
    }
  }
  return tmp;
}
var tab1 = [23, null, 54, "", 145, "12", 47, "texte", 333];
somme = Somme(tab1);
alert ("La somme vaut : " + somme);

Puisque 12 est entre guillemets, il ne s'agit pas d'une valeur numérique, mais d'une chaîne de caractère,
donc, "12" ne sera pas plus pris en compte que null, "", ou "texte"

Dernière modification par MicP (Le 12/07/2016, à 10:52)

Hors ligne

#10 Le 12/07/2016, à 10:45

carambar

Re : Besoin d'aide en javascript

Salut,
Un grand merci à vous.
Je viens de fêter mes 50 balais, premier pc sous xp à l'âge de 35 ans, je tourne sous ubuntu gnome classic avec cairo depuis 12 ans (3 ans de windaube).
Tout ça pour vous expliquer que la majeure partie de ma vie l'informatique je ne connaissais pas, bref pour un vieux con comme moi ce n'est pas évident au départ.
Si je peux à mon tour vous apporter quelque chose j'en serais ravi!
Connaissez vous Openclassrooms?
Merci encore et bonne journée à vous tous!


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#11 Le 12/07/2016, à 14:12

soshy

Re : Besoin d'aide en javascript

@Bruno : merci de ne pas mettre tous les langages dans la meme catégorie que (cette merde qu'est) le JS. Il est peut être vrai qu'en JS faire tab.length ca "coute" car il faut recalculer la valeur. Ce n'est pas le cas dans d'autres langages évolués comme Java ou C#.

@carambar : Oui il est tres bien ce site. Bon apprentissage.

Dernière modification par soshy (Le 12/07/2016, à 14:20)

Hors ligne

#12 Le 12/07/2016, à 14:18

Rufus T. Firefly

Re : Besoin d'aide en javascript

soshy a écrit :

@Bruno : merci de ne pas mettre tous les langages dans la meme catégorie que (cet merde qu'est) le JS. Il est peut être vrai qu'en JS faire tab.length ca "coute" car il faut recalculer la valeur. Ce n'est pas le cas dans d'autres langages évolués comme Java ou C#.

C'est parce que c'est Oracle et M$, des maisons sérieuses, ça, au moins... lol


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#13 Le 12/07/2016, à 15:36

bruno

Re : Besoin d'aide en javascript

@soshy belle tentative de troll wink J'attends tes tests en C# et en java, avec une grosse variable tableau et une boucle suffisamment longue, pour me montrer qu'il n'y a aucune différence de performance entre les deux syntaxes.

@MicP : en principe les boucles for…in… sont plutôt réservés aux objets en JavaScript. Il me semble qu'il est déconseillé de les utiliser sur des variables de type tableau.

Dernière modification par bruno (Le 12/07/2016, à 15:37)

Hors ligne

#14 Le 12/07/2016, à 15:58

MicP

Re : Besoin d'aide en javascript

@bruno Merci beaucoup pour le conseil : Ça m'intéresse, aussi je fouillerai un peu dans le web à ce sujet pour en savoir plus.

Hors ligne

#15 Le 12/07/2016, à 16:20

soshy

Re : Besoin d'aide en javascript

Ce n'est pas un troll c'est un fait. JS (ES5 et anterieur) c'est de la merde en branche et ils reparent ca comme ils peuvent avec 'use strict' et autres artifices. Le fait d'utiliser une variable sans la declarer avec 'var', ou le fait qu'une variable ait un scope fonction et pas bloc comme dans n'importe quel langage decent en sont de parfaites illustrations...
Ex :

variable_non_declaree = 5; // autorise ...
console.log(variable_non_declaree); // affiche bien la variable non declaree

var x = 4 // il manque le ; mais on en est pas a ca pres en JS...
console.log(x); // affiche 4
if (true) {
	var x = 3;
	console.log(x); // affiche 3
}

console.log(x) // affiche 3... serieusement ?!

Ceci est pas mal non plus

var i = 10;
var a = 20;
console.log(i) // affiche 10
console.log(a) // affiche 20

function func() {
    console.log(i); // affiche undefined
    console.log(a); // affiche 20
    if (true) {
        var i = 0;
    }
    console.log(i); // affiche 0
}
func();

Des conneries comme ca, le JS en regorge. Petite video marrante a ce sujet ca parle de JS au environ de 1m20.

Concernant le test, d'autres l'ont deja fait par exemple ici pour Java. Les grandes lignes sont :
- "a call to array.length is O(1) or constant time operation."
- "The point is, and it is the one everyone else has been making, you have to run Java out of memory and you still don't see a significant difference in speed between the two alternatives."
Et meme genre de question / reponse ici pour C#

PS : javascript a d'autres qualités intrinsèques, mais certainement pas celles de la rédaction, ce n'est pas pour rien qu'il existe plétor de langage (coffescript, dart ...) dont l'unique but et de pouvoir écrire du code intelligible pour ensuite compiler tout ça en javascript imbuvable.

Dernière modification par soshy (Le 13/07/2016, à 06:37)

Hors ligne

#16 Le 13/07/2016, à 09:07

bruno

Re : Besoin d'aide en javascript

[hs]
Ok je m'incline pour les test wink Je suppose que c'est dû, au moins en partie, aux optimisations des compilateurs et peut-être aussi au fait que les variables tableaux sont traitées comme des objets.
Mais bon, vu que cela ne change rien, autant utiliser la syntaxe que je proposais car la différence de performance est réelle pour les langages interprétés. Au moins pour Javascript et PHP.

La vidéo est assez drôle effectivement même si c'est caricatural. Javascript a certainement beaucoup de défauts mais c'est en grande partie dû à la nécessité de maintenir la rétro-compatibilité au fil de ses évolutions.

Les exemples que tu donnes et que tu trouves incohérents, ne le sont pas pour une personne habituée à développer en Javascript.
Premier exemple : la portée des variables fonctionne ainsi en JavaScript, cela n'a rien de surprenant lorsqu'on le sait.
Deuxième exemple : tu redéfinis la variable i dans le corps d'une fonction, la portée de la variable i est donc limitée à cette fonction. Lorsque tu appelles cette fonction la variable i n'est donc plus définie. C'est logique. Si tu avais juste écrit i=0 dans ls corps de la fonction cela n'aurait pas posé de problème.
[/hs]

Hors ligne

#17 Le 13/07/2016, à 15:15

soshy

Re : Besoin d'aide en javascript

En javascript aussi un tableau c'est un objet. La difference c'est qu'en Java / C# la taille du tableau est une propriete immuable de l'objet tableau, directement accessible au meme titre que n'importe quel index du tableau. Alors qu'en JS, c'est une fonction de calcul de l'objet, et de fait, ca coute plus.

J'aime bien ton cote "c'est logique quand on connait" tu devrais plutot dire : "on sait que c'est bizarre, mais on connait la regle appliquee donc on gere..." tongue
Ils ont repris la syntax du C / Java pour ne pas perdre les gens, et apres ils nous sortent des trucs naze comme la variable a scope fonction qui pour le coup desoriente totallement un dev C / C++ / Java ... D'ailleurs, ils se sont bien rendu compte que c'etait naze puisqu'ils ont par la suite invente 'let'. Et soudainement, si on remplace 'var' par 'let' tout devient plus logique / normal pour le brave dev C / C++ / Java ...

Exemple 1 devient

let x = 4; 
console.log(x); // affiche 4
if (true) {
	let x = 3;
	console.log(x); // affiche 3
}
console.log(x); // affiche 4

Exemple 2 devient

let i = 10;
let a = 20;
console.log(i); // affiche 10
console.log(a); // affiche 20

function func() {
    console.log(i); // affiche 10
    console.log(a); // affiche 20
    if (true) {
        let i = 0; 
        console.log(i); // affiche 0
    }
    console.log(i); // affiche 10
}
func();

Definition de retrocompatible : Les defauts de conception sont conserves.
Et c'est bien pour ca que c'est pourri, parce que ce genre d'aberations sont et seront conservees (et qu'il en a bien trop).
Toute ligne de JS ecrite a l'heure d'aujourd'hui devrait entre autres prohiber 'var'.

Dernière modification par soshy (Le 13/07/2016, à 15:22)

Hors ligne

#18 Le 13/07/2016, à 15:27

MicP

Re : Besoin d'aide en javascript

@soshy Merci beaucoup pour ces informations que jamais aucun document sur javascript ne m'a fourni et qui me rassurent quand à certaines galères passées qui m'ont fait perdre beaucoup trop de temps.

Hors ligne

#19 Le 13/07/2016, à 15:55

Elzen

Re : Besoin d'aide en javascript

Bon, vu que les points intéressants ont été dits, mon grain de sel sur le troll…

bruno a écrit :

Ça c'est une mauvaise habitude à ne pas prendre (quel que soit le langage utilisé)

Non. C'est (peut-être, ou pas) une mauvaise habitude en JavaScript; mais il n'y a absolument aucune raison de dire que ce soit problématique dans d'autres langages. Ça dépend de la façon dont les choses sont implémentées, et il y a plein de boucles for différentes. En Java, par exemple, ta seconde syntaxe ne fonctionne pas; le passage par l'attribut « length » est nécessaire (à moins de passer par un foreach, mais ce n'est pas le sujet ici). Ce n'est cependant pas un problème, puisqu'en Java, cette valeur est fixe et n'est jamais recalculée.

soshy a écrit :

@Bruno : merci de ne pas mettre tous les langages dans la meme catégorie que (cette merde qu'est) le JS. Il est peut être vrai qu'en JS faire tab.length ca "coute" car il faut recalculer la valeur. Ce n'est pas le cas dans d'autres langages évolués comme Java ou C#.

Ce n'est pas une question d'évolution ou pas du langage; ça dépend simplement de la façon dont les tableaux sont implémentés (s'ils le sont, ce qui n'est pas toujours le cas). Tu peux d'ailleurs éviter les remarques péjoratives sur JavaScript. Le fait que tu n'apprécies pas, à titre personnel, je veut pas dire que ce soit qualifiable de « merde », et tu es prié de respecter les goûts et travaux des autres, merci.

soshy a écrit :

Le fait d'utiliser une variable sans la declarer avec 'var', ou le fait qu'une variable ait un scope fonction et pas bloc comme dans n'importe quel langage decent en sont de parfaites illustrations...

Selon ce critère très subjectif, il y a pas mal de langages qui ne sont pas « décents », alors… Python, par exemple.

soshy a écrit :

Toute ligne de JS ecrite a l'heure d'aujourd'hui devrait entre autres prohiber 'var'.

Wait, what?

Sinon, un truc à comprendre, concernant EcmaScript, c'est que, contrairement à un fameux tas d'autres langages interprétés, celui-ci est conçu pour être utilisé par des interpréteurs nettement différents les uns des autres, et qui plus est dans un contexte fortement dépendant des échanges réseaux, entre autres. Ça implique nécessairement des comportements assez spécifiques.

Hors ligne

#20 Le 13/07/2016, à 23:43

soshy

Re : Besoin d'aide en javascript

@MicP : Mais de rien, le JS quand on débarque c'est plein de trucs surprenant et illogique. Si on cherche un peu, les comportements ne sont pas aléatoire et quand on lit les raisons de ces comportement on comprend. Il n'empeche qu'au premier abord ça parait abérant. 
En JS (de nos jours) boucler sur un tableau ça ne se fait pas trop. Il y a en général d'autres (meilleurs) façons de faire ce qu'on veut. Voir ici (map filter slice ...)


Elzen a écrit :

Ce n'est pas une question d'évolution ou pas du langage

Si. Cette fonction n'existe pas en C parce qu'un tableau c'est un pointeur vers l'index 0 du tableau et pas un objet. En cela, le C est trop archaïque pour avoir cette fonction. Ca ne veut pas dire qu'un langage qui n'implemente pas cette fonction n'est pas évolué.

Elzen a écrit :

Le fait que tu n'apprécies pas, à titre personnel, je veut pas dire que ce soit qualifiable de « merde », et tu es prié de respecter les goûts et travaux des autres, merci.

Quelque chose de mal fait, c'est mal fait. Qu'on y mette les formes en disant que c'est pas terrible, ou qu'on y aille franco en disant que c'est de la merde, dans le fond ça ne change rien. En Java aussi il y a des trucs à chier broken by design (cf clonable), il y en a juste franchement moins.
Il n'en reste pas moins que les fondations du JS sont bancales (on est vraiment beaucoup à le dire et plus à le penser, cf les paliatif type dart et coffescript) et que ce tabouret à 2 pieds reste présent pour raison de rétrocompatibilité. Le JS nouvelle version (à partir d'ES6) et si on s'interdit d'utiliser les fonctions permises par le tabouret à 2 pied, alors on a un langage qui tiens (presque (il y a toujours des choses suprenantes, mais c'est des fonctions vraiment avancées))  la route.
Il y a surement des cas à la marge ou 'var' et autres éléments du tabouret à 2 pieds sont indispensable (honnetement je vois pas mais je ne suis pas expert JS, je fais juste des webapp). Comme ici on (je) parlait specifiquement dans le cas de navigateur (l'exemple avait des "alert(xx)"), il n'y a vraiment pas de raison. Meme si c'est pour etre compatible, il vaut mieux écrire du code ES6 intelligible et transpiler ça en ES5.


Elzen a écrit :

Selon ce critère très subjectif, il y a pas mal de langages qui ne sont pas « décents », alors… Python, par exemple.

C'est exacte. Tu as des exemples de grosses appli en python ? Non parce que en C / C++ / Java / C# je t'en trouve autant que tu veux. En python en revanche... C'est je pense un des signes (évidemment pas le seul) de la qualité d'un langage.
C'est peut être un bon langage de script (honnetement je ne connais pas assez python), mais pour dev de "vraies" appli dans le "vrai" monde, la réponse semble être non. (Je dis ça en ayant travaillé sur des appli Java à plus de 500k loc hors commentaire)


Je n'ai pas compris ton dernier point. Je ne vois ni en quoi les échanges réseau ni en quoi les interpréteurs jouent un quelconque role sur le fait d'utiliser var ou let. Le java c'est compilé en bytecode, ça n'empeche pas d'avoir la JVM d'oracle, la JVM d'IBM et l'openJDK, d'executer le bytecode et d'avoir le résultat attendu. Il suffit que le la JVM se conforme à la spec Java, et je ne vois pas en quoi ça peut etre différent pour un interpréteur.

Dernière modification par soshy (Le 14/07/2016, à 00:43)

Hors ligne

#21 Le 14/07/2016, à 03:20

Elzen

Re : Besoin d'aide en javascript

soshy a écrit :

Si. Cette fonction n'existe pas en C parce qu'un tableau c'est un pointeur vers l'index 0 du tableau et pas un objet. En cela, le C est trop archaïque pour avoir cette fonction. Ca ne veut pas dire qu'un langage qui n'implemente pas cette fonction n'est pas évolué.

Il est tout à fait possible de concevoir, en C, quelque chose qui s'utilisera grosso-modo de la même façon, avec un tableau et sa longueur en dur (au hasard, une struct à deux éléments). À partir du moment où il est possible, dans un langage donné, de définir des structures complexes, les deux manières d'implémenter sont possibles. Donc : ça ne dépend pas de l'aspect « évolué » ou non du langage, mais de la façon dont ses types de base ont été conçus.

soshy a écrit :

Quelque chose de mal fait, c'est mal fait. Qu'on y mette les formes en disant que c'est pas terrible, ou qu'on y aille franco en disant que c'est de la merde, dans le fond ça ne change rien. En Java aussi il y a des trucs à chier broken by design (cf clonable), il y en a juste franchement moins.

Il y a des choses extrêmement critiquables en C, en C++, en Java, en PHP, en Python, en C#, en D, en Ada, en Ruby, en Go, en Rust, et dans n'importe quel autre langage possible et imaginable. D'une part, parce que rien n'est parfait, d'autre part, parce que les qualités et défauts sont en grande partie subjectifs et dépendent de ce que l'on veut faire.
Il faut donc soit poser que tout est « de la merde », soit avoir l'honnêteté de reconnaître que les qualificatifs scatophiles relèvent d'un point de vue particulier et en aucun cas d'une vérité générale.

soshy a écrit :

je ne suis pas expert JS

T'inquiète, ça se remarque très bien en te lisant smile

soshy a écrit :

Tu as des exemples de grosses appli en python ?

Voyons-voir… un DE avec sa suite logicielle, plusieurs WM, au moins quatre ou cinq jeux vidéos, au moins un client de messagerie instantanée, un fameux tas de projets web (avec Flask ou Django – dont le SI de mon FAI, tiens), plusieurs projets scientifiques (SciPy est une alternative à Matlab assez utilisée)… si peu, si peu.

soshy a écrit :

honnetement je ne connais pas assez python

Oui, ça se remarque aussi smile

soshy a écrit :

Je n'ai pas compris ton dernier point. Je ne vois ni en quoi les échanges réseau ni en quoi les interpréteurs jouent un quelconque role sur le fait d'utiliser var ou let.

Pour var ou let, en effet, ça n'a pas grande influence. Pour la façon dont on va coder les tableaux et autres types complexes de manière à s'assurer que la même biblio fonctionnera aussi bien avec Trident qu'avec Gecko, Webkit, Blink, Presto ou autres, en revanche… disons que ta légitimité à troller sur ce sujet, déjà faible, sera d'autant moindre tant que tu n'auras pas compris les bases.

soshy a écrit :

Le java c'est compilé en bytecode, ça n'empeche pas d'avoir la JVM d'oracle, la JVM d'IBM et l'openJDK, d'executer le bytecode et d'avoir le résultat attendu. Il suffit que le la JVM se conforme à la spec Java, et je ne vois pas en quoi ça peut etre différent pour un interpréteur.

C'est beau, la naïveté du débutant big_smile

Hors ligne

#22 Le 14/07/2016, à 13:17

soshy

Re : Besoin d'aide en javascript

Des fois j'ai l'impression que tu fais expres de ne pas comprendre ou je veux en venir et que tu cherches juste une raison de troller.
Il est d'ailleurs assez savoureux que tu te moques de ce que je dis, pour au final ne donner aucun argument contre (let vs var). Je persiste et signe, var doit etre concidere comme deprecie et toute ligne de JS ecrite dorenavant doit par defaut utiliser let a la place (sauf cas exceptionel avec reel motif et un accord signe par le president) ne serai-ce que pour des raisons de maintenabilite et de facilite d'acces du langage aux armees de dev C / C++ / Java / C# ...

Je ne m'attarderais pas sur le reste. Deluge c'est fait en python, c'est un bon logiciel, mais ce n'est pas une grosse appli, un client de messagerie instantanee n'est pas une grosse appli, Django commence effectivement a ressembler a une grosse appli (j'ai lu un truc evocant environs de 75k loc). Quant au reste, tu ne donnes aucune reference et ennonces des banalites.

Je vais m'arreter ici et ne justifirais pas plus mes positions juste parce que duty call.

Dernière modification par soshy (Le 14/07/2016, à 13:19)

Hors ligne

#23 Le 14/07/2016, à 23:37

carambar

Re : Besoin d'aide en javascript

Salut,
C'est encore moi, je sèche à nouveau, j'en suis à me demander si je n'ai pas été prétentieux en m'aventurant sur ce terrain, mais je ne veux pas lâcher l'affaire, a 50 ans j'apprendrais le js !!!
Je dispose d'un fichier html comprenant une balise h1 "Activité1", lequel est associé à un fichier js dont voici le contenu :

var listeLiens = [
    {
        titre: "So Foot",
        url: "http://sofoot.com",
        auteur: "yann.usaille"
    },
    {
        titre: "Guide d'autodéfense numérique",
        url: "http://guide.boum.org",
        auteur: "paulochon"
    },
    {
        titre: "L'encyclopédie en ligne Wikipedia",
        url: "http://Wikipedia.org",
        auteur: "annie.zette"
    }
];

Il me faut compléter le js de façon à obtenir le résultat suivant :
mini_382840activite12.png
consignes supplémentaires :
    Le titre de chaque lien est cliquable et envoie vers son URL.
    La couleur à donner au titre d’un lien est “#428bca”.
    Les fichiers liensweb.css et liensweb.html ne doivent pas être modifiés.
    Conformément aux bonnes pratiques vues dans le cours, les nouveaux éléments du DOM doivent être créés et modifiés avant d’être ajoutés à la page.
    Les variables JavaScript doivent respecter la norme camelCase et le fichier liensweb.js doit être correctement indenté.

A la fin des cours j'ai l'impression d'avoir compris, mais là ???
Je ne sais pas par ou commencer.
Je ne connais aucun langage informatique, j'ai réussi avec succès les modules concernant le html et le css3 en 3 semaines, là cela fait 15 jours que j'ai entamé le js, dites moi je suis stupide ou quoi?

Dernière modification par carambar (Le 14/07/2016, à 23:38)


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#24 Le 15/07/2016, à 01:04

Elzen

Re : Besoin d'aide en javascript

@soshy: d'un autre côté, exiger que je réponde à un truc qui est en marge de mon propos depuis le début, bon, voilà, quoi (au cas où tu aurais eu des difficultés à suivre, mon point, c'était sur les tableaux et les qualificatifs scatologiques, ça ne concernait pas ton délire sur let et var).
Enfin, on va laisser tomber ton mauvais troll, il y a des trucs utiles à dire. La prochaine fois qu'il te prendra l'envie d'avoir ce genre de discours, évite juste de le faire dans un sujet de support, merci (d'ailleurs, relire les règles du forum pourrait ne pas te faire de mal).

@carambar: manifestement, tu disposes d'un tableau d'objets définis par plusieurs informations (titre, auteur, url); et tu veux, à partir de là, créer les éléments à afficher dans la page. Il va donc te falloir faire une boucle sur ce tableau, et, pour chaque éléments, créer les éléments DOM (document.createElement) que tu devras ajouter dans ta page et leur donner les bons attributs, avant de les ajouter dans la page.
Commence donc par faire une boucle qui ajoute un nouvel élément DOM pour chaque élément du tableau; et ensuite, tu pourras améliorer ça pour prendre le reste en compte. Ne t'inquiète pas, ce n'est évident pour personne de débuter smile HTML/CSS, c'est du langage de mise en page et de présentation de données; JavaScript, c'est du langage de programmation. Il est normal que le pas entre les deux soit un peu délicat.

Hors ligne

#25 Le 15/07/2016, à 01:17

Rufus T. Firefly

Re : Besoin d'aide en javascript

L'idée, c'est de créer les éléments, et de les attacher là où il faut.
Genre (il faut vérifier la syntaxe, ça fait un bail que je n'ai plus fait ça) :

with (document) { // création des divers éléments
  lnk = createElement('a'); // crée un lien <a>
  tn = createTextNode(listeLiens[i]['titre']); // crée le texte du lien
...
}
with (lnk) { // configuration du lien (attributs et noeud enfant)
  href = listeLiens[i]['url']; // fixe l'attribut src du lien
  style.color = “#428bca”; // fixe l'attribut style.color du lien
  appendChild(tn); // attache le texte comme noeud enfant de <a src=...>
}
...

Là, il faut attacher le lien probablement au conteneur de h1 (donc il faut commencer par le chercher avec un getElementById ou autre, selon le cas), donc comme noeud frère de h1. Mais peut-être faut-il d'abord créer un paragraphe pour mettre <a> et un <span> pour le lien et l'auteur, puis attacher tout le paragraphe. Ça dépend de ce qu'il y a déjà dans liensweb.html et aussi de la css...
Ensuite il faut mettre ça dans une boucle pour créer les 3 liens...

EDIT : je crois que je n'étais plus très frais à 1h ! src pour un lien ! C'est évidemment href !

Dernière modification par Rufus T. Firefly (Le 15/07/2016, à 11:07)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne