Показать сообщение отдельно
  #47 (permalink)  
Старый 06.01.2009, 23:21
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
это Dmitry A. Soshnikov про функции в качестве ключей упомянул
Нет, об этом я не говорил. Я говорил про то, что ключ может содержать функцию в качестве значения. И это было сказано на следующее предположение:

Сообщение от x-yuri
Если же переменная обладает поведением - то это объект
И я просто показал на примере Питона (да и в JS так же), что "переменная" является словарем (хэшем), хоть и "обладает поведением" (т.е. имеет функцию по некоторому ключу). Хотя, в Питоне так же - все, если говорить неделимо, является объектом.

Сообщение от x-yuri
т.е. дело не в том, что в строку преобразовать можно, а в том, что "ключом в хеше может быть все, что угодно"
Не просто "все, что угодно", а "все, что угодно, что хэшируемо" (и то - на уровне реализации). И тоже - говорил в данном пункте лишь в теории (но на примере Питона). JS это не касалось. В JS ключами могут быть только строки (ключи Array'я - тоже к строкам приводятся).

Сообщение от x-yuri
замечательно, меня это не интересует, не представляю задачи, в которой это может понадобится
Да, прикладных задач эта дискуссия вряд ли коснется здесь больше теоретический уклон.

Сообщение от x-yuri
т.е. речь о том, стоит ли строго придерживаться терминологии или стоит избегать лишних деталей (краткость сестра таланта) ;-)
Терминологии, несомненно, придерживаться стоит, причем, это и поможет избежать лишних деталей.

Чтобы подытожить, небольшая памятка по терминологии и основным принципам:

1. в JS есть объекты и примитивы;

2. примитивы при выполнении специфических операций преобразуются в
объекты;

3. исходя из 2) можно образно говорить, что "все в JS - объекты", однако, помнить, первые два пункта и знать, что пункт 3) - образный.

4. любой объект-контейнер может быть назван ассоциативным, поскольку может содержать пары "ключ => значение"

5. помнить, что ввиду делегирующей прототипной модели - ассоциация не точная, поэтому пункты 4 и 5 вообще употреблять не нужно (Хотя, тогда и в Питоне надо идти спрашивать, почему dict обособили от остальных объектов; там, как уже было показано, та же неоднозначность).

6. объекты, конкретно порожденные от конструкций Object, new __конструктор__ и {} (где __конструктор__ - объект-функция) принято (и согласно терминологии ECMA) называть объектами

7. объекты, порожденные от конструкций Array и [] принято (и согласно терминологии ECMA) называть массивами

8. объекты, порожденные от конструкций function и Function принято (и согласно терминологии ECMA) называть функциями или методами

10. согласно пункту 3), пункты 6), 7) и 8) можно называть объектами; это тоже будет верно, но уже будет более теоретический уклон, поскольку, обычно, в соответствующих местах, употребляются понятия из 6), 7) и 8)

11. если разговор не теоретический, а прикладной, никто не съест, если {} будет назван "ассоциативным массивом" / "хэшем" (или еще чем-то, услышанным в альтернативной технологии). Главное, опять, помнить и знать, - с таким успехом, все объекты являются "ассоциативными" и идеология в JS иная. Поэтому, чтобы "избежать лишних деталей", - лучше использовать лаконичную терминологию JS.

12. "Ассоциативный массив", "Разреженный массив", "Хэш-таблица" и т.д. - теоретические абстрактные понятия и структуры, стоящие выше конкретных технологий (JS, Python, Ruby, PHP и т.д.), поэтому однозначное использование этих определений - применительно к конкретным технологиям - размыто и не позволяет дать точную оценку.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 06.01.2009 в 23:55.
Ответить с цитированием