Сообщение от 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; и в русской Википедии -
разрежённый массив, который ссылается на "ассоциативный массив", как реализацию (в свою очередь, ассоциативный массив ссылается на хеш-таблицу, как на одну из реализаций).