Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Оператор запятая. Не возбраняется? (https://javascript.ru/forum/offtopic/43363-operator-zapyataya-ne-vozbranyaetsya.html)

danik.js 03.12.2013 03:05

Оператор запятая. Не возбраняется?
 
Короче, можно так писать?
this.getElement = function() {
    return this.$element || (this.$init(), this.$element);
};


Этот же код в традиционном стиле:
this.getElement = function() {
    if (!this.$element)
        this.$init();
    return this.$element;
};


Какой вариант лучше и нет ли проблем с запятой (где-то видел запятую как хак для установки scope чтоли (для eval'а в каком-то браузере) - так и не допер что делает эта запятая)?

danik.js 03.12.2013 03:16

И еще такой вариант:

function Bla() {
    this.getElement = function() {
        this.$init();
        delete this.getElement;
        return this.getElement();
    };
}

(function(){

this.$init = function() {
    this.$element = document.createElement("div");
};

this.getElement = function() {
    return this.$element;
};

}).call(Bla.prototype);


Насколько он оправдан?

Gozar 03.12.2013 03:25

Если сжимать код, могут быть проблемы. По крайней мере в 1 и 2 случае.

Maxmaxmaximus3 03.12.2013 03:36

и вообще это ужасный стиль и не очевидный, никогда так не делай

Gozar, кот, как тебе мой новый FRP стайл?
Все что объявлено без var попадает в $scope. Все что приравнивается в скобочках воспринимается как ячейка. Круто?


danik.js 03.12.2013 03:51

Цитата:

Сообщение от Maxmaxmaximus3
и вообще это ужасный стиль и не очевидный, никогда так не делай

А помоему прикольный. Там все в одну строчку, причем довольно короткую. Знак || воспринимается прекрасно, скобочки небольшие, последний элемент взглядом улавливается сразу.

Мне нравится. Неуж-то так плохо?

Третий вариант нигде не встречал. Но помоему логичный, но смотрится жутко, особенно delete.

Maxmaxmaximus3, убейся, пожалуйста.

Maxmaxmaximus3 03.12.2013 05:04

Цитата:

Сообщение от danik.js
Maxmaxmaximus3, убейся, пожалуйста.

В смысле?

monolithed 03.12.2013 13:09

Цитата:

Сообщение от danik.js
return this.$element || (this.$init(), this.$element);

Цитата:

Сообщение от danik.js
Короче, можно так писать?

alert(function() {
    return 0 || ('a', 'b');
}());

alert(function() {
    return 1 || ('a', 'b');
}());


Очевидно что нет.

Цитата:

Сообщение от danik.js
Какой вариант лучше

this.$element || this.$init()

ksa 03.12.2013 13:18

Цитата:

Сообщение от danik.js
можно так писать?

Писать-то можно по-разному... :) Главное чтобы другим потом понятно было.
тут же ведь используют вот это

alert((1,2,3,4,5));

Вопрос только в целесообразности этого... ;)

Цитата:

Сообщение от danik.js
нет ли проблем с запятой

Сама запятая тут не подведет... :no:

nerv_ 03.12.2013 13:19

Цитата:

Сообщение от danik.js
Короче, можно так писать?

если хочешь себя запутать, то пиши :)

function bar() {console.log('foo'); return 'foo';}
function foo() {console.log('bar'); return 'bar';}

var x = (bar(), foo());

alert(x);

ksa 03.12.2013 13:21

Цитата:

Сообщение от danik.js
так и не допер что делает эта запятая

Такой "набор" просто вернет последний элемент "перечня"...


Часовой пояс GMT +3, время: 13:17.