| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Плавная смена картинок управляемая кнопками |
| Автор: Ghirik 21.9.2007, 01:14 | ||
Собственно, http://www.door-to.ru/LamerPhotoBlog/scripts/slide_click.htm только что из печки.... Кэширования картинок нет, потому в IE дергается.
|
| Автор: dstorm81 21.9.2007, 08:55 |
| Кэширования картинок нет, потому в IE дергается. все дружно должны порадоваться? я рад ;-) |
| Автор: dsCode 21.9.2007, 10:58 |
| Ghirik, хороший скрипт =) думаю, пригодится в качестве примера, особенно новичками (только, если будете оформлять в виде примера/урока, - было бы хорошо написать все по стандартам, включая отступы и т.д., а так же имена переменных (осознанные, а не "a", "c", "r", намного удобней было бы "changeTime" вместо "t") и функций. Стандартизованный код и читать понятней (и приятней)). И можно в урок выкладывать =) |
| Автор: Ghirik 21.9.2007, 12:06 | ||||
Просто сделать просили в соседней теме, под определенную задачу, для той задачи не нужно було кэшировать.
dsCode, если не затруднит, переформатируйте пожалуйста по правилам, а то я не особо их знаю. А для законченности скрипта, чуть позже, добавлю кэширование. |
| Автор: dsCode 21.9.2007, 13:07 | ||
Ghirik, что-то вроде этого:
Основные правила: 1. Всегда ставьте точку с запятой (пусть для js это не обязательно, но если Вы ее ставите - это признак хорошего тона). 2. Правильные отступы (во многих языках принято делать 2 или 4 отступа. В JavaScript, я, например, привык ставить 2 (исходя из кода больших фрейморков, да даже, если посмотреть js-фалы мозилы - там тоже 2 отступа. Хотя многие ставят 4 - это тоже правильно)). Кстати, есть такой замечательный язык как python, так вот там - отступы - это принудительное (и правильно!) правило. Если Вы ошибетесь с количеством отступов в строке - компилятор выдаст ошибку. Да и еще - никаких табов - все табы должны быть преобразованы в пробелы (потому что в Вашем редакторе табуляция может быть 2 символа, а в чьем-нибудь другом - 4 - и получится бредятина). 3. if ... else.. конструкции пишутся именно так, как в примере выше. 4. после знака припинания и разделителей всегда ставится пробел (for (var i = 0; i < 10; i++) а не for(var i=0;i<10;i++)). 5. Открывающая скобка блока или функции "{" может быть либо в той же строке, либо в новой. Это дело привычки (я привык всегда ставить в той же). Кстати, когда скобка ставится в новой строке - это "Классический способ", а если в той же - "Единственно верный" (название Денниса Ричи, одного из создателей языка Си). 6. имена переменных и функций начинаются с маленькой буквы, слова разделяются заглавными буквами: т.e. так myVar, myFunction(), а не my_var, my_function 7. Константы всегда пишутся большими буквами и разделяются подчеркиванием: MAX_VALUES, MIN_RANGE и т.д. 8. Внутри циклов нужно объявлять локальные переменные (они уничтожаться по выходу из блока), т.е. for (var c = 0...), а не for (c=0)... Ну и т.д. Поищите нотации и документации по оформлению кода. Потому что неправильно оформленный код (даже, если Вы достигли уже больших успехов), всегда будет выдавать непрофессионала. |
| Автор: dsCode 21.9.2007, 16:18 |
| AKS, насчет переменной "а" - не заметил =) Ну это ерунда. А что такое тройное удивление? Вообще (не касаемо конкретно JavaScript'a) - да, так оно и есть. Жизнь переменной определена ее блоком. С JavaScript'ом - да, ступил, переменная видна после цикла. Но в любом случае, если дело происходит в контексте функции, то использование в цикле var не "засорит" window по выходу из функции. |
| Автор: AKS 21.9.2007, 16:34 | ||||
dsCode,
Просто подумал: "Неделю назад Ziroglif очень подробно рассказывал о жизни переменных"... Ghirik, вот так:
возникает ошибка, если a становится < 0 или >= a_i.length... |
| Автор: dsCode 21.9.2007, 16:54 | ||
AKS,
ладно, к словам не будем придираться, я говорил об оформлении кода в целом - это не только JavaScript'a касается =) Вот и упомянул, что локальная переменная уничтожится после выхода из блока (во всяком случае, в Си так). Да и в JavaScript так =) только вот цикл для нее - не "жизненный блок" получается, переменная объявляется в контексте функции и принадлежит функции (Variable Object функции, если точнее, но это не суть уже) =) |
| Автор: Ghirik 21.9.2007, 17:48 | ||
| Всем большое спасибо! Стало все понятно по форматированию. Впреть, обещаю выкладывать только нормально форматированный код. На самом деле мне не нравится растягивать код по вертикали, читаемость лучше, но анализировать работу кода неудобно. Приходится постоянно крутить колесо мышки, туда-сюда. Но попробую... Может и привыкну.
это я так... вообще, не думая.... |
| Автор: Zeroglif 21.9.2007, 18:45 |
Это хорошо. Вот http://forum.vingrad.ru/index.php?showtopic=120066&view=findpost&p=953781 были собраны ссылки "про стиль" по результатам небольшого http://forum.dklab.ru/other/all/RekomendatsiiISoobrageniyaOStileProgrammirovaniya.html на http://forum.dklab.ru/?c=10. |
| Автор: cruelangel 21.9.2007, 20:53 | ||||||
| >Всегда ставьте точку с запятой (пусть для js это не обязательно, но если Вы ее ставите - это признак хорошего тона). ничего подобного. точкусзапятой лучше по возможности не ставить. приведу пример:
теперь мы можем добавить ещё один фильтр просто приписав его в конце..
если же нам придётся закомментить один из фильтров - достаточно просто его закомментить:
точкисзяпятой же превращают редактирование в каторгу. >в Вашем редакторе табуляция может быть 2 символа, а в чьем-нибудь другом - 4 - и получится бредятина в случае отступов - ничего подобного. бредятина получается только в случае выравнивания участков строк табами. >после знака припинания и разделителей всегда ставится пробел (for (var i = 0; i < 10; i++) а не for(var i=0;i<10;i++)). такой вариант смотрится ещё лучше: for( var i= 0; i < 10; ++i ) >локальная переменная уничтожится после выхода из блока (во всяком случае, в Си так касательно конструкции for( int i=0; i < limit; ++i ) - будет ли i являться локальной для цикла, а не для функции - зависит от компилятора. |
| Автор: dsCode 21.9.2007, 21:31 | ||||||||
| cruelangel, в данном случае основная речь о правильности оформления (правильность в этическом плане, поскольку точка с запятой - не обязательна). Ради Бога, комментируйте, только хорошо бы (в конце!) поставить точку с запятой:
P.S. [1]: покажите мне хотя бы 50 человек, которые отрицают точку с запятой. Я покажу Вам 100, которые говорят о точке с запятой - почти как об обязательной сущности в javascript (опять же из этических соображений). Вообще, мои утверждения основываются на programming style guide'ах. Придерживаться или нет - Ваше дело.
на своей практике видел код, который редактировался в терминале в линухе - там смешались табы и пробелы - в EmEditor'e (редактор такой типа блокнота - кстати, хороший, им пользуюсь) потом сплошная каша получилась. P.S. [2]: опять же - любой style guide порекомендует включить функцию "Преобразовывать табы в пробелы" в Вашем редакторе.
уф = ) устал ссылаться на style guide, но еще чуть-чуть =)) - после for - нужен пробел, после var i - нужен пробел.
не спорю, возможно и так (но в большинстве, которые я видел - переменная i - "исчезнет" после выхода из цикла). Приведите пример компилятора, о котором Вы говорите. |
| Автор: Ghirik 21.9.2007, 21:43 |
| Сейчас занялся доработкой этого скриптика, блин(!) не узнаю свой код Действительно, так отформатированный код приятно читать. Осталось только привыкнуть так форматировать самому... Я экономил буковы, чтобы текст получался меньше размером, интерпритатор всё же. А если использовать последующее сжатие, то усе путем. |
| Автор: cruelangel 21.9.2007, 22:02 |
| > Ради Бога, комментируйте, только хорошо бы (в конце!) поставить точку с запятой: а при перекомментировании - не забыть перенести точкусзяпятой в нужное место... >Вообще, мои утверждения основываются на programming style guide'ах. я уже устал убеждать людей думать своей головой... >уф = ) устал ссылаться на style guide, но еще чуть-чуть =)) - после for - нужен пробел, после var i - нужен пробел. а обосновать сможешь, почему он там нужен? >не спорю, возможно и так (но в большинстве, которые я видел - переменная i - "исчезнет" после выхода из цикла). Приведите пример компилятора, о котором Вы говорите. msvc, емнип Добавлено через 43 секунды Ghirik, не экономь на спичках |
| Автор: dsCode 21.9.2007, 23:35 |
| cruelangel, я бы воздержался от подобных заявлений (если это в мой адрес). Я не знаю, кого Вы там устали убеждать (может не с теми общаетесь? =)) конечно. - даже, хотя бы, по правилам грамматики =) к тому же - так, действительно, пишется (нравится Вам или нет, но по "правилам" - так пишется). По мне так - пишите хоть в одну строчку. "Правила" - в кавычках, потому что компилятору/интерпретатору по-барабану, собственно, как и Вам, я смотрю, однако, в и w3c и netscape'e и в borland'e и в microsoft и в sun и (т.д.) таки не лохи сидят тоже, чтобы придумывать "никому не нужные стайл-гайды", чтобы "гуру" вроде Вас просвещали людей и убеждали людей думать своей головой =). |
| Автор: Zeroglif 21.9.2007, 23:35 | ||
Чтобы её смело не ставить, нужно точно знать правила, когда это можно делать, а эти т.н. правила жутко описаны, сложная не до конца прописанная логика, и бьюсь об заклад, что вы не только не сможете обобщить правила ECMAScript 7.9 сходу прямо сейчас, но и не сделаете этого через неделю. Просто попробуйте. Если программист не понимает, как именно работает механизм automatic semicolon insertion (AIS), как он за ним по сути правит код (не зря это называли в старых доках compile-time error-correction, это именно исправление ошибок), то он рискует почём зря. B.Eich внедрил AIS спе-ци-аль-но, чтобы javascript щадил ошибающихся новичков и непрофессионалов, прощая им лысый код, вот пусть они друг другу такой всепрощающий стиль и советуют. Всем остальным точку с запятой нужно ставить обязательно, у такого подхода масса плюсов и чисто субъективные мизерные минусы, http://forum.dklab.ru/js/other/TochkaSZapyatoyVJavascript.html, не стану сильно повторяться... Чтобы помочь программистам любого уровня подготовки прочитать и разобрать написанное. Элементарно. Чем больше личного кривоколенного в коде, чем больше в нём игнора к привычным conventions с многолетней историей, тем сложнее глазам. И лезут мысли: "зачем это он в этом месте так завернул? - а чего это тут у него то так, то эдак? - отчего это он слепил всё в кучу? - что он этим хочет сказать-то? Вот и гадай потом, то ли это nOOb недоученный, то ли космический кодер, работающий в одиночку последние 70 земных лет... Это точно, иногда руки опускаются. p.s. Кстати, вот вам свежий пример отрицания глупых conventions - для цитирования на винграде есть соответствующая кнопка, ну, или можно руками прописать bbcodes... однако человек с головой всегда может на это не обращать внимание, не ему же читать. |
| Автор: Ghirik 21.9.2007, 23:53 |
| Приятно послушать умных людей.... |
| Автор: AKS 22.9.2007, 06:34 |
| cruelangel, все же когда речь идет об общепризнанных стандартах (именно к ним и обратил изначально наши взоры dsCode), чье-либо "имхо", идущее вразрез, звучит невнятно и малоубедительно. Безусловно, всегда и всем полезно узнать еще одно личное мнение, но в подобных случаях оно должно быть высказано в более мягкой манере. И только тогда беседа будет протекать в нужном русле. В противном случае разговор может уйти вообще в другую сторону. Просто представьте, что ваша привычка редактировать код, при которой точка с запятой Вам мешает, у кого-нибудь вызовет смех, и он об этом тут же напишет. Или ваше мнение о том, что такая запись for( var i= 0; i < 10; ++i ) смотрится лучше, вызовет еще какую-либо бурную реакцию, о которой Вам тут же сообщат. Во что это все превратится? Нет уж, давайте так. Стандарты и те, кто соизволил нам о них рассказать какие-то подробности - "впереди, на лихом коне". Мы же с Вами, со своими "имхо", скромненько "семеним поодаль", выбирая вместо "а обосновать..., не экономь на спичках..., думать своей головой..." какие-нибудь другие подходящие, но деликатные фразы. |
| Автор: cruelangel 22.9.2007, 09:06 |
| >> я уже устал убеждать людей думать своей головой... > я бы воздержался от подобных заявлений (если это в мой адрес). я себя тоже не люблю критиковать > Чтобы её смело не ставить, нужно точно знать правила, когда это можно делать, а эти т.н. правила жутко описаны, сложная не до конца прописанная логика ничего там сложного нет, просто примеров много... там всего 3 правила: 1. если если после конструкции А идёт конструкция Б, которой по правилам не может идти после А, то между ними вставляется семиколон (если они разделены переводом строки, либо Б - это фигурная скобка) 2. в конце файла вставляем ; если её нет 3. частный случай первого правила 4. семиколон не вставляется автоматом там, где допускаются пустые выражения. например - внутри заголовка for что тут сложного? вполне логичные, а главное _удобные_ правила. > B.Eich внедрил AIS спе-ци-аль-но, чтобы javascript щадил ошибающихся новичков и непрофессионалов, прощая им лысый код "For _convenience_, however, such semicolons may be omitted from the source text in certain situations." один из примеров этого удобства я описал выше. я, кстати, ни в коем случае не предлагал опускать семиколон после однострочных выражений, если кто вдруг так подумал. > зачем это он в этом месте так завернул? - а чего это тут у него то так, то эдак? - отчего это он слепил всё в кучу? - что он этим хочет сказать-то? Вот и гадай потом, то ли это nOOb недоученный, то ли космический кодер 1. я ни в коем случае не за раздолбайство, не надо проецировать на меня свои фобии 2. какая разница нуб автор или космокодер? > Кстати, вот вам свежий пример отрицания глупых conventions - для цитирования на винграде есть соответствующая кнопка, ну, или можно руками прописать bbcodes я текст набираю руками в соседнем окне. упомянутые кнопки с формой быстрого ответа находятся где-то внизу страницы, а мотать страницу туда-сюда - весьма сомнительный конвеншн. руками набирать ббкоды - повеситься можно. лучше бы авторы движка вместо кривого аякса реализовали "удобный быстрый ответ" с визивигом или текстовой разметокой. >>> после for - нужен пробел, после var i - нужен пробел. >> а обосновать сможешь, почему он там нужен? > даже, хотя бы, по правилам грамматики > Чтобы помочь программистам любого уровня подготовки прочитать и разобрать написанное. нет, пробелы там нужны, чтобы визуально отделять самостоятельные части выражения. при этом нет особого смысла отделять for от круглой скобки - причина та же, что и для вызова функции - подчёркивается зависимость от параметров. оператор присванивания лучше писать без пробелов слева, дабы подчеркнуть, что происходит именно присваивание, а не сравнение, и то, что находящееся слева выражение должно быть ссылкой на переменную, а не что попало, как в случае с правым. |
| Автор: dsCode 22.9.2007, 11:38 | ||
cruelangel,
я вот думаю, откуда из Вас прут такие утвердительные фразы? Как не крути - это всего лишь какие-то Ваши прихоти и, действительно, малообоснованные амбиции, которые выдаются в утвердительной форме за истину. Вот как это вообще так бывает, объясните мне? Дело даже не в convention'aх, дело в том, что по моему мнению Вы возомнили здесь некто большего о себе, кем являетесь, утверждая (я опять повторяю - утверждая и выдавая за истину (!), а не предлагая (!)) что мы тут "ограниченные стайл-гайдами и конвеншнами люди, которых надо учить думать своей головой", а Вы - "гуру-бунтарь, который познал истину и сейчас всех научит" =))) Вот боюсь огорчить - хрен =) Видал я таких людей - большинство из них были жуткими дилетантами в своем деле. Если Вы не понимаете (или не знаете) зачем нужны те или иные вещи, то это не значит еще, что они плохие. P.S.: "Безумец говорит, что люди его не знают, мудрец говорит, что он не знает людей" (С) кто-то там.. |
| Автор: cruelangel 22.9.2007, 12:23 |
| и в какой же форме мне надлежит приводить свои аргументы? в вопросительной? или же вообще, как ты, не приводить ни одного, а целиком сконцентрироваться на окунании оппонента в грязь? |
| Автор: SelenIT 22.9.2007, 12:29 |
Сорри за небольшой cruelangel, про кнопку для цитирования: она находится над каждым сообщением справа. Работает так: выделяете фрагмент сообщения, кликаете "быстрая цитата" для этого сообщения - и в форме быстрого ответа внизу страницы у Вас готовый BB-код для красиво отформатированной и подписанной цитаты, даже со ссылкой на первоисточник;). Можете копировать его хоть в другое окно, хоть куда... |
| Автор: cruelangel 22.9.2007, 12:34 |
| спасибо, конечно, но я всё это прекрасно знаю. это удобно только при ответе на одну единственную реплику. при ответе на несколько - приходится туда-сюда мотать страницу. |
| Автор: SelenIT 22.9.2007, 12:43 |
| Чтоб скопировать реплики для отквочивания в стиле ">>>", ее все равно приходится мотать... где же выигрыш? Или я совсем чего-то очевидного не понимаю... |
| Автор: dsCode 22.9.2007, 12:45 | ||
в "предлагательной" (название-то какое =)). Причем, с пометкой, aka "я вот знаю, что надо так и так, но у меня есть идеи получше". Вот потом посмотрите, что скажут о Ваших "получше". Максимум что скажут - пишите, Ваше дело, но в профессиональном почерке подобное недопустимо. Другой способ - найдите хотя бы несколько тысяч соратников, сделайте новый стиль и напишите свой гайд. Если он будет удобный, хороший и непротиворечивый - я приму его.
во-первых: я к Вам на Вы, б*я. во-вторых: если ты привык окунать людей в грязь (причем аргументируя дешевым навязыванием своих привычек в неправильном коде), то это не значит, что и другие действуют так же. во-третьих: я привел немало аргументов. в-четвертых: разговор окончен. |
| Автор: cruelangel 22.9.2007, 12:58 | ||||
| SelenIT, я ничего не мотаю - я просто не пользуюсь быстрым ответом при написании ответа dsCode, упование на дяденек, которые за тебя всё решили, не есть аргумент. ты почитай мозилловский стайл-гайд - это просто ужос какой-то
|
| Автор: Zeroglif 22.9.2007, 15:04 | ||||||||
Я ж говорю, не сможете обобщить и не обобщили. Правила вами приведены/сокращены очень уж неточно, во-вторых, даже если бы вы запостили этот пункт ECMAScript целиком (в оригинале), то сразу встал бы вопрос, кто есть "offending token" и что это за "certain situations" с этими токенами? Ньюб совершенно не в состоянии держать в голове список из энного количества конструкций, обслуживаемых ASI (automatic semicolon insertion), а более опытный программист просто не нуждается в такой картине, дисциплинированно отбивая точку с запятой там, где в соответствии со стандартом что-то "must be terminated with semicolons".
Здесь важно понимать, кого держал в уме автор языка, предлагая нам сие удобство: <...> my intention was to appeal to novice programmers and even stone-cold beginners. I wanted syntax that was not so terse and punctuator-prone <...> I could not use a natural-language syntax a la HyperTalk because management here argued convincingly that JS must look like Java. So I scaled back ease-of-use to the automatic semicolon insertion algorithms<...> /B.Eich в ньюсах/ Призыв "За Раздолбайство! - это, цитирую: "ничего подобного. точку с запятой лучше по возможности не ставить." Первого ещё можно вернуть в социум, второй - упрётся рогом, поотрицает солнце... и снова улетит к себе.
Если оставить пробел, то это станет сравнением или станет похожим на сравнение?
А разве должно? Не должно, ну, вычислится между делом Reference type, но это и так ясно из оператора, отсутствие пробела ничего не подчёркивает вообще. |
| Автор: cruelangel 22.9.2007, 18:20 | ||
| > Правила вами приведены/сокращены очень уж неточно где я конкретно ошибся? > Здесь важно понимать, кого держал в уме автор языка, предлагая нам сие удобство в приведённой цитате авто сожалеет, что не может сделать синтаксис а-ля HyperTalk (то есть без лишних знаков препинаний), потому как начальство требует синтаксис похожий на яву, и отмечает, что придумал простое решение позволяющее в некоторых случаях опускать семиколоны. если бы не начальство со своей явой яваскрипт мог бы выглядеть так:
> Призыв "За Раздолбайство! - это, цитирую: "ничего подобного. точку с запятой лучше по возможности не ставить." я разве уже расшифровывал словосочетание "по возможности"? >Если оставить пробел, то это станет сравнением или станет похожим на сравнение? >А разве должно? Не должно, ну, вычислится между делом Reference type, но это и так ясно из оператора, отсутствие пробела ничего не подчёркивает вообще. ( a == b ) - симметричен относительно равенства, операнды равноправны, происходит сравнение a с b или b с a - не важно ( a= b ) - ассиметричен относительно равенства, операнды неравноправны, происходит присваивание первому операнду значения второго (указатель на переменную как бы открывает слот на запись идущего далее потока данных ) |
| Автор: Ghirik 22.9.2007, 18:57 |
| cruelangel, почему у Вас настолько пренебрежительное отноше к собравшимся на этом форуме? Я понимаю, если Вы не знаете, как цитировать сообщения, но Вы принципиально наплевали на всех присутствующих и не выделяете цитаты. Лишь бы Вам было удобно... Вы в жизни так всегда поступаете? |
| Автор: cruelangel 22.9.2007, 19:15 |
| я выделяю цитаты вполне стандартным способом - угловой скобкой. в правилах я не заметил указания использовать исключительно бб-синтаксис. плохо смотрел? |
| Автор: Zeroglif 22.9.2007, 21:07 | ||
Надо в левую руку взять свой текст, а в правую текст ES... и неточности откроются. Так быстрее, чем я буду переписывать написанное.
А я так понял, да? Наглядность - вещь субъективная, а вот противоречия надо знать, отсюда попробую повторить вопрос: что такое "offending token" конкретно? А заодно: есть ли баги, связанные непосредственно с реализацией ASI в движках? LOL. То есть ты предлагаешь, удавливая пробел слева, бороться против ужасного наследия Fortran-a? Все на борьбу со знаком равно, который, чёрт побери, никакой не знак равно! Что ж, тоже подход, может, кого и увлечёшь... |
| Автор: cruelangel 23.9.2007, 11:47 |
| > что такое "offending token" конкретно? в тексте он встречается 4 раза, при этом первое вхождение - его определение, отражённое мною в первом правиле. в общем, могу констатировать факт чтения тобой стандарта по диагонали. > Все на борьбу со знаком равно, который, чёрт побери, никакой не знак равно! кстати, да. паскалевский := мне импонирует гораздо больше. там принципиально отсутствует ошибка "написал присваивание место сравнения". в си-подобных языках приходится рулить пробелами, ставить константы первым операндом при сравнении и всё равно это не даёт гарантий... > есть ли баги, связанные непосредственно с реализацией ASI в движках? мне о таковых не известно. |
| Автор: Zeroglif 23.9.2007, 12:54 |
Погоди констатировать, ты мне всё-таки ответь, что такое "offending token". Не в общем смысле... токен, который "is not allowed by any production of the grammar", а КОНКРЕТНО, как знаток стандарта ты же должен всё это знать досконально (а не искать по тексту вхождения фразы), что же и где конкретно не разрешено, ты же считаешь эти правила простыми, поясни. Иначе грош цена твоей позиции. А констатировать я и сам умею, на базе твоих здешних сомнительных обобщений и неказистых терминов любой другой тебя уже давно записал бы в касту js-ньюбов, но поскольку всякая публичная дискуссия самоценна, не имею ничего против того, что я читал стандарт один раз и по диагонали, а ты его большой знаток. Отсюда настойчивая просьба к специалисту - грамотно опиши/обобщи правила ASI (их нигде нет на русском, будешь первым), а самое главное - их растолкуй, в частности, как же нам бодаться с этим "offending token", как отличать от простого "token". p.s. Пока ты этого не сделаешь, мне сложно будет тебе довериться и... придётся повесить ярлычок... |
| Автор: cruelangel 23.9.2007, 13:34 |
| я уже обобщил эти правила на предыдущей странице, причём никаких "offending token" я не употреблял. если что-то не понятно - спрашивай. если нужны примеры - в стандарте их полно, причём с пояснениями. если увидел ошибку - скажи где и какую. ps: в сим стандарте я читал исключительно пункт 7.9, специально, чтобы была аргументация в этом споре. однако это не мешает мне писать программы на жабаскрипте, в том числе и с применением ASI и других фишек оного... |
| Автор: Zeroglif 23.9.2007, 14:16 | ||||||||
Непонятно. Спрашиваю...
- что такое "конструкция"? - как конкретизировать "по правилам не может идти"? - по каким признакам мне отличить "не может идти" от "может идти"? - фигурная скобка любая?
- какого файла? - где в оригинале "если её нет"?
- что это за частный случай? - есть ещё подвид "конструкций", которые "по правилам не могут идти"?
- в ECMAScript есть пустые выражения? - где в оригинале "там, где допускаются", где они вообще допускаются? - внутри for Statement есть empty Statement? Опиши, наконец, грамотно правила ASI. Опиши, наконец, грамотно, что есть "offending token". C позиции знатока ASI, которую ты отстаиваешь. |
| Автор: cruelangel 23.9.2007, 16:13 |
| > что такое "конструкция"? "Input elements other than white space and comments form the terminal symbols for the syntactic grammar for ECMAScript and are called ECMAScript tokens." > как конкретизировать "по правилам не может идти"? это значит, что нет грамматических правил это допускающих. > по каким признакам мне отличить "не может идти" от "может идти"? нужно знать грамматику либо банально попробовать и посмотреть что получится. > фигурная скобка любая? только закрывающая > какого файла он же входной яваскрипт поток, он же строка содержащая программу на языке яваскрипт. > где в оригинале "если её нет" "When, as the program is parsed from left to right, the end of the input stream of tokens is encountered and the parser is unable to parse the input token stream as a single complete ECMAScript Program, then a semicolon is automatically inserted at the end of the input stream." смысл тот же. > что это за частный случай? > есть ещё подвид "конструкций", которые "по правилам не могут идти"? по правилам параметр для таких операторов как return, break и тп не может быть отделён переводом строки. > в ECMAScript есть пустые выражения? в данном контексте разница между "выражениями" и "утверждениями" не существенна. > где в оригинале "там, где допускаются", где они вообще допускаются? "However, there is an additional overriding condition on the preceding rules: a semicolon is never inserted automatically if the semicolon would then be parsed as an empty statement or if that semicolon would become one of the two semicolons in the header of a for statement (section 12.6.3)." смысл тот же >внутри for Statement есть empty Statement? как я уже сказал - разница не существена. итого: ты у меня нашёл одну неточность - про фигурные скобки. поздравляю. остальное - борьба за терминологическую точность. если бы я занимался переводом спецификации, это было бы уместно. мой текст - не более чем вольная интерпретация. |
| Автор: Zeroglif 23.9.2007, 17:54 |
| Что и ожидалось. От ошибок и терминологической путаницы своими словами ты перешёл к плотному цитированию оригинала абзацами. Правильно, так безопаснее. Как и с точкой с запятой. |
| Автор: babe 25.9.2007, 14:03 | ||||
| Господа, извините, слегка отвлеку Вас хотелось бы спросить у гуру - не является ли более правильным написание: не
а
Заранее благодарна за аргументированный ответ |
| Автор: Ghirik 25.9.2007, 14:06 |
| У Гуру, наверное другое мнение, а по мне, дак хрен редьки не слаще... |
| Автор: dsCode 25.9.2007, 14:12 |
| babe, с технической точки зрения - без разницы - в обоих случаях "i" будет принадлежать контексту, где происходит действие (функция или глобально - window). С "психологической" - второй вариант более подходит для случая, если "i" будет использоваться в дальнейшем (за рамками цикла) (еще раз повторю - первый случай тоже для этого подходит, но во втором - явно (для себя) указывается, что с "i" будут происходить какие-то действия и дальше). Хотя, это всего лишь ИМХО-шная "психологическая" сторона. Вполне может быть, что человек просто захотел объявить все переменные вначале и дальше уже работать (а будь то переменная только для цикла или еще для чего - не важно уже). P.S.: Исходя из практики в других языках программирования (например, Си.. поправка - компиляторов для Си, с которыми я сталкивался, поскольку в этой теме высказывалась мысль, что не во всех "Си" так. Но, я склоняюсь, что в 90%) - первый вариант более правильный, т.к. переменная уничтожается сразу по выходу из цикла. Если он объявлена выше, то будет в памяти до выхода из блока, где объявлена. К JavaScript это не относится, но все же, я, например, и здесь приучил себя писать так (хотя, это в JavaScript (третий раз повторю =)) никак не повлияет на область видимости "i") =) |
| Автор: Ghirik 25.9.2007, 14:20 |
| dsCode, умеете же Вы всё разложить по полочкам... |
| Автор: babe 25.9.2007, 14:20 |
| спасибо за отклик я между прочим спрашиваю как раз с технической точки зрения: потому что если в цикле 10000 итераций разве не рентабельнее и идеологически правильнее было бы переменную объявить ОДИН раз (то есть ОДИН раз выделить под нее память), а не 10000 раз? |
| Автор: Ghirik 25.9.2007, 14:26 | ||
Она в любом случае объявляется один раз. А далее, в цикле не участвует. Если бы она объявлялась 10000 раз, то всегда имела бы одно и то же значение... |
| Автор: dsCode 25.9.2007, 14:33 | ||||
babe,
Она объявится один раз. Конструкция for выглядит так: for (блок_объявления_и_начальной_инициализации ; блок_условия_окончания_цикла ; блок_"изменения_параметров_условий" ) Как видите - переменная объявится один раз, потому что цикличен именно последний блок (на основе блока #2). В последнем блоке "изменения_параметров_условий" взято в кавычки, поскольку это "в классическом" стиле, на самом деле там может находится любая реализация. В принципе, любой из этих блоков - опциональный. Например, блок инициализации может быть пустым, если Вы воспользуетесь первым случаем:
P.S.: пока писал, Ghirik уже рассказал все =) |
| Автор: babe 25.9.2007, 14:45 |
| спасибо большое))) действительно) стало понятно почему один раз)) P.S. пожалуйста, не ссорьтесь друг с другом на столь замечательном ресурсе |
| Автор: Ghirik 25.9.2007, 15:31 | ||
Ага... Хулиганят.... Будь то корову делят... |