Использование троичных операторов в функции с JavaScript - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в Javascript и вроде работаю через сорняки на этих троичных операторах.У меня есть небольшой фрагмент кода:

const x = MSys.inShip ? 'ship launch' : '';
if (x != '') {send_command(x);} 

Хотя это работает достаточно эффективно, мне любопытно, можно ли его переписать внутри вызова функции.Что-то вроде следующего:

send_command(const x = MSys.inShip 
             ? 'ship launch'
             : MSys.alert("You aren't in your ship!);

Это может не иметь смысла в текущем примере, но это лучшая идея, которая у меня была в то время.По сути, мне нравятся сокращения тернарного стиля для простых условных выражений if / then, но мне не нравится, как они связаны с переменной, которая затем должна вызываться.Я ищу способ использовать это сокращение без привязки к переменной.

Наконец, цель этого состоит в том, чтобы увидеть, находитесь ли вы на корабле и запускаете ли вы.Если вы ничего не делаете или просто отправляете сообщение с предупреждением.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Важное различие между вашими двумя подходами - второй подход ВСЕГДА вызовет send_command (), тогда как ваш первый подход будет вызывать его условно.

Это различие будет иметь значение в зависимости от вашей реализации send_command, но звучит каквам нужно поведение первого подхода.

Кроме того, вы не можете объявлять переменные, используя const в вызове функции.Если вы просто передадите троичный оператор, вы в конечном итоге вызовете send_command либо со своей строкой, либо с неопределенным значением (возвращение вызова alert ()).

Однако, как ответ на ваш вопрос, да, вы можетепередать троичный оператор в функцию, как любое другое значение.Тернарный оператор - это выражение, которое будет возвращать значение.

0 голосов
/ 22 февраля 2019

Технически, вы можете оставить переменную (например, operation) ниже, которая указывает, какой метод вы хотите выполнить, в зависимости от некоторого условия.И затем вы можете передать этому методу переменной строку переменной, которую он должен получить.

Итак, как вы можете видеть, это можно сделать.Но посмотрите, сколько сложностей было добавлено к процессу, а не просто с помощью простого оператора if else.

function test_logic ( inShip ) {
  // if they are in their ship, the operation should be the send_command method
  // otherwise it should be the window alert
  var operation = inShip ? send_command : window.alert;

  function send_command ( command ) {
    console.log( command );
  }
  
  // give the operation the desired string
  operation( inShip ? 'ship launch' : "You aren't in your ship!" );
}

console.log( "Not in ship test" );
test_logic( false );
console.log( "In ship test" );
test_logic( true );
0 голосов
/ 22 февраля 2019

Да, это возможно.Но если вы сделаете это там, тогда вам не понадобится переменная.Вы бы передавали аргумент функции прямо в строке.

Сказав это, вы не можете передать этот оператор MSys.alert() в качестве значения "else", поскольку он будет выполняться во всех случаях.Вам нужно будет передать туда значение, которое функция может использовать в качестве входного аргумента

send_command(MSys.inShip ? 'ship launch' : 'some other string');

Вот пример:

function foo(x){
 console.log(x);
}

// If a random number is even, pass "even". If not, pass "odd"
foo(Math.floor(Math.random() * 10) % 2 === 0 ? "even" : "odd");
...