Нужно уточнить, используя 0 с троичным оператором
Я читаю исходники, написанные в игре. Некоторые строки написаны следующим образом:
0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
Предположим, что player
это спрайт с позицией и global
это просто импорт из других файлов, который содержит некоторые свойства. Что делает приведенный выше код? Я думал, что троичный оператор будет примерно таким:
c ? a : b
где a
а также b
того же типа и c
это условие.
Но демо-версия игры проходит гладко, поэтому приведенный выше код должен быть в порядке. Я просто не понимаю смысл кода.
Код извлечен отсюда:
https://github.com/huytd/agar.io-clone/blob/master/src/client/js/app.js
3 ответа
В вышеприведенном троичном утверждении 0
это условие.
Потому что Javascript лечит 0
как falsy
, заявление оценивается так, как если бы оно было записано как:
false ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
Следовательно, global.screenHeight/2 - player.y
будет возвращен.
Возможно, автор поместил троичную комбинацию там, чтобы действовать как выключатель. Заменив 0
с 1
троичное заявление вернется player.y > global.screenHeight/2
вместо.
0 ? player.y > global.screenHeight/2 : global.screenHeight/2 - player.y
Здесь 0 ложно, поэтому global.screenHeight/2 - player.y
будет всегда исполняться
c ? a : b
a
а также b
можно оценить значения любого типа, и c
будет оценивать true
или же false
,
0
будет оценивать false
, "б" будет работать: global.screenHeight/2 - player.y
Это произойдет независимо от чего-либо еще - первое выражение никогда не запустится.
Если бы мне пришлось угадывать, почему это там, я бы сказал, что это может быть заполнитель для запланированной функции или улучшения (однако я, очевидно, не могу знать наверняка).