Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверки перед присваиванием (https://javascript.ru/forum/misc/28343-proverki-pered-prisvaivaniem.html)

melky 16.05.2012 11:38

Цитата:

Сообщение от bes (Сообщение 174727)
Я привёл пример выше.
Я хочу делать так как в этом примере, то есть переприсваивать значения переменным без проверки существуют они там уже или нет, и не ловить по этому поводу себя на мысли "а не пишу ли я говнокод", вот я и выясняю, говнокод это или нет.

говнокод - понятие субъективное. для меня оное - это изобретение велосипедов, когда существует нативный способ решить задачу. ( например проверять, соответствует ли регвыр строке с помощью String.match )

а так ... пиши как хочешь, и не задумывайся, никогда. потом, как всё будет функционировать, будешь сидеть и исправлять, повышать читаемость. обычно это так делается :)

DreamTheater 16.05.2012 11:40

Цитата:

Сообщение от melky (Сообщение 174715)
я неправильно понял :) что плохого в "значениях по умолчанию" ?

А если значение по-умолчанию undefined или null?

bes 16.05.2012 11:53

Цитата:

Сообщение от melky
а так ... пиши как хочешь

Всё-таки попытаемся выяснить для чего этот приём так часто используется в программировании.

melky 16.05.2012 12:26

Цитата:

Сообщение от DreamTheater (Сообщение 174734)
А если значение по-умолчанию undefined или null?

я в таких случаях не пишу так :) вообще,я уже давно так не делаю. непереданные переменные просто меняют работу кода, они не получают значения.

Цитата:

Сообщение от bes (Сообщение 174737)
Всё-таки попытаемся выяснить для чего этот приём так часто используется в программировании.

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

пример:

var dump = function(variable, useAlert){ 
  if(useAlert){ 
    alert(variable);
  } else {
    console.log(variable);
  }
};

ещё пример - функция ожидает объект в качестве аргумента. если вызвать её без ничего, то будет ошибка при попытке обращения к info, как к объекту.
var ajax = function(info){
  info = info || {};

  makeReq(  info.url  );
};

сюда же относится обычная строчка в обработчике клика
var handler = function(e){
  e = e || window.event;
  // ....
}


ещё пример - используется в GCC при сжатии - выполнится выражение справа, если выражение слева вернёт false
var foo = function(){ alert("Foo called!"); };

var bar = function(dontCallFoo){
  dontCallFoo || foo();
};

bar("я уже не falsy");

falsy значение :
var foo = function(){ alert("Foo called!"); };

var bar = function(dontCallFoo){
  dontCallFoo || foo();
};

bar(/* undefined */);

bes 16.05.2012 15:51

melky, в ваших примерах демонстрируется вынужденная необходимость проверок для обеспечения работоспособности и безошибочности кода (проверка на существование, выбор используемого объекта через ||), я же пытаюсь выяснить несколько другое.

Попытаюсь сформулировать на другом примере.
Например, есть функция, которая должна присваивать переменной n значение 2.
Обычно её реализуют так.

function f() {
  if (n != 2) n = 2;
}


То есть вставляют проверку и не присваивают переменной n значение 2, если оно там уже хранится, хотя можно было сделать так:

function f() {
  n = 2;
}

То есть присвоить переменной n значение 2 в любом случае (переприсвоить в случае, если там итак было уже значение 2).

А так как обычно используют первый способ, отсюда и вопрос: в чём смысл выполнения таких проверок (стиль, производительность или что-то другое).

nerv_ 16.05.2012 16:16

Цитата:

Сообщение от bes
А так как обычно используют первый способ, отсюда и вопрос: в чём смысл выполнения таких проверок (стиль, производительность или что-то другое).

по примеру - ни в чем. Думаю, данный вопрос следовало задавать в рамках контекста (определенного кода)

bes 16.05.2012 17:10

Цитата:

Сообщение от nerv_
по примеру - ни в чем

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

Например,
<div id="myDiv"></div>

<script>
function setColor(value) {
 if (myDiv.style.color != value) 
    myDiv.style.color = value;
}
</script>


Цитата:

Сообщение от nerv_
Думаю, данный вопрос следовало задавать в рамках контекста (определенного кода)

Какой тут может быть контекст, факт - используют (привёл пример - в set-методах), зачем используют - пока не понятно.

nerv_ 16.05.2012 17:52

Цитата:

Сообщение от bes
У меня складывается подобное мнение, но данные проверки в программировании почему-то всегда используют, например, в set-методах.

тут вопрос иначе стоит: дрюкать дум лишний раз или нет? Лучше нет)

bes 16.05.2012 18:38

Цитата:

Сообщение от nerv_
тут вопрос иначе стоит: дрюкать дум лишний раз или нет? Лучше нет)

Проверка-то его тоже дрюкнет, поэтому вопрос остаётся.

bes 17.05.2012 09:23

Может быть у кого-нибудь есть ещё какие-нибудь предположения по этой теме??


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