2010-12-10 3 views
1

Je ne sais rien à propos de javascript et ont besoin d'aide interpréter les éléments suivants:javascript pour la conversion objective-c

{ 
    var d = max - min; 
    s = l > 0.5 ? d/(2 - max - min) : d/(max + min); 
    switch(max){ 
     case r: h = (g - b)/d + (g < b ? 6 : 0); break; 
     case g: h = (b - r)/d + 2; break; 
     case b: h = (r - g)/d + 4; break; 
    } 
} 

Quelqu'un pourrait-il expliquer s'il vous plaît ce que cela signifie que je peux coder un équivalent en Objective-C?

Merci!

ou de rendre ma question encore plus pertinente. pourriez-vous s'il vous plaît traduire (en langage humain) la ligne suivante pour moi?

s = l > 0.5 ? d/(2 - max - min) : d/(max + min); 
+0

Le code C (et donc Objective-C) équivalent serait très similaire. Quelle partie ne comprenez-vous pas? –

+0

la deuxième ligne spécifiquement .... s = l> 0,5? d/(2 - max - min): d/(max + min); Je vous remercie. – TrekOnTV2017

+2

'switch' /' case' avec des cas variables serait incompatible avec C. –

Répondre

4
s = l > 0.5 ? d/(2 - max - min) : d/(max + min); 

l'opérateur expression ? value1 : value2 évalue la expression et, si elle est vrai, retourne value1, sinon retourne value2. donc dans ce cas particulier, il évaluera l > 0.5, si cela est vrai, il va régler s-d/(2 - max - min), sinon il va régler s à d/(max + min)


EDIT en réponse au commentaire:

Je ne connais pas vraiment beaucoup de Javascript, mais comme pour l'instruction switch, il semble utiliser des cas variables. Ce n'est pas autorisé en Objective-C (ou C, d'ailleurs). Mais il semble essayer de trouver qui des r, g ou b des variables est égale à la variable max ...

Dans Objective-C (ou C, ou C++) une déclaration switch ne peut utiliser des valeurs de cas constants , comme ceci:

switch (myVariable) 
{ 
    case 0: 
     //do something if myVariable == 0 
     break; 
    case 1: 
     //do something if myVariable == 1 
     break; 
    case 2: 
     //do something if myVariable == 2 
     break; 
} 

Je vais faire une supposition ici et dire que dans javascript avec des cas variables, il serait probablement équivalent à quelque chose comme

if (max == r) 
    h = (g - b)/d + (g < b ? 6 : 0); 
else if (max == g) 
    h = (b - r)/d + 2; 
else if (max == b) 
    h = (r - g)/d + 4; 

si quelqu'un qui sait plus sur javascript pourrait confirmer que pour nous, ce serait génial.

+0

ouais, c'est ce que j'ai fini par faire exactement. Merci de prendre le temps. – TrekOnTV2017

1

Ceci est en fait très simple, tout ce que vous devez faire est de changer var à float.

-1

Je dirais que cela signifie que quiconque d'où vous avez hérité de ce code a besoin d'apprendre à nommer les variables correctement.

+2

Juste en passant, mais je ne peux m'empêcher de commenter: on dirait que ce code convertit RGB en HSL, ce qui signifie que les variables nommées h, s et l prennent tout leur sens. Et le but de la variable 'd' est parfaitement clair dès la première affectation (quand vous voyez d = max - min, vous savez que cela signifie 'delta' ou 'distance'). Donc je ne dirais pas que les noms sont mauvais. –

0

Semble être un fragment d'un algorithme pour affecter de nouvelles couleurs RVB à quelque chose. Impossible de dire sans aucune information sur les valeurs max, min. d est probablement "distance".

var s est attribué quelque chose avec un ternaire: opérateur, mais s est pas utilisé à nouveau dans le bloc-