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

Сообщение от x-yuri
Если необходимо указать собеседнику, что данная переменная содержит набор значений, доступных по ключу, то следует использовать "ассоциативный массив". Если же переменная обладает поведением - то это объект
А в каких языках используется именно эта терминология (ассоциативный массив)? Точно в PHP, а еще где? В JavaScript - объекты (Object, Array, String, RegExp, Boolean, Function и т.д.), в Ruby - Hash'ы (тоже все объекты, но выделен класс Hash), в Python - dict'ы (тоже все объекты - см. пример выше, но выделен класс dict), в Java - HashMap'ы. При этом, все это, опять обобщённо может называться "ассоциативный массив".

Насчет "если переменная обладает поведением - то это объект" - тоже - лишь личная версия. Повторю - в Python'e (как и в JS) - по ключу может быть функция, но вместе с тем это остается словарем (объектом-словарем). В Ruby, например, ключом может быть другой Hash:

a = {:a => 1, :b => 2}
b = {a => 3, :c => 4} #  {{:a=>1, :b=>2}=>3, :c=>4}


Вообще, ключом в хеше может быть все, что угодно, что хешируемо (hashable), т.е. возвращается значение, вычисленное некой хеш-функцией (из глоссария Питона - http://docs.python.org/3.0/glossary.html#term-hashable)

В общем, что можно сказать точно - так это то, что это очень размыто и точно сказать очень сложно.

Также верно то, что использование терминологии конкретной технологии тоже более предпочтительно. Иначе, зачем одни называют это "словарями", другие "ассоциативными массивами", другие "хешами"? - ну называли бы одинаково. К примеру, Руби развился из Питона, в Питоне - называется "словарь", - почему создатель Руби не использовал эту же терминологию?

А в Википедии, тоже часто субъективные статьи, так в Associative arrays некто пишет, что в JS все контейнеры - ассоциативные эррэи, в JavaScript syntax (там же, Википедия) уже кто-то пишет: "JavaScript objects are often mistakenly described as associative arrays or hashes, but they are neither." Класс, ага - и дальше ни слова об этом =) Так и хочется спросить - почему? Откуда он это взял? Откуда взяли те, кто писал статью про Associative arrays? Получается, каждый пишет, что захочет? Но что-то же должно быть эталоном? Вероятно, все же, таковым должна являться спецификация технологии (и в данном случае, это ECMA). Поэтому, на вопрос "Откуда он это взял?" - ответ будет - "из спецификации, там такого нет". Если же копать глубже - однозначных ответов не будет.

Сообщение от x-yuri
Скорее всего было так: сначала массив пропатчили, и у него появилась возможность использовать не только числа в качестве индексов. А потом его пропатчили так, что его и не узнать уже ;-) все что осталось, так это возможность получить значение по ключу.
Про разреженные массивы можно тут (на русском) почитать - http://lord-n.narod.ru/download/book...po_C/23/23.htm, и, в частности, реализация на хеш-таблицах - http://lord-n.narod.ru/download/book..._C/23/2305.htm; и в русской Википедии - разрежённый массив, который ссылается на "ассоциативный массив", как реализацию (в свою очередь, ассоциативный массив ссылается на хеш-таблицу, как на одну из реализаций).
__________________
Тонкости ECMAScript

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