Pull to refresh

Блоки в JavaScript

Reading time2 min
Views14K
Привет, Хабрачитатель!

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

Суть мысли, или даже вопроса — почему никто (встречавшийся мне) не использует отдельные блоки кода (помимо тех, которые используются с выражениями if else и т.д.) в своих JavaScript приложениях?

Как создать блок кода в JavaScript?


Легко! {} в начале выражения считается блоком (а не объектом). Например:
{
    console.log('Hello from a block');
}

Чем может быть полезен блок?


В JavaScript блоки кода не создают свою область видимости (скоуп), поэтому будем искать полезность в чем-то другом.
Самое элементарное применение — разделение логических частей кода. Да еще какое! Блок можно использовать с меткой.
MyBlock: {
    console.log('This is MyBlock');
}

Толку с нее в данной ситуации мало. С таким успехом можно заменить метку на комментарий, но ведь как красиво смотрится.
Но остается проблема в ограниченности метки.

Опытный и не очень программист может сказать — все логичные блоки / части кода лучше выносить в отдельные функции. Но попробую сразу же не согласиться. Давайте рассмотрим пример из жизни?
Допустим, есть у меня Backbone приложение. При инициализации каждой view я должен совершать стандартные действия: подписываться на глобальные события, подписываться на изменения модели или коллекции и т.д.
Backbone.View.extend({
    initialize: function () {
        this.model.on('change', this.render);
        this.model.on('add', this.onAdd);
        this.model.on('change:type', this.onResetType);
        app.subscribe('reload', this.render, this);
        app.subscribe('remove', this.remove, this);
        app.subscribe('vodka', this.drink, this);
    }
});

Почему-то я не хочу выносить это в отдельные функции. Я привык, что в методе initialize я могу увидеть сразу подписку на все нужные события.
Так почему же мне не разделить эту массу кода на отдельные логические блоки кода в рамках одного метода и скоупа?
Backbone.View.extend({
    initialize: function () {
        ModelEvents: {
            this.model.on('change', this.render);
            this.model.on('add', this.onAdd);
            this.model.on('change:type', this.onResetType);
        }
        AppEvents: {
            app.subscribe('reload', this.render, this);
            app.subscribe('remove', this.remove, this);
            app.subscribe('vodka', this.drink, this);
        }
    }
});


Недостатки


Даже не знаю, какие могут быть недостатки у такого способа разделения кода. Быть может, есть вероятность того, что можно запутаться — перепутать блок кода с объектом. Но у меня такой наклонности не возникает.

Вывод: использовать такие блоки — дело выбора каждого. Комментарии, блоки — кому как нравится. Но хотелось бы все же найти интересное применение таким блокам.

Всем спасибо за внимание.
Tags:
Hubs:
-4
Comments10

Articles