Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объекты JavaScript и рациональность их использования. (https://javascript.ru/forum/misc/11723-obekty-javascript-i-racionalnost-ikh-ispolzovaniya.html)

KBEPT 09.09.2010 20:52

Объекты JavaScript и рациональность их использования.
 
Всем здравствуйте.

У меня вопрос по поводу рациональности использования своих объектов в скриптах.

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

Объясню теперь подробно
На некоторых страницах сайта, будет расположено немалое количество кнопок, по некоторым подсчетам от 52 до 56, в зависимости от некоторых заранее-известных данных.
Мне необходимо о каждой из этих кнопок хранить данные - нажата или не нажата кнопка.
То есть получается что должно быть 52 или 56 переменных типа Boolean.
Естественно создавать руками 56 переменных, это мягко-говоря - нерационально.
При нажатии на любую из этих 56 кнопок, нужно обязательно знать текущее состояние определенной одной кнопки из остальных 55 кнопок на странице.
Я собираюсь хранить информацию в виде мини-таблицы, то есть как Record(запись) и она будет иметь вид:
-------------------------
| ID Кнопки | Состояние |
-------------------------

Я решил создать собственный объект и хранить данные там.

...
  my_object = new Object();
  my_object["button_0"] = true;
  my_object["button_0"] = false;
  my_object["button_0"] = true;
  my_object["button_0"] = true;
  ...
  my_object["button_56"] = false;
...

Сами свойства объекта я заполняю циклом один раз, сразу после загрузки страницы. Здесь я показал заполнение "вручную" для наглядности.

Доступ к состоянию любой из кнопки естественно очень прост:
...
var need_button = "button_33";
alert( my_object[need_button] );
...

Вопрос
Рационален ли такой подход к моей проблеме или есть другие, более оперативные способы решения моей проблемы ?

Заранее благодарю за ответ(ы) :)

inGray 09.09.2010 21:18

Недавно проскакивала тема, в которой обсуждалась возможность использования числового типа, как хранилища нескольких булевых значений..

KBEPT 09.09.2010 21:40

Да, я примерно представляю о чем Вы говорите.
Я раньше в большинстве случаев, да и сейчас частенько в некоторых вариантах использую подобный подход:

Описание подхода
Предположим, нужно хранить 8 значений типа boolean.
Их можно уместить в байте данных.
И в зависимости от значений этих 8 переменных, наше итоговое "контейнерное" байт-число будет принимать значение от 0 до 255 соответственно.
То есть алгоритм очень прост:
Как всем известно, Boolean - принимает значение true или false -> 1 или 0
Предстваляем значения всех 8 переменных в виде едениц и нулей:
01101110
То есть (слева-направо):
1 переменная имеет значение false
2 переменная имеет значение true
3 переменная имеет значение true
...
8 переменная имеет значение false
Затем полученное число преобразуется из двоичного представления в десятичное и мы получаем число.

Способ неплох, но только не в данном случае.
Представляете как муторно получить будет значение состояния кнопки "button_27" например в моем случае ?

Именно по-этому я и "связался" с объектами ... :)

B@rmaley.e><e 09.09.2010 21:43

KBEPT, в JS числа четырехбайтовые, поэтому можно хранить 32 переменные.
Ну и ничто не мешает Вам написать класс-прослойку, предоставляющую удобный интерфейс для хранения bool'ов в number'ах.

Gvozd 09.09.2010 21:57

Цитата:

Сообщение от B@rmaley.e><e
в JS числа четырехбайтовые

ложь и провокация
данный код не дает переполнения(возможно зависит от браузера):
alert(256*256*256*256+1)
alert(256*256*256*256+2)
alert(256*256*256*256+3)

Цитата:

Сообщение от B@rmaley.e><e
поэтому можно хранить 32 переменные.

а вот это уже правда во всех барузерах
var base=256*256*256*256;
var a=base*255+1;
var b=base    +1;
alert([a,b])
alert([a==b,~~a==~~b]);

как видим при применении битовых операций число урезается до 32 битов

а, вообще, использование единого числа для хранения булевых чисел работает гораздо медленнее чем использование объекта.

KBEPT 09.09.2010 21:58

Нет, я понимаю все моменты с типами данных JavaScript :)
Мы отклонились в нашей дискуссии от основной вопросо-проблемы ...

