Некоторое время назад я наткнулся на шаблон, который стал очень полезным. Это позволило мне чисто определить, был ли диагностический режим и ввести информацию в консоли.
Это красивый шаблон … и логичный. Это также вызывает у меня некоторое горе время от времени.
Шаблон
Вот код.
// isDebug state will allow the console.log fire, if true
let isDebug = false;
// here is the conditional
(isDebug) && console.log('debugging this code', { isDebug });
Это кажется довольно круто, и я думаю, что это так.
В основном, если isdebug является …
Верно,&&(и) заставляет код справа на выполнение …Консоль.logАнкетложный,&&(и) Логика в JavaScript не пытается выполнить код справа … НетКонсоль.logАнкет
А также Более
Тогда это было предложено мне … похожим шаблону.
let counts = {};
data.forEach(i => {
// more code here
(i.name in counts) || (counts[i.name] = 0);
counts[i.name]++;
});
По сути, этот код использует аналогичную логику для isdebug Логика выше.
- Если имя в объекте
счета, затем перейдите к следующей строке и добавьте одну. - Если имя не в объекте
счета, затем добавьте клавишу с начальным значением нуля, которое затем увеличивается на одну на следующей строке.
С jshint.com мы получаем «ожидание вызова назначения или функции и вместо этого увидели выражение». На двух рассматриваемых строках здесь.
Ищу более подробную информацию, я нашел Эта документация о том, почему этот вопрос поднимается … Читая это, проблема поднимается для левой части рассматриваемого кода, полностью игнорируя потенциал кода с правой стороны.
Идя еще дальше, я нашел Эта документация Это показало этот шаблон как «короткий замыкание» и, при необходимости, AllshortCircuit это вариант для Linter.
Вывод
Это интересный, терриский шаблон, который, по -видимому, приобрел некоторую тягу: используя выражение, чтобы определить, какую ветвь следует следовать (или ** короткометражным из) кода.
Я скажу, что на личном уровне мне нравится первый шаблон для условной диагностической информации, в то время как второй шаблон казался неловким, но читаемым.
Оригинал: “https://dev.to/rfornal/short-circuiting-javascript-51b9”