Définition de variable

Un problème, une question sur la partie Java Script des graphiques

Modérateurs : jturlier, Météo Villarzel

Répondre
Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Définition de variable

Message par PascalWMR » 21 nov. 2020, 11:18

Bonjour

Voila, je suis confronté à un problème de définition de variable.
Le code ci-dessous est extrait du scripts steelseries.js

this.setValueAnimated = function (newValue, callback) {
newValue = parseFloat(newValue);
var targetValue = (newValue < minValue ? minValue : (newValue > maxValue ? maxValue : newValue)),
gauge = this,
time;

Code : Tout sélectionner

var targetValue = (newValue < minValue ? minValue : (newValue > maxValue ? maxValue : newValue)),
Quelqu’un peut-il m'expliquer la syntaxe du code ci-dessus, c'est à dire comment est défini la variable targetValue.

Avec les valeurs suivantes, le code me retourne toujours 0 et je ne comprend pas pourquoi :( .

newValue = -1.6
maxValue = -1.6
minValue = -4.5

Je ne met que cette partie du code car en mettant targetValue = newValue ça fonctionne (avec des valeurs négatives). Mais j'aimerais bien comprendre pourquoi :?: car peut-être que ce code ne fonctionnera plus avec d'autres valeurs

D'avance, merci
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Définition de variable

Message par jturlier » 24 nov. 2020, 16:09

Bonjour Pascal,
bien que non spécialiste du JS, voilà ce que je comprend :

var targetValue = (newValue < minValue ? minValue : (newValue > maxValue ? maxValue : newValue))
Si la variable minValue est inférieure à newValue, targetValue sera égale à minValue.
Si variable minValue est supérieure à newValue on fera l'évaluation (newValue > maxValue ? maxValue : newValue)
-----------------------------------------si newValue est Supérieure à maxValue, le résultat de targetValue sera égal à maxValue sinon, il sera égal à newValue

-----------Ceci semble forcer newValue à toujours être comprise entre [minValue et maxValue], bornes inclues.

Je ne vois aucune raison d'obtenir 0 puisque chacun des noeuds délivre une valeur. Quel que soit le signe de newValue ou des bornes, il n'y a aucune raison pour que cela ne fonctionne pas ... enfin c'est mon opinion et comme tu le sais je suis loin d'avoir des compétences pour commenter.
Par contre, le reste de ton code pourrait être à vérifier, ta variable targetValue a une portée locale et si ce code est dans une procédure, tu ne la verras pas à l'extérieur.
Un autre point de vue peut parfois aider !

Bien amicalement
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Définition de variable

Message par PascalWMR » 29 nov. 2020, 09:57

Salut Jean

Merci pour tes lumières :idea: .
Effectivement, je ne connaissait pas cette syntaxe avec des ? et des : :(

Le problème d'avoir toujours 0 au lieu de valeur négative est à priori résolu.
Le fait que j'obtienne toujours 0 viens de la suite du code. targetValue est en fait une variable de test et dans la suite du code, si value (la valeur récupérée dans les fichiers realtime) est !== (absolument différente) de targetValue alors value prend la valeur de newValue
Or à l'origine, newValue vaut 0.

Le problème vient du fait, si j'ai bien compris le code des steelseriees, de l'ordre dans lequel ont définis.
gauge.setMinValue(), gauge.setMaxValue() et gauge.setValueAnimated()

J'ai réussi à palier au problème en définissant ces valeurs dans l'ordre ci-dessus.

De plus, setMinValue et setMaxValue était définis avec cette formule gauge.setMaxValue(Math.max(Math.ceil((data.XXX_MAX) / 10)*10));
Cela fonctionne avec des gauges style RadialBargraph mais pas avec des gauges style Radial

Donc pour résoudre le problème, en plus de l'ordre dans lequel sont défini les valeurs, j'ai défini la valeur des variables avec ces formules
gauges.setMinValue(Math.floor(data.XXX_MINI)-5);
gauges.setMaxValue(Math.ceil(data.XXX_MAXI)+5);

Tout ce charabia sert en fin de compte à ajuster les échelles de valeurs des gauges en fonction des mini et maxi du jour pour ne pas afficher une échelle fixe en dur (ex pour température de -20 à +50).

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Définition de variable

Message par jturlier » 29 nov. 2020, 16:17

Re bonjour Pascal,
au moins t'ai-je appris quelque chose, ce n'est pas souvent, mais c'est plutôt le contraire :lol: :lol:
Je suis en train de perdre mes cheveux blancs avec tes scripts de meteoConflans2, j'ai encore plein de choses à comprendre dans les scripts JS utilisés pour highslide et tooltips... mais je ne baisse pas les bras ! :evil:
Je n'ai pas de problème pour créer les minigraphes, il ne me reste qu'à les afficher.
Bonne fin de dimanche
Amicalement
Jean

Répondre