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

Сообщение от Zeroglif
что такое вообще ассоциативный массив
Это такой же обычный абстрактный тип данных, не более. Кем-то так названный. Вообще, ассоциация (в философии) подразумевает, что по событию A, выдается событие B. Т.е. А - ключ к B. Отсюда назвали структуру - "ассоциативный массив", где ключ - любое "событие". В чем отличие от обычного массива? Формально - ни в чем. По событие "0" (индекс) массива - выдается "событие" "10" (значение). Физически же по факту - разница есть - в реализации.

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

И в Си (да и в Asm'e), например, - это всего лишь - "получить данные по адресу База + НомерСмещения * РазмерТипаДанных":

*(Base + Index)

при этом запись вида Base[Index] - всего лишь синтаксический сахар для этой конструкции (не более).

И, верноятно, решили, что однотипность можно перешагнуть и сделать, другую конструкцию, которая бы использовала похожий синтаксический сахар, для получения нужных значений, но хранила данные разных типов. При этом идентификация события "B" осуществлялась бы (физически, на уровне реализации) не просто прибавлением смещения к базе, а по более сложным алгоритмам (для тех, кто будет использовать эти новые структуры - это должно быть за кадром - это основной принцип абстракции).

Если использовать просто понятие "ассоциативность", то разница (опять же - касаться внутренних реализаций не стоит) между "структурой", "объектом", и "ассоциативным массивом" - не значительная - и там, и там, и там - мы имеем: "найди в Оболочке (Базе) событие B, вот тебе для этого ключ А". Физически, конечно все это отличается (структура, например, статическая, тогда как в "ассоциативный массив" можно добавлять значения динамически; хотя, динамичность - здесь, конечно, не главное).

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

Сообщение от Zeroglif
Что ты вкладываешь в это прилагательное по отношению к js?
Я-то уж не вкладываю, я писал уже, что я не использую понятие "ассоциативный массив" вообще, когда говорю о JS, я говорю "объект". Но всегда готов найти (и показать - кому это интересно) сходство с этой теоретической структурой. Только лишь абстрактно: все JS объекты - есть нечто, что может хранить ассоциации (по событию (ключу, полю, слоту, свойству и т.д.) "А" выдавать событие (значение) "B"). И если этот ассоциативный объект динамически изменяем - нет возможности утверждать, что это не может подпадать под любые определения, которые также реализуют это поведение (напоминает Duck Typing =)). С другой стороны - если идет разговор о JS, то, естественно, нужно использовать терминологию JS. Просто я, когда слышу от кого-то "ассоциативный массив", поправляю (но не категорично отрубаю, что нет в JS этого), что "в JS терминология (и, что более важно, - идеология) другая, здесь все является объектом, но в целом это напоминает то, что вы видели под терминологией хэш или ассоциативный массив в других реализациях; и если вы хотите изучать именно js, то, когда будете говорить о js - стоит говорить в его терминологии. К тому же, это и физически может отличаться". И все - человек сразу врубается и уже не устраивает холиворы (ну а как же - он видел "то же самое" в других языках и там это называлось так, а тут ему утверждают обратное )
__________________
Тонкости ECMAScript

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