• Правильно ли выбрасывать исключения в бизнес логике?

    Я считаю это хорошей практикой. Исключительная ситуация - это та, при которой программа выполняется не так, как ожидалось. Но, позвольте, я ожидаю, что заказ пройдет валидацию. Я ожидаю, что заказ завершится успехом. Поэтому OrderValidationException, OrderException - исключительные ситуации. Исключительной ситуацией не является, например, отмена пользователем заказа - глупо выбрасывать исключение по клику на Cancel.

    Исключения гораздо глубже, чем просто "исключительная ситуация". Они помогают развести обработку ошибок по разным уровням абстракции, а использование разных типов исключений позволяет обрабатывать конкретные ошибки там, где их нужно обработать (на нужном слое). Исключения очень помогают в локализации ошибки в дальнейшем, они позволяют избавиться от простыни If .. else, проверок на null, false и прочей ереси. Они, чаще всего, делают код чище.

    Но пользоваться ими стоит аккуратно, все-таки стоит разделять исключительную ситуацию и вполне нормальную, штатную ветку исполнения. Так, если заказов нет - это НЕ исключение, тут можно вернуть null - допустимо (хотя некоторые и тут выбрасывают исключение, потому что очень соблазнительно привязать код исключения к HTTP кодам). А если у вас аплоад документов, и юзер пытается загрузить файл слишком большой, то это уже исключение.
    Ответ написан
  • Фон выходит за пределы экрана, как поправить?

    Присоединяюсь к frontend queen, что картинка в футере - странно. На скрине вариант вёрстки:
    5e6798429cbac664539423.png
    Ответ написан
  • Как сделать такой фигурный бордер на css?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега CSS
    CEO iAmStudio, предприниматель.
    У предложенных методов есть существенный минус: они предполагают фон у псевдоэлементов, который перекрывает границу. Вот тут наглядно, что происходит, если фон отличается от цвета перекрытия. Поэтому подходит далеко не всегда. Плюс ты не сможешь сделать таким образом тень, как на твоей пикче.

    Так ты сможешь сделать если используешь png картинку с drop-shadow, либо с использованием SVG. Первый вариант — по сути такой же костыль, так как подходит для исключительно одного частного случая в проекте, для других надо будет другие размеры картинок а png весит много. В теории можно воспользоваться gif с прозрачность и оптимизировать его в нулину, но я не пробовал. А второй вариант вносит на первым порах немного геморроя в твою жизнь, впрочем со временем ты уже сможешь легче делать такие штуки.

    Другое дело, что их встречается не так уж и часто в хороших проектах. Тем не менее понимания SVG это сейчас мастхэв.

    PS: есть и еще варианты решений, но чем дальше от предложенных, тем больше костылей на костылях. Возможно так сможешь и clip-path, но это я тоже не пробовал комбинировать с тенью, так что можешь попробовать.
    Ответ написан
  • Почему в arguments метода попадает только 1 параметр?

    Seasle
    @Seasle Куратор тега JavaScript
    Помог - отметь решением \( ゚ヮ゚)/
    Читаем это. Вариант 2: function (...arguments) {...}
    Ответ написан
  • Почему в arguments метода попадает только 1 параметр?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А сколько туда должно попасть? Параметр то указан только один - arguments.
    Можете получить их массивом, function (...arguments) { }
    Ответ написан
  • Что нужно делать на практике в JavaScript, чтобы его понимать?

    contraomnes
    @contraomnes
    Frontend developer
    Задачки + английский
    https://www.codewars.com/
    https://www.hackerrank.com/

    Учебник по js на русском с примерами и задачками
    https://learn.javascript.ru/

    Кроме того, одним javascript'ом сыт не будешь)
    frontend.png
    Ответ написан
  • Как реализовать такой элемент в CSS?

    sniggering_deus
    @sniggering_deus Куратор тега CSS
    I will live forever in the flame of your eyes.
    Вариант первый:



    Вариант второй:



    Вариант третий:



    Вариант четвёртый:



    Вариант пятый:



    Вариант шестой:



    Вариант седьмой:



    Вариант восьмой:



    Вариант девятый:



    Вариант десятый:



    Вариант одиннадцатый:



    Вариант двенадцатый:



    =================================================================================
    =================================================================================

    Моя коллекция меню навигаций и хлебных крошек: https://codepen.io/collection/njaGMk
    Оставляю ссылку тут. Коллекция будет обновляться.
    Ответ написан
  • В какой ВУЗ поступать?

    lamer350
    @lamer350
    กำลังสูงสุด
    Мы же не знаем в какой стране вы находитесь, тут русскоязычное сообщество из всего мира.
    На деле же программа в вузах всегда отстает от технологий, вам все равно придется учится самому в большей степени. При устройстве на работу толку от диплома все равно не будет, больше всего набраться реального опыта помогут хакатоны, конференции и прохождение практик на летних каникулах. А при устройсве на работу больше будет иметь вес портфолио.
    Я советую выбирать тот факультет где хороший упор на иностранные языки и математические задачи для развития мышления.
    Ответ написан
  • Как посчитать количество единиц в строке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    [...str].reduce((acc, n) => acc + (n === '1'), 0)

    или

    str.match(/1/g)?.length ?? 0

    или

    str.split('').filter(n => n === '1').length

    или

    str.replace(/[^1]/g, '').length

    или

    eval(Array.from(str, n => +(n === '1')).join('+')) || 0
    Ответ написан
  • Зачем нужен then в промисах если есть await?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    «Вначале были промисы»
    Затем, позже, сделали разноцветный синтаксический фантик для них — async / await

    У промисов держателем кнопки «пауза» являтся очередной промис. У этого промиса, как будильника, можно вызвать метод then() — как приклеить стикер на циферблат, где написано, что надо будет сделать, когда время придёт.
    В приклеенный метод then() ничего не попадает «сразу». Вернее, в него сразу передают 2 функции: одну вызовут, когда промис выполнится; вторую – если обломается: .then(onResolve, onError)
    Стоит будильник, на нём наклейка then, на ней написано, что сделать, если ОК и если облом. Ждём-с. Тикает.

    await прячет под капот движка JS лишние провода, и наверху просто возвращает результат выполненной асинхроты. Или кидает Exception в случае облома — его надо ловить обычными try..catch

    Перечитав вопрос, предположу, что неправильно готовили промис с запросом. Надо примерно так:
    const requestPromise = new Promise(function(res, rej) {
      setTimeout( function(result){ // имитация асинхр запроса куда-то
        // тут, типа, наконец получили ответ
        if (result.error_code) {
          rej(error_code); // облом
        } else {
          res(result); // обещание выполнено с результатом
        }
      }, 2000);
    });
    
    // здесь requestPromise – это Promise в статусе "pending"
    
    requestPromise.then( // сюда ничего не попадает «сразу». Оно внутри ждёт. Терпеливо.
      function(result) {console.log(result, "мы молодцы");},
      function(error) {console.error(error, "облом вышел");},
    );
    При желании можно навесить ещё собак then'ов на тот же Promise:
    requestPromise.then(r => console.log("result log:", r));
    Ответ написан
  • Как сверстать текст по дуге?

    Принципиальная особенность (достоинство) этого способа – в том, что геометрия самих букв тоже изменяется. Напр. в букве "H" параллельные вертикальные становятся непараллельными, получив перспективное искажение. Т.е. это 100% честное искажение всей картинки, а не разброс букв по отдельности.

    Способ: отрисовать этот текст в SVG, из него сделать canvas в разрешении с запасом – в несколько раз больше нужного. В canvas применить нужные искажения (легкая фраза, за которой куча сложностей, в т.ч. математика и антиалиасинг).

    Вставить как data-uri и просто новые canvas.

    Сделал пример, в котором из такого:
    <svg xmlns="http://www.w3.org/2000/svg"
         width="920" height="160" viewBox="0 0 230 40">
      <text text-anchor="middle" x="115" y="32" font-family="Times New Roman" font-size="35">
        Hello, Toster
      </text>
    </svg>
    получается такая картинка:
    example.png
    P.S. там всё сыро, надо ещё по краям области билиниар интерполяцию прозрачности, что ли, сделать..
    Ответ написан
  • Как поменять цвет меню после того, как оно покинет свою изначальную позицию?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Поскольку меню не покидает свою позицию, а всегда fixed, то проверять скролл.
    Как только он отличен от нуля (или больше, чем вам нужно) менять класс у меню.
    И в обратную сторону.
    Ответ написан