PDA

Просмотр полной версии : Для чего нужен оператор Структура



tmpnikl
05.02.2015, 05:52
Массив понятно, таблица значений... и т.д., но часто в программах встречаю Структура, и не могу понять для чего он, у него есть методы(Вставить, удалить и т.д.) и свойства, следовательно это объект... можно как-нибудь по простому объяснить на примерах, а не из теории

avm3110
05.02.2015, 09:34
следовательно это объект

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

Например с структуре "Автомобили сотрудников", ключом может выступать "Сотрудник". Соответственно и методы формирования этой структуры будут "Вставить", "Удалить", "Найти" и т.д.

tmpnikl
05.02.2015, 10:06
т.е массив(двухмерный) A(3,2)
A(1,1)=Сотрудник.Иванов A(1,2)=Авто.Запор.
A(2,1)=Сотрудник.Петров A(2,2)=Авто.Жига
A(3,1)=Сотрудник.Сидоров A(3,2)=Авто.Ока
Поиск в масиве
Индекс = Массив.Найти("Сотрудник.Петров");
Сообщить(А[индекс] [2]
А как будет выглядеть структура и поиск?
Чем она более привлекательна, и ключ тоже не совсем понятно..

avm3110
05.02.2015, 10:59
Ты сам начинаешь отвечать на свой вопрос :p


Поиск в масиве
Индекс = Массив.Найти("Сотрудник.Петров");
Сообщить(А[индекс][2]);

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

Отбор = Новый Структура("Дата, Клиент, Автомобиль");
Отбор.Вставить("Клиент", ТекКлиент);
Отбор.Вставить("Дата", РабочаяДата);
Отбор.Вставить("Автомобиль", ТекКлиент.Автомобиль);


Тогда, ты всегда можешь получить "что хочешь"

Если Отбор.Свойство("Дата", ДатаОтбора) Тогда
Сообщить ("Дата отбора установлена как" + ДатаОтбора);
Иначе
Сообщить ("Дата отбора не установлена");
КонецЕсли;

---------- Post added at 10:59 ---------- Previous post was at 10:57 ----------


и ключ тоже не совсем понятно..

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

Для структуры доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

tmpnikl
06.02.2015, 04:24
Спасибо... но структура встречается например и в паскале, но там она используется для создания, что-то вроде таблиц, но СУБД, например фркс, уже имеют таблицы, и поэтому структур там нет, хотя есть массивы..., в 1С тоже есть таблицы (та же таблица значений), почему в Вашем примере не воспользоваться таблицей значений, а удобнее применить Структуру?

avm3110
06.02.2015, 06:47
но структура встречается например и в паскале
Да, понятие "структура" не есть "личным изобретением тов. Нуралиева" :p



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


почему в Вашем примере не воспользоваться таблицей значений, а удобнее применить Структуру?
Таблица значений несет больше издержек (но и имеет больший функционал) чем структура. Так зачем забивать гвозди микроскопом, когда для этого можно использовать гораздо более дешевый (но и менее функциональный) молоток?:p

avm3110
06.02.2015, 10:47
Собственно говоря, разговор (на мой взгляд) начинает уходить в "религиозную область" - можно ли программировать на 1С без использования Структуры.

Ответ: В собственных конфигурация - вполне. В типовых - нельзя, многие механизмы (например те же отборы) реализованы на использовании механизма структур.

palsergeich
20.02.2015, 20:15
в собственных то не очень без структуры, тот же ОткрытьФорму() одним из параметров требует структуру. Структура это один из типов данных, причем достаточно удобный.

---------- Post added at 20:13 ---------- Previous post was at 20:11 ----------

Структура - по сути дела -ассоциативный массив, который используется почти во всех языках программирования.

---------- Post added at 20:15 ---------- Previous post was at 20:13 ----------

https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D 0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1 %81%D0%B8%D0%B2