1. JavaScript / Говнокод #22352

    −15

    1. 1
    var isValue = workTime && workTime.data && workTime.data[dayOfWeek] && workTime.data[dayOfWeek][workOrBreak] && (workTime.data[dayOfWeek][workOrBreak][startOrEnd] || workTime.data[dayOfWeek][workOrBreak][startOrEnd] === 0);

    is value or not? that is the question

    Запостил: apostolovd, 17 Февраля 2017

    Комментарии (5) RSS

    • Интересно, можно ли в JS каким-то образом вернуть для несуществующего свойства не undefined, а Object с такой же функциональностью (т.е. умеющий возвращать не undefined для несуществующего свойства)? За такое могут и памятник поставить. Я так понимаю, это что-то вроде Maybe.
      Ответить
      • var MaybeObject = function() {
        	return new Proxy(this, {
        		get: function(target, name) {
        			if (name in target) {
        				return target[name];
        			}
        
        			return new MaybeObject();
        		}
        	});
        }


        Нет, херня. Да, можно вызывать по цепочке что угодно и как угодно, но результат придётся проверять на то, не Proxy ли это. Ну и пирфоманс же.
        Ответить
        • Сделать доступ ко всем свойствам только через методы .get(key) и .set(key, value), и нехрен руками своими грязными лазить, где не надо.
          Ответить
          • У получим такие простыни, как в Java.
            Ответить
            • Не знаю как там в Java, но это уж точно лучше, чем исходный говнокод.

              const val = workTime.get(`data.${dayOfWeek}.${workOrBreak}.${startOrEnd}`)
              var isValue = val || val === 0
              Ответить

    Добавить комментарий