• А почему toggleClass не хочет работать?

    y0u
    @y0u Куратор тега JavaScript
    dev
    На псевдоэлементы нельзя повесить обработчик событий.
    Ответ написан
    Комментировать
  • Почему скрипт запуска проекта из package.json падает с ошибкой?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Винда не считает ' кавычками и кидает их как часть параметра.
    Экранировать чтоб оно работало на всех ОС - не так просто, а результат - уродлив, так что рекомендуется просто указать параметры для перезаписи под ключом ts-node в tsconfig.json:
    {
      "ts-node": {
        "compilerOptions": {
          "module": "CommonJS"
        }
      },
      ...
    }
    Ответ написан
    1 комментарий
  • Как можно корректно написать асинхронный метод у объекта в typescript с дженериком?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Что именно ты хочешь сократить, вроде ж дальше некуда: один тип на вход - один на выход?

    Ну можешь убрать async и await, они здесь не нужны:
    const ApiServiceModule = {
      get: <T>(url: string): Promise<T> => fetch(url)
        .then(response => response.json())
        .catch(err => console.error(err))
    }
    async/await всего лишь сахар над Promise и в данном случае ничего не делают, т.к fetch и так возвращает Promise.

    P.S. Ну и методом я бы это не назвал, это свойство с функцией. Метод имеет доступ к this.
    Ответ написан
    Комментировать
  • Как понять и реализовать битовую карту?

    @Karpion
    Запись "HOVERED | FOCUSED" читается "HOVERED или FOCUSED". Однако, по-русски это должно говориться "HOVERED и FOCUSED" (аналог: крокодил - длинный и зелёный").
    Ещё это выражение можно записать "HOVERED + FOCUSED" - будет то же самое, и к тому же понятнее. Но эта форма записи плоха тем, что для двух одинаковых признаков "HOVERED | HOVERED == HOVERED", а вот при сложении будет не так.

    Допустим, переменная x содержит в себе статус кнопки. Работать с этой переменной надо так:
    • Кнопка попала в фокус: x|=FOCUSED
    • Кнопка вышла из фокуса: x&=~FOCUSED
    • Проверка, в фокусе ли кнопка: x&FOCUSED?в_фокусе:не_в_фокусе
    Это можно использовать бездумно, не зная о двоичном представлении чисел.
    Ответ написан
    2 комментария
  • Как понять и реализовать битовую карту?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    | - это побитовое ИЛИ. & - побитовое И. Т.е. каждый разряд отдельно обрабатывается и, в случае ИЛИ, если хоть одно число имеет единицу в данном разряде, то и результат будет 1. Соответственно, 00001 | 00010 = 00011.

    Степени двойки - это числа, где единица стоит только в одном бите. Если несколько таких чисел про-ИЛИ-ть - то получится число, где стоят единицы во всех нужных разрядах. Фактически, вы назначаете каждому состоянию свой разряд. Потом, где в числе стоят единицы - те состояния и есть.

    Чтобы проверить, что бит в числе установлен, надо взять побитовое И и убедиться, что результат не 0 (он может быть либо 0 либо какой-то степенью двойки.
    Ответ написан
    Комментировать
  • Как понять и реализовать битовую карту?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Это не битовые карты, а битовые операции, маскирование.

    Component.State = {
    DISABLED: 1,
    FOCUSED: 2,
    HOVERED: 4,
    ACTIVE: 8,
    HAS_ICON: 16
    }

    Переводим всё в двоичные числа:
    DISABLED: 00000001,
    FOCUSED: 00000010,
    HOVERED: 00000100,
    ACTIVE: 00001000,
    HAS_ICON: 00010000
    Видишь как бит с единицей смещается?
    Теперь применяем битовую операцию ИЛИ к выбранным значениям:
    HOVERED | FOCUSED =
    00000100 (4)
    +
    00000010 (2)
    =
    00000110 (6)
    Мы смешали два значения и получили новое, в котором храним новое состояние.
    Теперь, чтобы проверить, что в состоянии x=6 = 00000110 есть какое-то значение, нам надо проверить его битовой операцией И и сравнить с нулём:
    Есть ли в x FOCUSED?
    if (x & FOCUSED > 0) => есть, иначе нет: 00000110 & 00000100 = 00000100 > 0 => значение ЕСТЬ!

    Есть ли в x DISABLED?
    if (x & DISABLED > 0) => есть, иначе нет: 00000110 & 00000001 = 00000000 = 0 => значения НЕТ!
    Ответ написан
    9 комментариев
  • Как понять и реализовать битовую карту?

    hzzzzl
    @hzzzzl
    так будет нагляднее

    states = {
      DISABLED: 0b001,   // так можно писать двоичные числа
      FOCUSED: 0b010,
      HOVERED: 0b100,
    }
    
    (states.DISABLED | states.HOVERED).toString(2)  // .toString(2) - переводит в двоичную
    // "101"   // поставлены 1 и 3 биты
    Ответ написан
    Комментировать