Имя: Пароль:
1C
 
Как вы относитесь к идее реализации указателей на функции в платформе?
0 TormozIT
 
гуру
10.07.06
12:23
В одной из веток разгорелся спор по теме. Каково ваше отношение к этой идее.
Приблизительный пример кода.

Указатель=@глРассчитатьНДС();
^Указатель(100, 20);
1 AeDen
 
10.07.06
12:26
Зачем?
2 Дяпти
 
10.07.06
12:27
было бы неплохо.
3 Дяпти
 
10.07.06
12:29
а еще из излишеств нехороших хочется иметь событие при изменении свойства объекта.
4 s22
 
10.07.06
12:30
(3) почему событие излишество? и почему нехорошее?
5 Гений 1С
 
гуру
10.07.06
12:31
Классический пример:
Если эторастение(объект) тогда поливать(объект) иначеесли этоживотное(объект) тогда кормить(объект) конецесли

заменяется вызовом объект.питать()

Объект - структура
6 Гений 1С
 
гуру
10.07.06
12:32
(3) причем не только свойства объекта, но и свойства табличной части объекта. :)
7 Гений 1С
 
гуру
10.07.06
12:32
(4) сие называется триггер
8 smaharbA
 
10.07.06
12:33
Савсем сдурели
9 vasinok
 
10.07.06
12:55
(0) что это?
10 Гений 1С
 
гуру
10.07.06
12:56
(9) вызов ссылки по указателю на нее
11 Волшебник
 
10.07.06
12:57
(0) см. объект Действие
12 Гений 1С
 
гуру
10.07.06
13:00
Для 1С-ников наглядный пример:

Как можно счас:

Объект=новый структура();
Объект.Вставить("Тип", "Растение");
Питать(Объект);

Объект=новый структура();
Объект.Вставить("Тип", "Растение");
Питать(Объект);


Функция Питать(Объект)
Если Объет.Тип()="Растение" Тогда
  Сообщить("Поливаю водичкой с кальцием");
ИначеЕсли Если Объет.Тип()="Животное" Тогда
  Сообщить("Нарезаю морковку и прочия овощи");
КонецЕсли;
КонецФункции



Как можно с указателем:



Объект=новый структура();
Объект.Вставить("Тип", "Растение");
Объект.Вставить("Питать", Поливать());

^Объект.Питать(Объект);

Объект=новый структура();
Объект.Вставить("Тип", "Животное");
Объект.Вставить("Питать", Кормить());

^Объект.Питать(Объект);


Функция Поливать(Объект)
  Сообщить("Поливаю водичкой с кальцием");
КонецФункции

Функция Кормить(Объект)
  Сообщить("Нарезаю морковку и прочия овощи");
КонецФункции
13 Гений 1С
 
гуру
10.07.06
13:00
(11) волшебник, не ври людям
14 Гений 1С
 
гуру
10.07.06
13:00
если это не ложь в утешение, гыгыгы
15 Волшебник
 
10.07.06
13:02
(13) Действие - это как раз и есть указатель на процедуру. Только вот количество дальнейших операций с ним очень ограниченное.
16 TormozIT
 
гуру
10.07.06
13:02
Пожалуй сюда же следует отнести и получение коллекции методов объекта.
Например, вызовем все беспараметровые методы объекта.

Для каждого УказательНаМетодОбъекта из Объект.Методы Цикл
   Если УказательНаМетодОбъекта.КоличествоПараметров = 0 Тогда
       ^УказательНаМетодОбъекта();
   КонецЕсли;
КонецЦикла;
17 Гений 1С
 
гуру
10.07.06
13:02
(15) угу, про то и речь
18 Гений 1С
 
гуру
10.07.06
13:03
(16) йес
19 Волшебник
 
10.07.06
13:04
(17) Тем не менее, нельзя сказать, что в 1С нет указателей на процедуры (делегатов). Они есть.
20 TormozIT
 
гуру
10.07.06
13:06
(19) Согласны мы. Минималистическая реализация присутствует и только для интерфейса.
21 romix
 
модератор
10.07.06
13:07
Указатели - это зло.

Некое подобие делегатов (например, когда надо переформировать отчет по закрытию документа) я реализую через События.
22 Гений 1С
 
гуру
10.07.06
13:10
(21) обоснуй про зло
23 Парижская фанера
 
10.07.06
13:12
Нафиг указатели нужны... От них в C# практически отказались (от практического использования)
24 TormozIT
 
гуру
10.07.06
13:13
(23) Отказались, заменив чем? У нас то, наверняка, такой альтернативы не будет.
25 Херрес
 
10.07.06
13:22
Ну вообще Выполнить() заменяет в некотором роде указатели на функции.
Так что если бы кому-нибудь это было действительно очень нужно - он бы этим уже пользовался
26 Гений 1С
 
гуру
10.07.06
13:22
(25) чувак, выполнить - тормозит выполнение кода... Поэтому и не юзает никто и даже 1цэ не рекомендует.
27 Херрес
 
10.07.06
13:28
(26) да ладно. Кто-нибудь проверял ? :) Никто это не юзает не потому что медленно, а потому что всем влом (не очень-то и хотелось)
28 Гений 1С
 
гуру
10.07.06
13:29
(26) изначально криво - юзать оператор, делающий синтаксический разбор кода в практических целях.
29 Херрес
 
10.07.06
13:30
В конце концов вольность, с которой разработчики типовых обращаются с таблицами значений и деревьями заставляет думать что скорость - последнее, что кого-нибудь волнует
30 Херрес
 
10.07.06
13:32
В конце концов в типовых даже не очень понятно, куда можно было бы воткнуть вызов такого указателя. Потому что алгоритмы и так сделаны весьма универсальными и длинных конструкций выбора Если докВид="РасходнаяНакладная" Иначе... особо и не присутствует
31 romix
 
модератор
10.07.06
15:09
(22) Указатели обычно дают трудночитаемый код, в котором легко сделать критическую ошибку.
32 smaharbA
 
10.07.06
15:17
Вы чего асинхронности добиваетесь и параллельности ?
33 s22
 
10.07.06
15:20
(32) ну последние две в месте как показывает практика дают 10 рост производительности... и колво ошибо большее раз в 100
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.