Давно хотел уже "выкрикнуть душою", а тут предоставился удобный случай. Итак курс лекций "Вселенское твердолобие. Методы борьбы.".

Заборы в коде.

Вот cтрочка кода из первого попавшегося поста:

setTimeout('setOpacity(\''+obj+'\', '+i+')',50*i);

Вот кто может объяснить наличие этих треклятых наклонных реек? Тут виноватого, мне кажется, не найти. Эти заборы встречаются практически в каждой бумажной(и не только) книжонке связанной с программированием. Смело желаю их авторам жидко обосраться… Запоминаем (а лучше записываем): в нашем распоряжении имеется два вида «кавычек» – (' и "), и властью данной мн ой не так во имя чита вы вольны их использовать в произвольном порядке.

setTimeout('setOpacity("'+obj+'", '+i+')',50*i);

Прежде чем нарисовать забор пойдите выпейте чаю. Если желание не прошло – налейте ещё…
Аналогичный же случай с pcre – развею миф о том, что ограничителями регулярного выражения могут быть только заборные рейки? Сравните:

$re = '/(\d{2})\/(\d{2})\/(\d{4})/';

и

$re = '~(\d{2})/(\d{2})/(\d{4})~';

P.S.

Раз уж я доколебался до несчастной строчки с таймаутом, завершу атаку на твердолобие контрольным ударом с обоих флангов.
Опять-таки луч кровавого поноса тому, кто научил вас передавать аргументом в setTimeout строку, тогда как по уму передать надо функцию.

setTimeout(function(){setOpacity(obj,i);},50*i);

И никогда более не пишите setTimeout("func()",100);, иначе у вас будут ломкими ногти, появиться перхоть и насмерть замучают кариозные монстры.

setTimeout(func,100);

P.P.S.
Я надеюсь NoNseNs не примет близко к сердцу данный опус и поймёт всё правильно. Спасибо за внимание.

Заборостроительный факультет
Tagged on:

12 thoughts on “Заборостроительный факультет

  • 25.01.2008 at 06:45
    Permalink

    Извольте, всегда рад услышать мнение о своем коде 🙂
    По поводу кавычек – я всегда стараюсь использовать одинарные кавычки, кроме случаев совсем сложных, когда приходится использовать \\’ двойную черту перед кавычкой, тогда уже я использую двойную. Просто чтобы не запутаться, такой у меня подход… врятли это может считаться не грамотным.

    А по поводу setTimeout – его аргумент передается именно как строка. Об этом написано в любом мануале. Попробуй в моем коде передать аргумент этой функции как другую функцию и получишь ошибку. Надеюсь, понос все же не посетит бедных авторов 🙂

  • 25.01.2008 at 11:50
    Permalink

    О кавычках: ты понимаешь что делаешь, и пишешь так как считаешь нужным… это похвально, неграмотным я это не считаю.
    Я считаю это элементарным неуважением к тому, кто будет читать твой код.Байта ради – не учите возводить ограды других.
    Ведь многие сопливые юнцы начинающие программисты даже не подозревают, что код можно не только писать, но и ЧИТАТЬ – для них эти заборы это единственный вариант написания кода, т.к. других примеров просто нет…

    А теперь о setTimeout (я надеюсь мы понимаем что речь не только о таймаутах, а о callback-ах в js вообще):

    Откроем MSDN

    Variant that specifies the function pointer or string that indicates the code to be executed when the specified interval has elapsed.

    Откроем MDC

    func is the function you want to execute after delay milliseconds.

    Только в msdn (а вовсе не в любом мануале) упомянуто, что может быть строка, но сначала написано – это указатель на функцию (зачем лишний раз делать eval и строить слешовые заборы?)…

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

  • 25.01.2008 at 16:21
    Permalink

    передают строку, т.к. не понимают что функция тоже объект 🙂

    Про RE:

    re = /(\d{2})\/(\d{2})\/(\d{4})/;

    Ты зачем там кавычки поставил??? убери сейчас же!!!
    просто кодом

    re = '~(\d{2})/(\d{2})/(\d{4})~';

    ты создаешь строку и методы доступные для RE уже работать не будут.

    Другой вопрос, что в языках типа Perl, Ruby (к JS это не относится там только слеши см. MDC) и т.п. RE не обязательно задавять в слешах, а можно использовать любой отделяющий символ (я использую #), либо спец. конструкции типа qr(), и тогда экранировать нужно уже этот отделяющий символ.

  • 25.01.2008 at 16:24
    Permalink

    PHP там я имел ввиду, а не JS, поэтому кавычки…

  • 25.01.2008 at 17:41
    Permalink

    ну что же посмотрим туда, куда нас носом тыкают…
    MSDN
    почти во всех примерах постоянно используется передача строки
    window.setTimeout(“fnHide2(” + oToHide.id + “)”, 3000);
    в определении функции сказано “Variant that specifies the function pointer or string that indicates the code to be executed when the specified interval has elapsed.” что значит “Функция или строка, задающая код, который будет выполнен по истечении времени интервала”
    Функция или СТРОКА, т.е. оба варианта абсолютно верны. При этом при передачи функции нельзя передавать аргументы в IE… попробуй сам, будет выдана ошибка.
    Так что будет правильнее, передать функцию без аргументов или нормальную строку с аргументами? И пофигу на eval если работает везде.

  • 25.01.2008 at 17:47
    Permalink

    ещё раз прошу – дайте мне пример, который по вашему разумению не будет работать в IE.

    А приведённая строка, должна выглядеть так:


    window.setTimeout(function(){ fnHide(oToHide.id);},3000)

    “и пофигу на…” – собственно об это я и пишу – хочется не мира на всей земле, а для начала порядка в отдельно взятом кусочке пространства (хоть и виртуального)…

  • 25.01.2008 at 18:14
    Permalink

    Такой вариант будет работать… однако вызывается лишняя анонимная функция.
    Хотя тут тоже свои плюсы – работает без eval.
    Это только доказывает, что есть множество способов сделать одно и тоже действие.
    А все писать под линейку думаю врят ли будут 🙂

  • 25.01.2008 at 18:31
    Permalink

    Да способов масса но мой кунг-фу сильнее.
    Был рад развеять ещё один миф. Вроде бы технически-грамотные все, а имеете туеву хучу суеверий, примет и гаданий на random…

  • 25.01.2008 at 18:33
    Permalink

    И Байт с ней, с анонимной функцией – насколько проще это писать и читать…

  • 31.01.2008 at 16:01
    Permalink

    Когда стоят три кавычки “‘ уже очень понятно две их там или три. А вот с заборами всё понятно 🙂

  • 31.01.2008 at 16:02
    Permalink

    Т.е. очень не понятно.
    К пред. посту 🙂

  • 31.01.2008 at 16:12
    Permalink

    Допускаю что у вас что-то очень не понятно.
    Видимо мне повезло с выбором шрифта в используемых редакторах…

Leave a Reply