Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 26.12.2008, 23:11
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Внутренняя реализация не канает, их сотни. Все объекты ассоциативны, "ключи" заданы строками. Отсюда, если к массиву начинают приклеивать прилагательное ассоциативный, то его пытаются вычленить из кучи, а он такой же ассоциативный, как и любой другой объект.
Ответить с цитированием
  #22 (permalink)  
Старый 26.12.2008, 23:39
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
Внутренняя реализация не канает, их сотни.
Именно поэтому и уточняю, чтобы не было недоразумений.

Сообщение от Zeroglif
Все объекты ассоциативны, "ключи" заданы строками
Ну ассоциация не обязательно подразумевает ключ-строку; обычный массив с числовыми ключами - частный случай ассоциативного (опять же - только в теории, не касаемо реализаций и терминологий конкретных технологий)
__________________
Тонкости ECMAScript
Ответить с цитированием
  #23 (permalink)  
Старый 27.12.2008, 10:54
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от Dmitry A. Soshnikov
Ну ассоциация не обязательно подразумевает ключ-строку
Тогда нужно вернутся к истокам и определится с тем, что такое вообще ассоциативный массив. Что ты вкладываешь в это прилагательное по отношению к js?
Ответить с цитированием
  #24 (permalink)  
Старый 27.12.2008, 11: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 в 12:17.
Ответить с цитированием
  #25 (permalink)  
Старый 27.12.2008, 12:19
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

В таком философском ракурсе можно считать, что все объекты - это "некая абстрактная штуковина", это тоже правильно, только не помогает оценить и понять особенности . Ну, какая может быть ассоциация между А и В, если за спиной стоит отряд прототипов? Никакая. Динамическое изменение приводит к изменению длины массива? Может да, а может нет. Есть отличие по синтаксису доступа между массивом vs. объектом? Нет, конечно. Тогда в чём "ассоциативность"? В динамическом изменении в рантайм? В произвольности "ключей"? Это свойства любого объекта. Массивы терминологически выделены из этой общей кучи не за это, а в связи с определённым поведением, не имеющим ничего общего с "ассоциативностью/хешестью"...

Прилагательные массиву не нужны (кроме может специфичных вроде "0-относительный массив", "разреженный массив" и т.п.), они его не очерчивают, не выделяют, его вообще вредно выделять, в крайнем случае можно сказать, что все объекты (все!) в js ассоциативны, только не понятно, что это объясняет, каждый думает о своём. Кто-то начинает видеть два вида массивов, кто-то хеши в своём разумении, кто-то проверяет свойства массива в стиле typeof i == 'number' и так далее...
Ответить с цитированием
  #26 (permalink)  
Старый 27.12.2008, 12:39
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
Ну, какая может быть ассоциация между А и В, если за спиной стоит отряд прототипов? Никакая.
А почему нет? - дан ключ, ожидается значение по ключу - как объект найдет это значение, имея ключ (сам ли справится, или кого-то попросит), - дело десятое. Главное, что он вернул ассоциированное значение по ключу. На самом деле, все это отстраненные рассуждения.

Сообщение от Zeroglif
в крайнем случае можно сказать, что все объекты (все!) в js ассоциативны
Не нужно этого говорить, как не нужно и слово "ассоциативный" употреблять. Я ж говорю, что слово "ассоциативный" промелькнет лишь в контексте, что - "то, что вы видели в других языках под этим названием, здесь (хоть и схоже, и, если захотеть - можно все назвать ассоциативным), терминологически и идеологически отличается; здесь - это объект."

Сообщение от Zeroglif
только не понятно, что это объясняет, каждый думает о своём. Кто-то начинает видеть два вида массивов, кто-то хеши в своём разумении, кто-то проверяет свойства массива в стиле typeof i == 'number' и так далее...
задача, как раз-таки, не запутать этим словом ("ассоциативный"), а сказать, что "то, что вы видели с похожим поведением, здесь похоже, но идеологически отличается, поэтому нужно использовать данную терминологию и понимать данную идеологию, иначе будет полное непонимание, которое и вызвает typeof i == 'number' ".
__________________
Тонкости ECMAScript
Ответить с цитированием
  #27 (permalink)  