В данном и конкретном случае, когда необходимо получать значение состояния кнопки по ее ID, реализация данного действия через свойства объекта рациональна ?

В данном случае я не буду писать допольнительных функций и классов для изъятия состояния кнопки по ее ID, а просто считаю значение нужного свойства объекта и все.

KBEPT 09.09.2010 22:04

Цитата:

Сообщение от Gvozd (Сообщение 70296)
а, вообще, использование единого числа для хранения булевых чисел работает гораздо медленнее чем использование объекта.

Вот и я так думаю, тем более в случае, когда нужно получать значение состояния кнопки по ее ID.
И процесс получения значения состояния сводится всего к одной строчке:
...
var value_of_status = my_object["button_17"];
...

И никаких дополнительных функций с использованием условных операторов и операторов цикла :)

Kolyaj 10.09.2010 00:22

Цитата:

Сообщение от KBEPT
В данном и конкретном случае, когда необходимо получать значение состояния кнопки по ее ID, реализация данного действия через свойства объекта рациональна ?

Блин, да какая разница? Этот вопрос не стоит всех тех букв, что вы про него написали.

KBEPT 10.09.2010 00:40

Спасибо, я уже разобрался с этим вопросом :)
Остановился на объектах :)

И еще один момент.
Я всегда основные моменты выделяю, как например вопрос в данной теме. Я просто спрашивал рационально или нет ...
Есть такой анекдот (или не анекдот) короткий:

Выходит монах из монастыря, подбегает к забору и хочет перепрыгнуть в час ночной.
Его останавливает батюшка и спрашивает:
- Кто? Куда? Зачем?
На что монах ему отвечает:
- Иван. В магазин. За водкой.

Это я все к чему...
К тому, что можно было просто дать ответ (если конечно знаете) - рационально и пойдет или нерационально.

Спасибо еще раз :)

Gozar 10.09.2010 06:52

KBEPT,
на сайте много литературы, которая дает ответы на такие вопросы, просто большинство лениться её читать, а всем наскучило их повторять или давать похожие.

Так вот басня:

Сидит обезьяна и меряет какие очки лучше. Вопрос зачем обезьяне очки и что курил Крылов?
Это я все к чему, да круто же, я басню рассказал. :)

http://javascript.ru/ui/show-hide-toggle и т.д.

KBEPT 10.09.2010 12:45

Цитата:

Сообщение от Gozar (Сообщение 70320)
KBEPT,
на сайте много литературы, которая дает ответы на такие вопросы, просто большинство лениться её читать, а всем наскучило их повторять или давать похожие.

Так вот басня:

Сидит обезьяна и меряет какие очки лучше. Вопрос зачем обезьяне очки и что курил Крылов?
Это я все к чему, да круто же, я басню рассказал. :)

http://javascript.ru/ui/show-hide-toggle и т.д.

---- ---- ---- ----
Здравствуйте.

Я заранее извиняюсь за данный ответ, но я должен помочь человеку разобраться.

Раз не можете понять что я хотел узнать, создавая данную тему, я все наиподробнейше распишу и объясню..
И разумеется не поленюсь и мне не наскучит, ведь я объясняю человеку, а я людей привык уважать прежде всего.

Прежде чем создавать данную тему я изучил и прочитал соответствующие темы и статьи, но касательно моего вопроса это не подходило.

Перед тем как создавать тему я очень внимательно изучил тему: http://javascript.ru/forum/misc/3706...-otvetili.html

Соглассно описанным в указанной теме правилам, я оформил свою тему.
Я не написал в содержании темы вопрос в 4 слова и одну строку.
Тогда естественно "Божки" форума направилибы меня в -> FAQ, это было бы правильно.

В первом сообщении я подробно описал ситуацию и выделил жирным шрифтом подзаголовки.
И в частности подзаголовок с моим вопросом.
Вообще форматирование текста производится для того, чтобы привлечь внимание читателей
и сделать процесс чтения комфортабильным.

