2011-02-17 2 views
0

Я смотрю на следующий код Javascript, пытается портировать его на другой язык:основной Javascript, если/другое заявление вопрос

if (x>n) {return q} {return 1-q) 

Я не знаю, что делает код, но может кто-то сказать меня на основе синтаксиса, что происходит? Есть ли подразумеваемый «else» перед последним набором {}? То есть, если x> n, тогда верните q в противном случае верните 1-q?

Если это поможет, вот строка кода он был встроен в:

if(x>9000 | n>6000) { var q=Norm((Power(x/n,2/5)+1/(8*n)-1)/Sqrt(9/(2*n)))/3; if (x>n) {return q}{return 1-q} } 

благодаря

+3

Мои глаза кровоточат. –

+0

@Jacob Relkin Это может быть из сжатой библиотеки сценариев java, т. Е. Выбрасывать все пробелы и символы новой строки, чтобы свести к минимуму размер файла. –

+1

@SemVanmeenen Кроме этого * не выбрасывает все бессмысленные пробелы: P – alex

ответ

2

Существует только подразумеваемый вариант, потому что блок, который пары с оператором if возвращается из функции. Код размещен эквивалентно:

if(x > n) 
{ 
    return q; 
} 
return q + 1; 

Вы можете получить только, если/иначе, как поведение, потому что второе утверждение может быть выполнена только в случае, если первое утверждение не является (потому что первый оператор будет возвращать из функции, и контроль никогда не дойдет до второго).

Этот плохой код! Для читаемости/ремонтопригодность/здравомыслия, оно должно быть написано на одном из этих более устойчивых форматов:

if(x > n) {return q;} 
else  {return q + 1;} 

Или:

return (x > n)? q : q + 1; 

Надежда, что помогает!

2

Его в основном это:

if (x>n) 
    return q; 
else 
    return 1-q; 
+0

красиво ответил. Просто. – baash05

+0

Неправда! Это происходит только потому, что возвращается блок 'if'. Все остальное, скажем, 'if (x> n) {x + = 12} {x + = 7}', будет вести себя совершенно по-другому. Существует _not_ подразумеваемый 'else'. –

+0

@ Xavier - это с 'return'. –

1

Там в подразумеваемой еще. Если x> n, функция возвращает q. В противном случае он переходит к следующему оператору return и возвращает 1-q.

+1

Немного вводит в заблуждение, чтобы сказать «подразумеваемые другие». Если в предложении 'if' не было' return', оба предложения будут выполняться, когда результат теста будет равен true. См. Http://jsfiddle.net/daybarr/jJCGE/ для кода – Day

+0

С этим первым возвратом туда второе возвращение будет достигнуто только в том случае, если оператор if был ложным. Следовательно, импликация другого. Это стилистически плохо, но то, что он просил, было значением: что произойдет, если код будет выполнен. Я надеюсь, что его переписывание будет лучше кода. ;-) –

2

Не существует подразумеваемого «else», следующий набор фигурных скобок просто определяет другой составной оператор. В этом случае он действует как «else», но только потому, что часть «if» содержит оператор return.

1

Этого код действительно ...

if (x > 9000 | n > 6000) { 
    var q = Norm((Power(x/n, 2/5) + 1/(8 * n) - 1)/Sqrt(9/(2 * n)))/3; 
    if (x > n) { 
     return q 
    } { 
     return 1 - q 
    } 
} 

Либо кто-то думает, что нечитаемый код является хорошей идеей, или они использовали плохой minifer.

1

Этот блок {} после return q не нужен. там нет никакого выражения, подразумеваемого там, это просто, если он проходит через инструкцию if и возвращает q, то, что будет дальше, больше не будет выполнено, иначе это произойдет. Тогда нет необходимости ставить там что-то еще.

Смежные вопросы