Старый 27.12.2008, 13:03
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от Dmitry A. Soshnikov
На самом деле, все это отстраненные рассуждения.
Почему отстранённые? Ты пару не задавал, массив/объект "пустой", а она (пара) уже есть, ты пару удалил, а она снова есть (имена совпали), ты её пошёл в прототипе удалил, а она снова есть (снова имена совпали), прочитал из прототипа, положил в объект и т.д. Дело-то не ожидании значения по "ключу", дело в ожидании заданного/правильного значения, дело в мнимой произвольности "ключа", в невозможности быть уверенным в паре, невозможности однозначно удалить пару, в сложности перебора и т.д. Идеология такая не-строгая-делегирующая, ну, сколько пар забито у "пустого" объекта? Их надо все пересмотреть, чтоб определить для себя границы произвольности "ключей", чего задавать, чего не перекрывать? Длина массива ничего не говорит об ассоциациях и т.д. и т.п.

зы Можно поступить проще - взять признанное определение ассоциативного массива (несколько) определений и посмотреть, удовлетворяют ли объекты js этому (этим) определениям. Если определение не будет космически-обобщённо-туманным, то ничего не выйдет.

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

Сообщение от Zeroglif
Дело-то не ожидании значения по "ключу", дело в ожидании заданного/правильного значения, дело в мнимой произвольности "ключа", в невозможности быть уверенным в паре, невозможности однозначно удалить пару, в сложности перебора и т.д.
Да, здесь однозначно, определение точной ассоциативности рушится, в том плане что, "удалил, а оно опять тут".

Можно, правда, частный случай задать (ради теорий о точной ассоциативности), но это не меняет факта, что точной ассоциации здесь нет:

obj.get = function(key) {
  if (obj.hasOwnProperty(key)) {
    return obj[key];
  }
  return null;
};


Ну вот, что еще раз подтверждает, что "ассоциативный массив" промелькнет лишь там, когда будет объяснение человеку, пришедшему из других языков, что здесь будет похоже, но идеология другая и мыслить (для более точного понимания предмета) нужно в этой идеологии.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #29 (permalink)  
Старый 27.12.2008, 13:20
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
Можно поступить проще - взять признанное определение ассоциативного массива (несколько) определений и посмотреть, удовлетворяют ли объекты js этому (этим) определениям. Если определение не будет космически-обобщённо-туманным, то ничего не выйдет.
кроме как неточной ассоциации в виду "удалил, а оно опять тут" - удовлетворяет А, если мы не можем однозначно сказать, что стоит за ключом - ассоциация рушится. Ха =) Вот хороший пример, его теперь можно приводить, когда зайдут холиворы, а для недопущения холиворов - сразу сказать (показать), что "здесь похоже, но есть особенности в идеологии, она отличается, мыслите этой идеологией"
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 27.12.2008 в 13:25.
Ответить с цитированием
  #30 (permalink)  
Старый 27.12.2008, 13:52
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Ты всё равно не хочешь идти по простому пути противопоставления мифам таких же лозунгов, может это и не однозначно, зато работает с той же силой, что и миф:

- Ассоциативных массивов нет!
- Классов нет!
- Хешей нет!
- Не всё является объектом!
- eval - зло!
- Ненавязчивого javascript-a в природе не существует!
- ...чего там я ещё забыл...

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает ошибка "Отсутствует исполняющее ядро ДЛЯ расширения имени файла js" Mattias Общие вопросы Javascript 5 09.04.2018 06:45
Что за конструкция? (из jQuery) Yojik Общие вопросы Javascript 6 22.08.2010 14:46
Что такое "javascript:document.login.submit()" i_live_in_Moscow Общие вопросы Javascript 21 30.09.2008 14:25
Как сделать, что бы изображения пропадали. Dronch Элементы интерфейса 7 28.08.2008 20:55
Что за tagName? partyzan Общие вопросы Javascript 1 24.04.2008 20:29