Переходим далее, что касательно "...а всем наскучило их повторять..."
Есть такой закон: Труд из обезьяны делает человека, а лень соответственно наоборот. Просто помните об этом.
Вообще я считаю, что форумы создаются для того, чтобы один человек (или группа людей) могли узнать у другого человека (группы людей) ответ или мнение по некоторым вопросам.
Представьте себе, Вы пришли на Мастер-Класс и задаете вопрос человеку, который умнее Вас, а он Вам в ответ:
- Иди FAQ читай! Зачем ты сюда пришел ?!
Хм... Судя по Вашему предыдущему ответу - Вам это очень понравится и Вы будете счастливы получить такой ответ.
Я в своем сообщении подробно описал свою ситуацию и задал вопрос.
И просто хотел получить ответ в виде мнения человека(людей), которые с подобным сталкивались.

Переходим далее, на счет ответов в темы.
Я считаю, что ответы должны даваться людьми, которые в данном направлении разбираются.
Если человек не понимает в данном вопросе чего-то пусть интересуется, я всегда отвечу человеку.
Но писать в тему на вопрос:
"Я сделал так так и так, читал там, там и там, где моя ошибка ?"
Ответ в виде:
"Паренек, ты что тут вообще делаешь? Пшёл вон читат FAQ!"
Извините, но это оскорбление и неуважение к интересуещемуся.

Каждый человек, который задает вопрос, хочет получить на него тот ответ, который соответствует вопросу.
То есть примеры:

Вопрос: Вы сегодня выносили мусор?
Ответ: Да.
Вопрос: Когда в последний раз Вы были на работе?
Ответ: Вчера.
Вопрос: Как имя Вашего отца?
Ответ: Владимир.


И мой вопрос:
"Рациоанально ли использовать объекты в моем случае?"
Необходимый ответ-мнение:
"Рационально или нерационально."

Согласитесь - это же элементарно просто...
Было бы только желание и не было бы лени и неуважения к собеседникам...

Запомните, все в жизне просто ...
Небо голубое, вода мокрая, ветер прекрасный ...

Нет, если я Вас лично обидел чем-то в предыдущих своих ответах, Ради Христа - извините, я совсем этого не хотел.

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

Следующий момент, на счет басни и Вашего мнения.
Когда Иван Андреевич Крылов писал басню "Мартышка и очки",
он вкладывал в неё смысл не тот, который у Вас в вопросе присутствует.
Вопрос из области: "Я системный администраторв и умный-умный программист, который решил пошутить".
Скажу честно, шутка неахти, только без обид.
Просто показывает умственный уровень человека, но никак не уровень знаний в определенной области. Извините.

И последнее, на счет Вашей "помощи" и ссылки.
Вы не прочитали моего сообщения и соответственно дали неправильный совет.
Мне не нужен переключатель в точности, как указан в этой статье.
Я не писал реальный пример, цель и область применения того, что мне нужно.
Я просто задал вопрос и хотел получить соответствующий ответ.

---- ---- ---- ----
Единственный человек, который мне помог это Gvozd.
Ему отдельное спасибо за мнение об использовании объектов и чисел как контейнера.

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

Спасибо за то, что прочитали.
И мне не было лениво ...

Kolyaj 10.09.2010 12:59

Цитата:

Сообщение от KBEPT
Есть такой закон: Труд из обезьяны делает человека, а лень соответственно наоборот. Просто помните об этом.

Это не закон, это присказка для лохов, которых хотят заставить работать. Если бы это было так, вы бы до сих пор обрабатывали поля мотыгой, а не придумывали различные механизмы, чтобы нихера не делать. Лень -- двигатель прогресса.


Цитата:

Сообщение от KBEPT
Вообще я считаю, что форумы создаются для того, чтобы один человек (или группа людей) могли узнать у другого человека (группы людей) ответ или мнение по некоторым вопросам.

Ну тут всё стандартно.


Цитата:

Сообщение от KBEPT
И мой вопрос:
"Рациоанально ли использовать объекты в моем случае?"
Необходимый ответ-мнение:
"Рационально или нерационально."

Вы решаете выдуманную проблему. В чём рационально мусор выносить, в кроссовках или кедах? В чём вам удобней, в том и выносите. Что вообще такое в вашем понимании "рационально"?


Цитата:

Сообщение от KBEPT
Я готов прочитать оправдания

Смешно.

KBEPT 10.09.2010 13:37

Из вышесказанного значит лишь одно - я все верно расписал :)
Спасибо что прочитали и даже ответили :)
Всем спасибо - все свободы ... ;)

