Возможность объявить переменную из функции в операторе IF?

Это произошло со мной снова, вместе с сервером, загружающим html-файлы, а не обработкой. Я не использовал веб-сервер Apache некоторое время на компьютере, а между тем Ubuntu обновлялся как еще две версии изначально установленных LTS. Теперь это

$ cat /etc/issue
Ubuntu 16.04 LTS

Итак, php работал так:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Теперь веб-сервер разбирал php. Возможно, теперь вам нужно обновить некоторые веб-страницы, так как теперь php7.0 работает там, где это было до запуска php5. О, хорошо.

0
задан QSmally 24 March 2019 в 19:55
поделиться

3 ответа

Тернарный оператор

Для краткого синтаксиса используйте троичный оператор:

var / const / let переменная [ 1115] = ( условие ) ? значение, если true : значение, если false

Скобка, заключенная в скобки условия являются необязательными.


Демонстрация

/* 
Condition: if (number is greater than 10) ?
             return true 
           : else return false
*/
const gTTen = number => { return (number > 10) ? true : false; }

console.log(gTTen(11));
console.log(gTTen(9));

function ternary(number) {

  /*
  Using the previous function then store its return in a 
  variable
  */
  const tenFilter = gTTen(number);
  
  /*
  Condition: if (previous value is true AND the number is
             less than 20) ?
               range is 30
               : else range is 0
  */
  let range = (tenFilter && number < 20) ? 30 : 0; 
  
  /*
  Condition: if (range = 30) ? 
               result is (the first string)
               : else result is (the last string)
  */               
  let result = range === 30 ? `${number} is within range` : `${number} is not within range`;
  
  return result;
}

console.log(ternary(50));
console.log(ternary(15));

0
ответ дан zer00ne 24 March 2019 в 19:55
поделиться

Ах! Я понял это несколько дней назад, но не успел ответить. Я мог бы использовать локальные переменные, которые я перезаписывал только при выполнении инструкций.

Вот пример.

function retClone(bool) {
    return bool; // Returns same input context for example.
}

if (t = retClone(true)) {
    console.log(t); // true
    // t is truthy, because we get `true` returned.
}

if (t = retClone(false)) {
    // Wouldn't run.
    // t is falsy.
} else {
    console.log(t); // false
}

Спасибо всем, кто откликнулся. ~ Q

0
ответ дан QSmally 24 March 2019 в 19:55
поделиться

Синтаксис не позволяет отображать let, const или var в этой позиции. Но вы можете просто определить переменную (без инициализации) и затем выполнить if:

let n;
if (n = SomeFunc()) {
    // n is truthy
} else {
    // n is falsy
}

Если вы хотите ограничить область действия этой переменной только этим if, то поместите ее в block:

// other code...
{
    let n;
    if (n = SomeFunc()) {
        // n is truthy
    } else {
        // n is falsy
    }
}
// other code...

Конечно, если ваша функция не имеет другого кода, тогда дополнительный блок не требуется: блок функции будет применен.

Многие не согласятся с вами, что задание в условии if является чистым . Лучшая практика - избегать таких побочных эффектов в состоянии, хотя мнения по этому вопросу расходятся. Тем не менее, это не займет больше символов, чтобы написать это следующим образом, и это выглядит мне чище:

{
    let n = SomeFunc();
    if (n) {
        // n is truthy
    } else {
        // n is falsy
    }
}

В качестве выражения функции

Еще один подход заключается в использовании немедленно вызванного выражения функции , которому вы указываете возвращаемое значение функции в качестве аргумента:

(n => {
    if (n) {
        // n is truthy
    } else {
        // n is falsy
    }
})(SomeFunc());
0
ответ дан trincot 24 March 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: