• Правильная организация?

    @LukyanovPA
    Android Developer
    Если будешь использовать еще где-то, то выноси, если нет, но нет. Твой Кэп)
    Ответ написан
    Комментировать
  • Как закрыть блок на крестик и запомнить, что он был закрыт?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Состояние страницы описывается набором закрытых блоков. Понадобится ещё и время их закрытия, чтобы игнорировать устаревшие. Предлагаю хранить объект, где ключи – id блоков. А значения – timestamp когда их закрыли. Что-то типа
    const boxState = {
      "block-ad-123": 1668436835032,
      "block-ad-456": 1668436842279,
    };
    Хранить этот объект можно в localStorage, переведя в строку: JSON.stringify(boxState)

    Изначально закрытых блоков нет, просто пустой объект.

    Алгоритм
    Загрузили страницу, все блоки видны.
    Считали состояние из localStorage, и если там пусто, взяли пустой объект.
    Пройти по объекту, и если прошло еще мало времени по очередному ключу, скрыть его блок.
    Если времени прошло много – удалить этот ключ из стейта.
    Если при обходе объекта были удаления – сохранить обновлённый стейт в localStorage.
    spoiler
    const boxKey = 'BOX_STATE'; // ключ для хранения в localStorage
    const boxState = JSON.parse(localStorage.getItem(boxKey)) ?? {};
    
    const TTL = 36e5; // сколько держать блок скрытым, в миллисекундах (1 час)
    const expiredIds = [];
    Object.entries(boxState)
      .forEach((key, value) => {
        if (value + TTL < Date.now()) {
          // устарел, более не скрываем
          expiredIds.push(key);
        } else {
          // актуален, скрываем блок
          document.getElementById(key).classList.add("hide");
        }
      });
    
      if (expiredIds.length) {
        expiredIds.forEach(id => delete boxState[id]);
        localStorage.setItem(boxKey, JSON.stringify(boxState));
      }


    При нажатии на крестик:
    1. добавить в стейт id этого блока и текущее время Date.now(),
    2. сохранить состояние в localStorage,
    3. добавить класс блоку.
    spoiler
    const onClose = ({ target }) => {
      const block = target.closest('div.block');
      const { id } = block;
      boxState[id] = Date.now();
      localStorage.setItem(boxKey, JSON.stringify(boxState));
      block.classList.add("hide");
    };
    document.querySelectorAll('img.x-button')
      .addEventListener('click', onClose);
    Ответ написан
    Комментировать
  • Нужно ли закрывать bufferreader и тому подобные в Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Лучше закрыть для избежания неопределённости.
    Используйте try-with-resources.
    Ответ написан
    Комментировать
  • Почему используется потенциально неинициализированная локальная переменная-указатель "matrix"?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    У вас же C++, поэтому можно и нужно сильно упростить код.
    #include <vector>
    
    // ...
    
    std::vector<std::vector<float>> matrix(n, std::vector<float>(m));
    Ответ написан
    Комментировать
  • Почему используется потенциально неинициализированная локальная переменная-указатель "matrix"?

    @Miron11
    Пишу sql 20 лет. Срок :)
    When code reaches this line:
    if (d == '1') {//ручной ввод данных в матрицу
    it sees curly brace "{" and opens, what is called, a new scope of automatic variable.
    Subsequently this line:
    //создаем массив
    float** matrix = new float* [n];
    is the place where the above feature allows for mistake to occur.
    If it wasn't for new scope, compiler would have notified you of error, something like "attempt to declare variable, variable matrix already declared"
    provided you with error message, line number, and later edition even notify users of possible fix.
    All you need to do is to remove
    float** inside this if condition
    --if (d == '1') {//ручной ввод данных в матрицу--
    and error would be mended.
    Here is link from wikipedia. I have red its section "In specific programming languages", subsection "C, C++", and I can confirm that it is speaking truth.
    Ответ написан
    Комментировать
  • Как сделать форму обратной связи на русском домене?

    Ну, тебе бы обратиться к хостингу, на котором сайт лежит, ибо если проверки ради функция mail вообще не работает и не посылает тебе на почту тестовые данные, то это вопросы к хостингу, почему оно не работает.
    Ответ написан
    5 комментариев
  • Как при переходе на другую страницу сохранять выбранное значение select?

    Stalker_RED
    @Stalker_RED
    Нужно для каждого запоминаемого элемента свой ключ устанавливать.

    С чекбоксами разбирайтесь сами, принцип тот-же, только checked выставить. С радио сложнее немножко.
    Ответ написан