Gozar 10.09.2010 21:32

Цитата:

Сообщение от KBEPT (Сообщение 70340)
Вы пришли на Мастер-Класс и задаете вопрос человеку, который умнее Вас, а он Вам в ответ:
- Иди FAQ читай! Зачем ты сюда пришел ?!
Хм... Судя по Вашему предыдущему ответу - Вам это очень понравится и Вы будете счастливы получить такой ответ.

Вообще-то да, я скорее всего буду счастлив или по крайней мере благодарен, ведь я получу в итоге ответ на свой вопрос.

Я дал вам ссылку чтобы вы прочитали статью и обсуждение следующее за ней. Ваши претензии непринимаются и основаны на чувствах, а это уже вопросы психологии, которые я люблю обсуждать, но не на этом форуме ;)

Цитата:

Сообщение от KBEPT (Сообщение 70340)
Следующий момент, на счет басни и Вашего мнения.
Когда Иван Андреевич Крылов писал басню "Мартышка и очки",
он вкладывал в неё смысл не тот, который у Вас в вопросе присутствует.
Вопрос из области: "Я системный администраторв и умный-умный программист, который решил пошутить".
Скажу честно, шутка неахти, только без обид.
Просто показывает умственный уровень человека, но никак не уровень знаний в определенной области. Извините.

Ничего она не показывает и уж тем более не умственный уровень человека, это вообще не шутка, скорее метафора.

Я вообще вас не знаю и претензий к вам или вам ко мне быть не может, какие ещё оправдания?!:blink: (<- это не вопрос) мне с высокой колокольни наплевать как вы решите вашу проблему.

В вашем случае рационально было бы сделать так, как вы сделали первый раз, до того как спросили что либо на форуме.

Вообще в js объект является ключевым понятием и используется везде, мне даже сложно придумать скрипт где он не используется, я вообще сомневаюсь в возможности такого, но "чем черт не черт" ;), поэтому выражение:
Цитата:

У меня вопрос по поводу рациональности использования своих объектов в скриптах.
звучит глупо. Это как спросить - рационально ли использовать числа для вычислений?

KBEPT 10.09.2010 22:17

Gozar,
Статья, что Вы мне указали - написана замечательно, все понятно и толково "разжеванно". Я по этому поводу даже не спорю.
Но это не тот вариант переключателей, что мне нужен был.
Дольше рассказывать было бы, зачем они нужны мне, чем просто привести с моей стороны пример и попросить людей знающих и разбирающихся в этом моменте лучше меня - дать мне ответ.
Я очень много в этом мире не знаю и еще со многим не сталкивался...
И когда я просто задал вопрос - я просто расчитывал, что люди умнее меня - смогут ответить без ухмылок на мой вопрос.

А в итоге получилось парадоксально просто...
Вместо однострочного ответа на вопрос, люди написали целые сочинения.
Действительно парадоксально. :(

Но все-равно спасибо.

Gozar 10.09.2010 23:07

Цитата:

Сообщение от KBEPT (Сообщение 70404)
И когда я просто задал вопрос - я просто расчитывал, что люди умнее меня - смогут ответить без ухмылок на мой вопрос.

Вам просто ответили, вы просто придираетесь.

Gozar 10.09.2010 23:18

Цитата:

Сообщение от KBEPT (Сообщение 70404)
А в итоге получилось парадоксально просто...
Вместо однострочного ответа на вопрос, люди написали целые сочинения.
Действительно парадоксально. :(

Вы начали, я поддержал :)

Вам знакомы слова софистика и демагогия?

KBEPT 10.09.2010 23:53

Цитата:

Сообщение от Gozar (Сообщение 70409)
Вы начали, я поддержал :)
Вам знакомы слова софистика и демагогия?

Угу, я думаю данная тема является ярким примером ...
Да ... я согласен, неважно вышло ...
Но все-равно спасибо за участие :)

tenshi 11.09.2010 19:13

феерично *О*

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

KBEPT 11.09.2010 19:22

Цитата:

Сообщение от tenshi (Сообщение 70469)
феерично *О*

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

Спасибо за совет и ответ :)
Сейчас уже другое делаю, но это уже другая история ...


Часовой пояс GMT +3, время: 00:57.