169 похожих чатов

Добрый день. Я как-то автоматически выработал паттерн iife + реактивная

декларация. Это чтобы описать какую-то сложную зависимость несколькими инструкциями. Вот что я имею ввиду.
$: marker = (() => {
if (!$article) return;
return $items.find(item => {
return item.articles.includes($article!);
});
})();
Я знаю, что в свелте переменные реактивны, так что можно сделать так:
let marker: Item | undefined;
$: {
if (!$article) return;
const _marker = $items.find(item => {
return item.articles.includes($article!);
});
if (_marker) marker = _marker;
}
Какие есть аргументы в пользу каждой сторон? Второй выглядит более свелт-вей, но насколько я знаю, компилятор преобразует всякие реактивные штуки в элементы "контекста", и при изменении реактивной штуки мутируют контекст и оповещают об этом всех. Так как это не нативные переменные JS, это медленнее. В этом и преимущество горячо любимого тут компилятора Malina, что он эмитит обычные переменные, кажется. Так вот, во втором случае в контекст будет попадать два элемента, вместо одного. Будет от этого приложение намного больше и медленнее? И имеет ли эта разница значения?

4 ответов

23 просмотра

Честно говоря, разница окажется настолько минимальной, что выходит непрактичным выбирать по перфомансу. Надо выбирать по тому, что лучше читается (имхо, второе) или что просто больше нравится. Но тут, кажется, можно выражение упростить, чтоб была просто реактивная переменная. $: marker = $items.find(item => item.articles.includes($article)) ?? marker

Valeriy-пожилой Автор вопроса
Daniil Kozlov
Честно говоря, разница окажется настолько минималь...

Спасибо. Мне больше нравится первый вариант. Все вычисления скрываются в небольшом иммедиейте. Насчёт самого примера кода... Я не захотел записать всё в одну строку, так как не хотел использовать non-null assertion лишний раз. Параметр у Array#includes является non-nullable, в отличии от значения стора, хотя для includes null-безопасность совсем важна. Поэтому я написал if, который в обычном тайпскрипте был бы тайп-гардом, но это не сработало, наверное, из-за $. Так что получилось, что !-оператор всё равно пришлось применить. Моя невнимательность.

А чем это лучше $: marker = $article && $items.find(item => item.articles.includes($article)); ?

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта