Несколько болезненный тройной вложенный тернарный оператор

Я просмотрел исходный код Raphael.js, чтобы узнать, как он преобразовал значения RGB в HSB. Я нашел функцию, в которой он это сделал, и я был в процессе преобразования ее в Python, когда я наткнулся на этот хороший тройной вложенный тернарный оператор:

H = (C == 0 ? null :
    V == r ? (g - b) / C :
    V == g ? (b - r) / C + 2 :
             (r - g) / C + 4
    );

Это заставило меня зациклиться, потому что Python не имеет такого тернарного оператора, который делает Javascript. Я потратил некоторое время на его просмотр и, в конце концов, хэшировал из него этот несколько более разумный код (используя только if/else):

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;
        }
    }
}

Верна ли моя интерпретация? Я спрашиваю об этом только потому, что если это неверно, я столкнусь с кучейотладки. Так. Я "понял"?

24
задан Óscar López 10 May 2012 в 02:31
поделиться