Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разница между "obj['s']" = и "obj.s =" (http://www.flasher.ru/forum/showthread.php?t=159067)

wvxvw 28.06.2011 19:21

Хаха... снова Ява снова ООП :p Ява испохабила идею классов и типов на столько, что изза этого теперь рождаются такие споры. В теории категорий сила, а Ява курит в сторонке. Между типами и классами нет ничего общего, и их частичное пересечение - случайность возведенная в степень правила языками для идиотов. :)
Числа - типы, булевые величины - типы, строки в AS3 - вообще не понятно что, тяжелое наследие ECMAScript, так же как и массивы, очевидно. Очевидно, что литералы должны были это как-то выделить / объяснить программисту, но попытка не удалась, и никто этого не понял, а еще хуже, использовал в итоге не правильно, добавив еще литералов "по образцу" не поняв смысл образца...
Тип определяется набором правил применимых ко всем "особям" типа. Класс это фабрика создающая, иногда, однотипные объекты. Заметте, что "особи", я просто лучшего слова не придумал, не обязаны вообще быть объектами, или могут быть объектами разных классов.

ЗЫ. Слава богу AS3 еще не совсем Ява.
:away: нету смайлика :fight: ....

Crazy 28.06.2011 19:29

Цитата:

Сообщение от etc (Сообщение 1007139)
з. Ы. Я надеюсь, вы также переносите открывающую фигурную скобку, по конвенции Адоби.

Мне эквипенисуален способ расстановки фигурных скобок. Скажу больше: я работал в компании, где в Java и C++ были разные правила расстановки фигурных скобок и меня ни разу не стошнило.

Так что если Вы считаете, что знаете некий сакральный, самый правильный способ их ставить -- Вам еще многое предстоит. :)

Добавлено через 51 секунду
Цитата:

Сообщение от wvxvw (Сообщение 1007145)
Ява испохабила идею классов и типов на столько

В слове "C++" Вы допустили 3 ошибки. :)

etc 28.06.2011 19:37

Цитата:

Сообщение от Crazy (Сообщение 1007147)
Мне эквипенисуален способ расстановки фигурных скобок. Скажу больше: я работал в компании, где в Java и C++ были разные правила расстановки фигурных скобок и меня ни разу не стошнило.

Так что если Вы считаете, что знаете некий сакральный, самый правильный способ их ставить -- Вам еще многое предстоит. :)

Ну понятно, не соблюдаем. В общем, двойные стандарты никто не отменял.
Кому что соблюдать, само собой, решает сам.

wvxvw 28.06.2011 19:43

OK, ладно, Ява усугубила и углУбила, если другими словами. Т.с. закрепила эффект :)

Crazy 28.06.2011 19:43

Цитата:

Сообщение от etc (Сообщение 1007152)
Ну понятно, не соблюдаем. В общем, двойные стандарты никто не отменял.
Кому что соблюдать, само собой, решает сам.

Друг мой, Вы традиционно прочитали в моем сообщении то, что там не было написано. И не прочитали то, что было.

Традиционно специально для Вас расскажу второй раз и медленно: мне приходилось работать с таким количеством способов расстановки фигурных скобок, что ни один из них более не вызывает у меня рвотных судорог. Соответственно, IDE у меня настроена на тот способ, который указан в стайлгайде. А в IDEA у меня указан для Java совсем другой способ. И меня это совершенно не беспокоит.

А вера в единственно правильный способ оформления -- это у Вас пройдет.

Добавлено через 3 минуты
Цитата:

Сообщение от wvxvw (Сообщение 1007153)
OK, ладно, Ява усугубила и углУбила, если другими словами. Т.с. закрепила эффект :)

Куда уж там усугулять-то? C++ был первым, простите за нецензурное ругательство, "гибридным языком", который и сделал эту концепцию обычной практикой. Java язык на редкость ублюдочный, но тут она не при делах -- сделали "comme il faut"

P.S. В смысле -- не первым гибридным, а первым популярным гибридным.

alatar 28.06.2011 19:50

Странно, что еще никто не упомянул, что на уровне байткода new Object и {} (как и new Array и []) вещи разные, с прикруткой тру пути.

Crazy 28.06.2011 19:54

Цитата:

Сообщение от etc (Сообщение 1007152)
Ну понятно, не соблюдаем.

Тупо в качестве примера фигурных скобок и двойных стандартов: http://www.flasher.ru/forum/showpost...27&postcount=8 :)

Добавлено через 5 минут
Цитата:

Сообщение от alatar (Сообщение 1007160)
Странно, что еще никто не упомянул, что на уровне байткода new Object и {} (как и new Array и []) вещи разные, с прикруткой тру пути.

Вполне нормально, что код разный.

Код AS3:

public function curlyBraces(): void
{
    var o:Object = {};
}
 
