2014-01-16 3 views
0

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

getDeviceInfos(deviceIP) ? displayDevice(**return of getDeviceInfos function**) : dead.push=deviceIP; 

Если getDeviceInfos возвращает что-то другое, чем 0 (т.е. == true), я хочу, чтобы возвращаемое значение являлось аргументом в вызове displayDevice.

Есть ли способ это сделать или мне нужно написать «регулярное» сравнение?
Thanks

+0

Каков ваш вопрос? Трудно сказать, что вы пытаетесь сделать здесь. – xdumaine

+3

Не могли бы вы написать его в классическом синтаксисе оператора IF? – dcodesmith

+0

Если getDeviceInfos возвращает что-то еще, чем 0 (тогда это правда), я хочу, чтобы возвращаемое значение являлось аргументом в вызове displayDevice – JeanneD4RK

ответ

3

Вы можете сделать следующее, но для избежания глобальной переменной потребуется var. В результате это не очень прямое выражение.

var info; 
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP); 

Хотя это был не ваш вопрос, вы можете (и, возможно, должны) сделать что-то подобное за счет кэширования результата со стандартным if - else заявление, либо когда вы var info, или в самом if:

var info; 
if (info = getDeviceInfos(deviceIP)) { 
    displayDevice(info); 
} else { 
    dead.push = deviceIP; 
} 

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

+0

Да, вы _could_, и я бы сказал, что вы используете стандартный синтаксис if-then! – aaaidan

2

Сначала создайте переменную, а затем выполнить задание и сравнить, как так -

var a; // <-- A variable. 
(a = getDeviceInfos(deviceIP)) ? displayDevice(a) : dead.push = deviceIP; 
2

На основе вашего обновления в комментариях разделов (и ради читаемость в), я предлагаю сделать это чек на два шага :

var deviceInfo = getDeviceInfos(deviceIP); 
(deviceInfo !== 0) ? displayDevice(deviceInfo) : dead.push=deviceIP; 

Это более точная проверка состояния и его легче читать.

0

Conditional Operator

Несколько тройных оценки также возможно (примечание: условный оператор является правильной ассоциативным).

var hadRelations = false; 
var isSure = false; 
var presidentQuote = hadRelations ? "Had relations" : isSure ? "Did not have relations" : "I admit"; 
console.log(presidentQuote); // Prints "I admit" in the console 
-1

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

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

Сравнить:

var info; 
(info = getDeviceInfos(deviceIP)) ? displayDevice(info) : (dead.push = deviceIP); 

с ...

var info = getDeviceInfos(deviceIP); 
if (info) { 
    displayDevice(info); 
} else { 
    dead.push = deviceIP; 
} 

Конечно, если-то стиль менее компактен, но это гораздо легче понять, отлаживать и расширить.

Короче говоря, почти нет причин использовать тройной синтаксис: он обычно вреден для качества кода. Избегайте.

+0

«вообще вредно для качества кода» является довольно смелым заявлением. LOL – talemyn

+0

Виновен как заряженный! – aaaidan

0

Я переместил его в саму функцию ..

function getDeviceInfos(pIp) 
{ 
    //code 
    result ? displayDevice(result) : dead[dead.length]=pIp 
} 
Смежные вопросы