Задать вопрос
Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (11)

Лучшие ответы пользователя

Все ответы (7)
  • JS. Централизованная обработка ошибок

    alienator
    @alienator
    Никто за вас не решит, что лучше.

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

    Это необходимый минимум.

    А дальше смотрите глубже. Что вам даст функция-обработчик внутри объекта исключения? Во многих случаях она уже бесполезна; она слишком далеко от точки возникновения ошибки, чтобы попробовать ее исправить (например, вызвать код повторно со значением по умолчанию, подождать освобождения ресурса и т.п., короче, какой-нибудь while/try).

    Перед каждым вызовом функции, которая может выбросить исключение, перед каждым входом в компонент у вас есть три пути:

    • обработать какие-то (или все) исключения здесь
    • обработать и передать выше (повторный throw)
    • ничего не делать (передать сразу наверх)


    Вам придется опускать обработку исключений глубже хотя бы там, где понадобится finally код. И там, где вы можете сделать что-то осмысленное, прежде чем полностью отваливаться с криками в лог.

    И вот там, поглубже, внутри компонента, уже действует ряд разумных рекомендаций:

    1. Не ловить всё подряд. Обрабатывать только те исключения, с которыми известно, что делать. Если не совсем известно, делать re-throw.

    2. re-throw делать аккуратно. Не надо, опять же, хватать больше от жадности, а потом пропускать исключения ненужных классов. Для ява-скрипта это выражается вот в чем:

    Нехорошо:
    try {
         // ...
    } catch (e) {
         if (! e instanceof MyError) {
              throw e;
         }
        // ...
    }
    


    Хорошо:
    try {
         // ...
    } catch (e if e instanceof MyError) {
        // ...
    }
    


    3. То, что вы делаете в finally, важнее, чем то, что делаете в catch. Есть что подчистить — надо подчистить.

    4. Не надо терять информацию об ошибке (генерить или ре-генерить исключение более широкого класса). Правда, при разработке либы лучше наоборот, свои мелочи держать в себе и заменять низкоуровневые ошибки на более общие.

    Ну, что хотел сказать, то сказал. Удачи.
    Ответ написан
    3 комментария
  • В программировании под Android есть термин Intent, как его адекватнее перевести на русский?

    alienator
    @alienator
    В агентных системах, afaik, переводят как намерение. И смысл здесь именно таков, так что я голосую за этот вариант :)

    Есть еще калькированное интенсионал, но его семантики прочно забили за собой, так что не годится.
    Ответ написан
    Комментировать
  • форматы картинок в PDF

    alienator
    @alienator
    www.adobe.com/devnet/pdf/pdf_reference.html
    Неожиданно, правда? ;)

    Вам нужен тот документ, который в самом низу страницы, свободная «почти копия» стандарта ISO 32000-1:2008:
    www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf

    А там вам нужны пункты «8.3.2.2 Device Space», «8.3.2.3 User Space» и «8.9.4 Image Coordinate System» в которых рассказывается, почему эти dpi никому нафик не впились :) и поля такого у картинки нет.
    Ответ написан
    1 комментарий
  • Много ли Скайп "ест" трафика?

    alienator
    @alienator
    В простое:
    On average Skype uses 0-0.5 kilobytes/sec while idle.

    При звонках — понятное дело, что по-разному. От 10 kbps обычно, как правило, не больше 30 kbps. Для видеозвонков обычно до 70 kbps, хотя может и все 300 взять, если High Quality включить.
    Ответ написан
    Комментировать