A somewhat painful triple-nested ternary operator

后端 未结 9 1525
北恋
北恋 2020-12-30 20:12

I went looking through Raphael.js\'s source code to find out how he converted RGB values to HSB. I found out the function he did it in and I was in the process

相关标签:
9条回答
  • 2020-12-30 20:49

    The same logic can be written in a simpler way:

    var H
    
    if (C == 0)
        H = null;
    else if (V == r)
        H = (g - b) / C;
    else if (V == g)
        H = (b - r) / C + 2;
    else
        H = (r - g) / C + 4;
    

    It's possible to omit the curly braces because there's a single statement in each condition. And given that the conditions are mutually exclusive, using else if is much clearer than nesting ifs.

    0 讨论(0)
  • 2020-12-30 20:51

    As mentioned in MDN Docs:

    function example(…) {
        return condition1 ? value1
             : condition2 ? value2
             : condition3 ? value3
             : value4;
    }
    
    // Equivalent to:
    
    function example(…) {
        if (condition1) { return value1; }
        else if (condition2) { return value2; }
        else if (condition3) { return value3; }
        else { return value4; }
    }
    
    0 讨论(0)
  • 2020-12-30 20:54

    I think you can have this to avoid the deep nesting:

    var H
    
    if(C == 0){
        H = null;
    }
    else if(V == r){
        H = (g - b) / C;
    }
    else if (V == g){
        H = (b - r) / C + 2;
    }
    else {
        H = (r - g) / C + 4;
    }
    
    0 讨论(0)
提交回复
热议问题