А как вам такой синтакс?

Все знают, что пользоваться browser-detection – неправильно. Подозреваю, эти же все знают, что правильно пользоваться так называемым object-detection. Если вы еще не входите в число этих «всех», сходите к Peter-Paul Koch’y, он подробно расписал, чем одно хуже другого.

Предположим, мы пишем класс ArrayUtilites, который удачно сочетает в себе разные вкусняшки для работы с массивами. И мы хотим, чтобы у нас был кроссбраузерный метод each. Мой вариант написания, сам алгоритм взят с MDC:forEach#compability:

if (typeof ArrayUtilites == "undefined" || !ArrayUtilites) {
    var ArrayUtilites = {};
}
 
ArrayUtilites.each = (Array.prototype.forEach) ?
    function (a, f, o) {
        Array.prototype.forEach.call(a, f, o || A);
        return ArrayUtilites;
    } :
    function (a, f, o) {
        for (var i = 0, it; it = a[i]; i=i+1) {
            f.call(o || A, it, i, a);
        }
        return ArrayUtilites;
    };

Как уважаемые любители JavaScript воспринимают такой синтакс для feature-detection? А именно, использование тернарного оператора (a ? b : c) вместо условной конструкции (if else)?

7 комментариев to “А как вам такой синтакс?”

  1. Видимо, у меня какое-то помутнение – не могу понять что же такое «A».
    Аппетит к тернарным операторам приходит во время «еды» )

  2. @eg

    Упс :)

    A – это опечатка :)

    Это я скопировал кусочек из рабочего кода, и как следует не проверил. В данном случае A – это указатель на ArrayUtilites.

  3. эта штука называется в разных местах ещё как browser feature sniffing и capabilities detection

  4. Cправедливое уточнение.
    Действительно, и такие названия можно встретить.

  5. Как мне кажется тернарный оператор стоит использовать в случае, когда выражение помещается в одну строку, иначе – if. В примере же сильно страдает читабельность.

  6. Хорошие доводы.
    Ну еще можно привести в пользу if-a такой аргумент: он работает быстрее примерно на 50%. Разумеется, в js. В компилируемых языках, скорее всего, и то, и то, преобразуется в условную конструкцию.

    Но мне все равно чем-то нравятся тернарные операторы. Ну и кроме того, они короче при записи и лучше сжимаются всякими компрессорами – что во всяких граничных случаях, вроде букмарклетов, может пригодиться.

  7. Приведенный пример очень трудно воспринимать. Даже отступы тут не помогают. Это еще хорошо что методы всего в 2-3 строки. Иначе «:» просто не найти. Согласен с ptzn, его можно использовать только если выражение в одну строку.

Оставить комментарий

Последние твиты