Даже в определениях идиотизма встречается идиотизм.
Цитата:
Идиотизм — устаревшее название идиомы
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Загадочный CommaExpression
как-то я проводил с пользой "день свободы от забот", помогая ребятам из realaxy в создании их творения, за что они благоухают ко мне ненавистью.
изучая поддержку CommaExpression в их редакторе, я обнаружил, что в самом компиляторе проблем с поддержкой данной конструкции тоже хватает.
для начала расскажу как и где может применяться CommaExpression.
самое распространённое применение он обрёл конечно же в объявлении переменных: но на самом деле это чуть ли самая примитивная конструкция языка. по спецификации её можно применять повсеместно:
var x:XML = describeType( someObject ); var n:String; var list:XMLList = x.*.( n = name(), n == 'accessor' || n == 'variable' || n == 'constant' ); // выдёргиваем все свойства
Что же он из себя представляет?
на самом деле запятая заменяет точку с запятой. но увы, точку с запятой мы можем использовать далеко не всегда, так как они является самостоятельной конструкцией, необходимой в большой части языка ( например в циклах ). так же мы не можем её вставлять посреди других выражений ( например внутри скобок ). как раз для таких случаев и придуман CommaExpression. его можно пихать абсолютно везде. даже вместо точки с запятой ( но я этого не рекомендую. это просто возможность ). кроме синонима точки с запятой, он ещё и несёт функциональную нагрузку. вот простенький пример: в скобках записаны 2 выражения. выполниться они должны последовательно. но результатом всего CommaExpression будет всегда последнее выражение. таким образом мы могли напихать ещё уйму выражений ( которые обязаны были бы выполниться ), но в переменную i записался бы результат последнего выражения. именно этот приём и используется в примере с e4x выше. сперва идёт сохранение в промежуточную переменную, а потом она используется в результирующем выражении.
А теперь к проблемам компилятора
так как CommaExpression, можно использовать повсеместно Женя, видимо попытался испробовать его во всяких ситуациях. в тех ситуациях, что он мне скинул, юзать его конечно бессмысленно, но факт возможности мы не исключаем. все обнаруженные ситуации связаны с булевыми проверками: ясное дело, что "1" я ни разу не увидел. задумался. вспомнил, про то, что компилятор оптимизирует условия. соответственно он убирает оператор if и вместе с ним используемые в нём не булевые выражения. "усложнил" и код и всё заработало: начал разбираться с другим примером, который не менее загадочен, и в котором я точно так же не увидел "1": почему он не работает, я совсем не понял. глубоко разбираться не полез. просто нашёл лекарство в виде обёртки в скобки.
Всего комментариев 8
Комментарии
07.09.2010 08:50 | |
07.09.2010 10:44 | |
спасибо, Кэп! а я думал, что он не вкомпиливается по собственной глупости!
|
07.09.2010 13:24 | |
А в чем, собственно, удобство CommaExpression?
|
07.09.2010 14:45 | |
ну как бы можно прочитать пост и ознакомиться с примерами. особенно с примером e4x.
|
07.09.2010 17:12 | |
Psycho Tiger, прошу прощения за резкость.
|
09.09.2010 22:51 | |
trace вкомпиливается.
|
Последние записи от BlooDHounD
- Обновление blooddy_crypto.swc до версии 0.5.1 (31.03.2016)
- Кто не успел - тот опоздал (19.04.2011)
- Обновление blooddy_crypto.swc до версии 0.3.1 (29.11.2010)
- blooddy_crypto.swc теперь умеет JSON (13.10.2010)
- Загадочный CommaExpression (06.09.2010)