public function newOperator(): void
{
    var o:Object = new Object();
}

Код:

  function curlyBraces():void    /* disp_id 0*/
  {
    // local_count=2 max_scope=1 max_stack=1 code_len=8
    0      getlocal0       
    1      pushscope       
    2      newobject        {0}
    4      coerce            Object
    6      setlocal1       
    7      returnvoid       
  }
 
 
  function newOperator():void    /* disp_id 0*/
  {
    // local_count=2 max_scope=1 max_stack=1 code_len=11
    0      getlocal0       
    1      pushscope       
    2      findpropstrict    Object
    4      constructprop    Object (0)
    7      coerce            Object
    9      setlocal1       
    10      returnvoid 
  }

(источник)

Разница в скорости действительно странна (особенно то, кто быстрее), но ничего странного в том, что код разный, я не вижу.

alatar 28.06.2011 20:10

Эта странность объясняется в комментах на джире. Вся фишка в джиттере.

Crazy 28.06.2011 20:12

Ссылка из указанной мной статьи, так что я в курсе. Только это не объяснение -- это констатация факта. :)

wvxvw 28.06.2011 20:48

C++ все еще оставлял лазейку для инакомыслящих, ну, уже хотя бы в виде вседозволенности. Т.е. если сравнивать с историей - C++ - это Окрябрьская революция, а Ява - это 22-53 годы. Можно сказать, что причиной была революция, но могло бы получится и по-другому, а не получилось.

ЗЫ. Я думаю, что если покопать ECMA документацию, то можно докопаться и до ответа на вопрос почему по-разному создаются объекты. Я так подозреваю, что способ с new должен создать все свойства, которые объявили на прототипе, а {} должен создать "без прикрас". Но зачем это нужно, этого уже никто не поймет. К сожалению не первый факт из ECMA сочинений, который вызывает недоумение. А может причина была еще прозаичнее - какой-нибудь представитель компании производящей браузеры на заседании коммитета по особо важным делам поведал о том, что они уже воплотили это в жизнь способом #1, а представитель конкурирующей организации не согласился, т.как они уже воплотили, но способом #2. И, как всегда, чтобы никого не обидеть, решили, что вместо стандарта лучше предложить венигрет.

dimarik 28.06.2011 21:31

Пока обожду закрывать ) Но имею сильное чувство.
Фабрики — рабочим, землю — крестьянам, каждому программисту — свой ЯП.


PS Сильно сомневаюсь в необходимости преобразовывать лексемы "Object" и "{}" в разные токены (по сути это один и тот же). Скорее всего так сложилось исторически и разность в производительности пример того, что рефакторингом в Адоби не очень пахло.

Дениса поддерживаю. Незачем в хорошем ЯП поддерживать множесто синонимов языка.

Psycho Tiger 28.06.2011 22:35

И я поддерживаю Дениса, что синонимы не к чему.
Но я за литерал.
Например, {} позволяют сразу вбить значение
Код AS3:

{foo: "bar"}

что порой помогает избавиться от лишней локальной переменной, которая захламляет код. И работает быстрее. Это, конечно, мелочи, но я серьезно не услышал ни одного объективного довода в пользу new Object, помимо "это выглядит по ООП". По ООП конкатенация строк выглядит через String#concat. В повседневной жизни часто его используют? Конечно, оверлоадить плюс - это тоже ООП, но не в контексте единообразия кода в AS3.

dimarik 28.06.2011 22:38

new -- вот где единообразие. Остальное -- Perl.

Добавлено через 2 минуты
Что до "работает быстрее" - это проблема компилятора. Ты же написал тьюринга, остальное - его проблемы.

iNils 28.06.2011 23:21

Хм... Раз синонимы поддерживаются языком, значит они разрешены. Остальное треп.

dimarik 28.06.2011 23:55

Но это не синонимы для компилятора ) На выхлопе разный байткод. Трепа нет.

iNils 29.06.2011 00:03

Компилятор реализует спецификацию, а не наоборот.

dimarik 29.06.2011 00:05

Забытая аналогичная спецификация, ставшая синонимом.

iNils 29.06.2011 00:23

Не понял.

Crazy 29.06.2011 00:30

Цитата:

Сообщение от dimarik (Сообщение 1007234)
Но это не синонимы для компилятора ) На выхлопе разный байткод.

...что признано ошибкой, судя по баглисту.

S-ed 29.06.2011 03:43

Crazy
Обычно, баги долгожители перекачевывают в фичи...

Может еще E4X посмотреть?

Crazy 29.06.2011 10:08

Цитата:

Сообщение от S-ed (Сообщение 1007270)
Crazy
Обычно, баги долгожители перекачевывают в фичи...

Только путем документирования. 8-)


Часовой пояс GMT +4, время: 22:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.