powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / делегаты в языках программирования
129 сообщений из 129, показаны все 6 страниц
делегаты в языках программирования
    #39057844
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057847
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

где ты в С нашёл делегаты?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057852
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилDaniilSeryi,

где ты в С нашёл делегаты?
Указатель на функцию.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057854
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YesSqlУказатель на функцию.
никогда делегатом не назывался
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057857
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилDaniilSeryi,

где ты в С нашёл делегаты?Указатель на функцию. Нубы в ужасе от синтаксиса)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057858
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDaniilSeryi,

где ты в С нашёл делегаты?
Не в самом C, а в C-подобных. В C# делегаты есть, в Java тоже что-то похожее есть. Вот вопрос - на фига? Почитал в интернете - впечатление такое складывается - "есть класс, у класса есть методы. Нормальный человек вызывает метод класса напрямую, программист C# для вызова метода класса зачем-то использует делегат, который зачастую по размеру кода больше, чем весь класс."
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057860
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглИзопропилDaniilSeryi,

где ты в С нашёл делегаты?Указатель на функцию. Нубы в ужасе от синтаксиса)

Смотрю на синтаксис C# - так тошно, что хочется бл%€$ть. А тут ещё и делегаты какие-то...
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057864
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiВот вопрос - на фига?
чтоб вывести тебя из душевного равновесия
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057865
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiСмотрю на синтаксис C# - так тошно, что хочется бл%€$ть.
никто не запрещает
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057866
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiВ C# делегаты есть, в Java тоже что-то похожее есть
случайно не с лямбдами попутал?
они много где есть
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057942
Такой эффект отвращения может первое время вызывать переменная делегата , ссылающаяся на анонимный блок лямбда-выражения, тоже вначале блевал, потом понравилось!
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057946
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что такое делегат ?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057952
SashaMercuryа что такое делегат ?
https://ru.wikipedia.org/wiki/Делегат_(программирование)

авторДелегат (англ. delegate) — структура данных, указывающая на методы (статические или экземпляра класса) в .NET Framework[1][2][3][4].

Делегаты используются, в частности, для определения прототипа функции обратного вызова, например, в событийной модели .NET Framework.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057956
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем это нужно ?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39057960
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryА зачем это нужно ?

зачем нужны callback'и?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058010
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, какая реакция у ТСа будет на Хаскель, ну или на общую алгебру и матан.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058016
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryА зачем это нужно ?Например для вычисления определенного интеграла с заданной точностью.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058021
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSashaMercuryА зачем это нужно ?

зачем нужны callback'и?

Возможность передавать функции в качестве параметров других функций? Вы это имеете ввиду ?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИзопропилпропущено...


зачем нужны callback'и?

Возможность передавать функции в качестве параметров других функций? Вы это имеете ввиду ?Это называется фунции высших порядков. Да, это одно из наиболее важных применений делегатов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058027
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiПочитал в интернете - впечатление такое...Вам надо еще про замыкание и каррирование почитать. Только под чьим-нибудь присмотром :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058033
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASashaMercuryпропущено...


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

В математике это называется функционалами. Ну да ладно.
Зачем нужна возможность использования функции в качестве параметров других функций мне понятно, а делегаты это что ? Более общий случай. Только не отправляйте мне ссылку на w пожалуйста
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058083
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИнтересно, какая реакция у ТСа будет на Хаскель, ну или на общую алгебру и матан.

Кусок кода на Хаскеле можно? Если что - туалет рядом, добежать успею.
Что до общей алгебры и мат.анализа - по идее, должен быть иммунитет.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058085
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSashaMercuryА зачем это нужно ?

зачем нужны callback'и?

А зачем?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058093
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
Про Паскаль ты гонишь, ты на нем не рос, да и вообще программирование это не твое.
13. Процедурные типы
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058099
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi
Кусок кода на Хаскеле можно?
Можно, быстрая сортировка например.
Код: c#
1.
2.
 qsort []     = []
  qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058130
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВDaniilSeryiКусок кода на Хаскеле можно?
Можно, быстрая сортировка например.
Код: c#
1.
2.
 qsort []     = []
  qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)



какая гадость... Как это расшифровывается-то?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058137
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
deligate по Паскалю - это список обратных вызовов(Callback). Ключевое слово - список.
В Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив
Код: pascal
1.
2.
3.
Procedure DoFormCreate(Sender:TObject);
...
Form1.OnCreate:=DoFormCreate;


В C# подписаться на аналогичное событие может сразу несколько подписчиков. Причём выполнятся они будут последовательно.
Более того - в C# делигату можно сказать, что бы он выполнил список процедур асинхронно(.Invoke).
А в переводе на Паскаль это выглядело бы примерно так:
Код: pascal
1.
2.
3.
4.
5.
Procedure DoFormCreate(Sender:TObject);
Procedure DoFormCreate2(Sender:TObject);
...
Form1.OnCreate.Add(DoFormCreate);
Form1.OnCreate.Add(DoFormCreate2);


DaniilSeryiСмотрю на синтаксис C# - так тошно, что хочется бл%€$ть.

В принципе - ДА :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058143
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiКак это расшифровывается-то?
А это не нужно расшифровывать, это изложение алгоритма практически литературным языком, в том и прелесть.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058147
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЕвгенийВпропущено...

Можно, быстрая сортировка например.
Код: c#
1.
2.
 qsort []     = []
  qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)



какая гадость... Как это расшифровывается-то?
Че не понятного то?
1. Для пустого писка - результат пустой список.
2. Для не пустого, склеиваем рекурсивно отсортированные все элементы меньше головы + голова + все элементы рекурсивно отсортированные больше головы.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058149
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
deligate по Паскалю - это список обратных вызовов(Callback). Ключевое слово - список.
В Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив
Код: pascal
1.
2.
3.
Procedure DoFormCreate(Sender:TObject);
...
Form1.OnCreate:=DoFormCreate;


В C# подписаться на аналогичное событие может сразу несколько подписчиков. Причём выполнятся они будут последовательно.
Более того - в C# делигату можно сказать, что бы он выполнил список процедур асинхронно(.Invoke).
А в переводе на Паскаль это выглядело бы примерно так:
Код: pascal
1.
2.
3.
4.
5.
Procedure DoFormCreate(Sender:TObject);
Procedure DoFormCreate2(Sender:TObject);
...
Form1.OnCreate.Add(DoFormCreate);
Form1.OnCreate.Add(DoFormCreate2);


DaniilSeryiСмотрю на синтаксис C# - так тошно, что хочется бл%€$ть.

В принципе - ДА :)
Это называется: - "найди сто ошибок в моем посте?" :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058198
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryskyANAпропущено...
Это называется фунции высших порядков. Да, это одно из наиболее важных применений делегатов.

В математике это называется функционалами. Ну да ладно.
Зачем нужна возможность использования функции в качестве параметров других функций мне понятно, а делегаты это что ? Более общий случай. Только не отправляйте мне ссылку на w пожалуйстаИногда функции высшего порядка называют функционалами, хотя это не совсем верно, более точный эквивалент - оператор.

Делегат задает определение функционального типа (класса) данных. Экземплярами класса являются функции. Описание делегата в языке C# представляет собой описание еще одного частного случая класса. Каждый делегат описывает множество функций с заданной сигнатурой. Каждая функция (метод), сигнатура которого совпадает с сигнатурой делегата, может рассматриваться как экземпляр класса, заданного делегатом.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058216
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
Все богатство LINQ и лямбда в C# в одной фразе ))
new Control[]{textbox1,button1,button2,button3}.ToList().ForEach(x=>x.Enabled = false);
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058230
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxВсе богатство LINQ и лямбда в C# в одной фразе ))
new Control[]{textbox1,button1,button2,button3}.ToList().ForEach(x=>x.Enabled = false);Г какое-то :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058244
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
skyANAГ какое-то :)

Не без этого ;) Не все же стандартные библиотеки дублировать ;)
Ну а серьезно, в C# много классов и функций используют делегаты. Это реально удобно.
Пока не привыкнешь, конечно реакция похожая.
Но тут уж :
"Вы не любите кошек? Вы просто не умеете их готовить!" (с)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058396
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делегаты в C# представляют собой экземпляры специального класса, который содержит в себе информацию о некотором методе и позволяет вызвать этот метод. Если быть точнее, то в общем случае на цепочку методов с определенной сигнатурой (см. Delegate и MulticastDelegate).
Компилятор знает о делегатах и предоставляет синтаксический сахар, так как механизм делегатов задействован в некоторых конструкциях языка.
1. Реализация событий.
2. Реализация функций обратного вызова, в том числе при работе с неуправляемым кодом.
3. Реализация запуска новых потоков (один из вариантов, исторически первый).
4. Асинхронный запуск функций посредством предопределенных методов Begin/EndInvoke.
5. Реализация лямбда выражений.
6. Делегаты могут быть обобщенными.
7. Начиная с 4.0 версии .NET, параметры обобщенных делегатов могут быть ко/контрвариантными.
8. Так же делегаты могут выступать параметрами и возвращаемыми значениями функций.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058398
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель".
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058410
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИ начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель".
никакой связи
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058411
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryskyANAпропущено...
Это называется фунции высших порядков. Да, это одно из наиболее важных применений делегатов.

В математике это называется функционалами. Ну да ладно.
Зачем нужна возможность использования функции в качестве параметров других функций мне понятно, а делегаты это что ? Более общий случай. Только не отправляйте мне ссылку на w пожалуйстаУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058412
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель".
Чушь. Просто в .NET лямбды реализуются посредством делегатов, которые в очередь можно назвать с некоторой натяжкой типизированным указателем на функцию.
в lisp или haskel отродясь никаких указателей не было, как и в JavaScript например.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058421
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта.
Приспокойно можно сделать так.
Код: c#
1.
 Func<double, double> sin = x => Math.Sin(x);


Где тут экземпляр?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058425
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наброшу...

Многие из функций операционной системы Windows, входящие в состав Win API 32, требуют при своем вызове задания callback - функций. Примером может служить работа с объектом операционной системы Timer. Конструктор этого объекта является функцией высшего порядка, и ей в момент создания объекта необходимо в качестве параметра передать callback - функцию, вызываемую для обработки событий, которые поступают от таймера.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058431
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЧушь. Просто в .NET лямбды реализуются посредством делегатов,
Насколько я помню, делегаты в .NET появились прежде лямбд.

ЕвгенийВв lisp или haskel отродясь никаких указателей не было,
Делегатов в lisp тоже отродясь не было. Может, конечно, сейчас и добавили.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058438
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так лисповая лямбда и не делегат, она контекст захватывает. Если подыскивать аналог, это скорее анонимный класс с полями данных и одним методом.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058439
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BВ Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив
Form1.OnCreate:=DoFormCreate;

Насколько я помню, в восьмой что ли дельфе (которую делали для .NET) добавили множественную подписку. Но поскольку вещь малоактуальная, развития она не получила.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058444
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolf, так я и намекаю Евгению, что он в своей риторике несколько увлёкся и побежал в сторону от делегатов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058454
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВBarloneУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта.
Приспокойно можно сделать так.
Код: c#
1.
 Func<double, double> sin = x => Math.Sin(x);


Где тут экземпляр?Ну хорошо. Делегат может ссылаться на метод экземпляра объекта, а может и на статический или анонимный метод. Ок?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058491
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone,
А может и как сферический конь в вакууме.
Код: c#
1.
2.
Expression<Func<string, int>> exp = s => s.Length;
            var func = exp.Compile();
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058639
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё наброшу...

Пусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G , задающую параметр (а иногда и саму функцию F ), называют функцией обратного вызова ( callback функцией).
Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F , то предварительно во внешнем слое следует позаботиться о создании функции G , которая и будет передана F .
Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт.
Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова,
принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру".
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058660
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058947
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЕщё наброшу...

Пусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G , задающую параметр (а иногда и саму функцию F ), называют функцией обратного вызова ( callback функцией).
Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F , то предварительно во внешнем слое следует позаботиться о создании функции G , которая и будет передана F .
Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт.
Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова,
принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру".

Это в целом понятно, спасибо. Не могли бы вы привести пример, на котором было бы видно чёткую разницу между слоями, пожалуйста
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058967
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, выше пример про таймер не канает?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058971
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, я плохо понял тот пример.
Можно ли привести пример на уровне программного кода, где будет чётко видно разницу между так называемыми "слоями"? Ваше объяснение хорошее, но я представлял это на уровне того, что некоторая функция высшего порядка принимает другие функции, например, функция бинарного поиска может принимать различные функции сравнения элементов(искать по длине строки, либо сравнивать лексикографически). Вы привели хорошее объяснение на русском языке почему возможные функции параметры называются функциями обратного вызова, и в данном объяснении присутствуют так называемые "уровни", потому мне не очень понятно как это работает на практике.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058975
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryнапример, функция бинарного поиска может принимать различные функции сравнения элементов(искать по длине строки, либо сравнивать лексикографически)это не про callback, это про "вычисление интеграла" :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058980
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал).
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058983
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал).

Но если все эти функции определены (полностью описан алгоритм данных конкретных функций) в одной единице трансляции, то все эти функции будут находиться в одной глобальной области видимости. Разве не так ? Тогда о каких слоях идёт речь ? О том что вызов функции идёт через параметр в теле функции высшего порядка с локальной областью видимости ? В этом дело ?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39058984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут неплохой пример
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059002
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryskyANAХотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал).

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

Давайте рассмотрим очевидную альтернативу в ОО стиле: наследование и полиморфизм. В этом случае функции определяются как переопределение методов базового класса.
Но разве наследники обязаны быть в одной области видимости?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059026
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, подождите, мы ведь не закончили с предыдущим примером.

одна функция будет сравнивать длины строк, а другая сравнивать строки лексикографически. Здесь разные "уровни" о которых вы говорите в том смысле, что описание strcmp находится в string.cpp, а это другая область видимости. Правильно ли я вас понял ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <string.h>


int cmp1(const char* s1, const char* s2)
{
	return strlen(s1) - strlen(s2);
}

//может быть будет использована cmp1,а может быть strcmp
int smth_func(int smth, const char* smth_else, int(*cmp_func)(const char* s1, const char* s2))
{

}
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059050
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, я нигде не писал, что функции сравнения должны быть собраны именно в одном месте, если Вы об этом.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059062
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASashaMercury, я нигде не писал, что функции сравнения должны быть собраны именно в одном месте...

Вот. В том то и дело что вы говорите о некоторых разных слоях

skyANAПусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G, задающую параметр (а иногда и саму функцию F), называют функцией обратного вызова (callback функцией).
Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F, то предварительно во внешнем слое следует позаботиться о создании функции G, которая и будет передана F.
Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт.
Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова,
принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру".
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059134
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Архитектурные слои имелись в виду. Пользовательский код, вызывающий SetTimer, и библиотека WinAPI, этот таймер реализующая.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059182
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа что такое делегат ?
список указателей на функции.

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

есть тип делегат,
есть поле класса либо переменная описанная типом делегат (это собственно и есть список),
есть метод, указатель на который добавляется либо убирается из переменной типа делегат (из списка)

апд
в сишарпе.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059186
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки,
а не с функций высших порядков.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059197
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример по передаче функции

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
using System;

namespace Lesson_5_Delegate_E2_BubbleSorter
{
    class Program
    {

        public delegate Boolean Comparer(Object elem1, Object elem2);

        static class BubbleSorter
        {
            static public void Sort(Object[] array, Comparer comparer)   //// <- функция которая сортирует
            {
                for (Int32 i = 0; i < array.Length; i++)
                    for (Int32 j = i + 1; j < array.Length; j++)
                        if (comparer(array[j], array[i]))   /// <-   вызов передаваемой функции
                        {
                            Object buffer = array[i];
                            array[i] = array[j];
                            array[j] = buffer;
                        }
            }
        }

        public struct Person
        {
            public String FirstName;
            public String LastName;
            public DateTime Birthday;

            public Person(String firstName, String lastName, DateTime birthday)
            {
                this.FirstName = firstName;
                this.LastName = lastName;
                this.Birthday = birthday;
            }

            public override String ToString()
            {
                return String.Format(
                    "Имя: {0,-10} Фамилия: {1,-10} Дата рождения: {2:d}.",
                    FirstName, LastName, Birthday);
            }
        }

        static public Boolean PersonBirthdayComparer(Object person1, Object person2)// сравнение по дате рождения
        {
            return ((Person)person1).Birthday < ((Person)person2).Birthday;
        }

        static public Boolean PersonFirstComparer(Object person1, Object person2)// ------------- сравнение по имени
        {
            return string.Compare(((Person)person1).FirstName, ((Person)person2).FirstName)> 0;
        }


        static void Main(string[] args)
        {
            Person p0 = new Person("Максим", "Орлов", new DateTime(1989, 5, 12));
            Person p1 = new Person("Иван", "Иванов", new DateTime(1985, 7, 21));
            Person p2 = new Person("Петр", "Петров", new DateTime(1991, 3, 1));
            Person p3 = new Person("Федор", "Федоров", new DateTime(1971, 11, 25));
            Person p4 = new Person("Павел", "Козлов", new DateTime(1966, 8, 6));

            Object[] persons = { p0, p1, p2, p3, p4};

            Console.WriteLine("\nНесортированный список:");
            foreach (Object person in persons) Console.WriteLine(person);

            Console.WriteLine("\nСортированный список:");
            BubbleSorter.Sort(persons, new Comparer(PersonBirthdayComparer));///< ------------------сортировка  по дню рождения

            foreach (Object person in persons) Console.WriteLine(person);

            Console.WriteLine("\n");
            Console.WriteLine("\nСортированный список2:");
            BubbleSorter.Sort(persons, new Comparer(PersonFirstComparer));  ///<------------- сортировка  по имени

            foreach (Object person in persons) Console.WriteLine(person);

        }
    }
}
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059202
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки,
Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059205
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?
Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель".

я бы попросил не катить бочку на Люка Карделли
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059211
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarertchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки,
Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл.

Ага. а кому сейчас легко?
Лично я думаю, затем, чтобы разработчики сишарпа смогли отчитаться перед менеджером проекта
что в языке сишарп нет указателей на функцию.
Их (разработчиков) на работу наняли и сказали избавится от указателей (деструкторов) - они избавились
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059214
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarertchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки,
Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл.
прибилизительно также тяжело как ответить на вопрос зачем слово тарелька пишется без
мягкого знака, а слово сол с мягким знаком?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059331
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
ЕвгенийВПриспокойно можно сделать так.
Код: c#
1.
 Func<double, double> sin = x => Math.Sin(x);


Где тут экземпляр?

Т.е. как это где? А sin - не экземпляр?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059347
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты?

В C и даже в С++ нет делегатов, делегаты придумали в C#, и только там они используются и называются таким образом.

Если ты вырос на Pascale, QBasice и VBA, то ты УЖЕ ТОЛЬКО ПОЭТОМУ НЕНОРМАЛЬНЫЙ человек (точнее, человек-то ты наверняка нормальный, но программист -- нет), поэтому объяснять тебе, зачем нужны делегаты, в общем, бессмысленно.

Но если хочешь -- изволь. В конце концов, надежда всегда есть.
Делегаты нужны для того, чтобы функции (т.е. код) в языке стали первоклассными объектами. Это -- термин.
Означает, что с фукнциями можно поступать так же, как и с другими объектами языка. Класть их в структуры данных,
передавать как параметры, распечатывать и т.п. -- всё, что можно делать с другими объектами языка. Т.е. функции
будут данными, код -- это данные.

Далее последует вопрос, ЗАЧЕМ это нужно. Логично, отвечаю -- чтобы иметь возможность в языке реализовать
алгоритмы высших порядков или функции высших порядков (взаимозаменяемые термины).

Зачем нужны функции высших порядков ?
Очень просто -- они очень сильно повышают мощность и выразительность языка.
Т.е. за меньшее время и меньшими усилиями ты можешь на языке сделать больше.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059351
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа что такое делегат ?

По сути -- указатель на функцию, возможно с дополненный какими-то дополнительными данными, передаваемыми при вызове фукнции.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059355
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС похоже слился уже из топика...А я то...
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059432
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059436
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfЭто с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами?

Всегда были.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059438
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivRWolfЭто с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами?

Всегда были.

Не, если там начали с Синлера и его бейсика -- нормально!
Но кто учит паскаль и влюбляется в него -- 100% ничего путного из них не выходит, если они не переходят на программирование в СУБД.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059439
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Тогда нужно объявлять ненормальными большинство программистов страны, т.к. бейсик преподают в школах, а паскаль - в вузах.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059442
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, ты наверно 1С-ников не встречал, которые кроме 1С ни на чем не писали
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059443
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНо кто учит паскаль и влюбляется в него -- 100% ничего путного из них не выходит, если они не переходят на программирование в СУБД.
В собственно паскале нет ничего плохого - такой же язык, как другие. Я не про паскаль времён Вирта, конечно.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059444
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfТогда нужно объявлять ненормальными большинство программистов страны,
Это, кстати, не слишком далеко от истины. Хотя и никак не связано с детскими комплексами коллеги Мастера.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059453
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ещё здесь и внимательно всё читаю. :-)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059577
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMasterZiv, ты наверно 1С-ников не встречал, которые кроме 1С ни на чем не писали

Встречал. Ты предлагаешь их программистами называть ?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059578
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfMasterZivНо кто учит паскаль и влюбляется в него -- 100% ничего путного из них не выходит, если они не переходят на программирование в СУБД.
В собственно паскале нет ничего плохого - такой же язык, как другие. Я не про паскаль времён Вирта, конечно.

А другого нет, если ты знаешь, конечно.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059580
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerRWolfТогда нужно объявлять ненормальными большинство программистов страны,
Это, кстати, не слишком далеко от истины. Хотя и никак не связано с детскими комплексами коллеги Мастера.

Я, кстати, очень хорошо понимаю, почему ты это написал :-)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059581
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, предлагаю вернуться непосредственно к теме обсуждения.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059650
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА другого нет, если ты знаешь, конечно.
Сейчас используется только Object Pascal и его реализации Delphi и FreePascal. Виртовский паскаль лично я последний раз наблюдал в 90-х на спектруме.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059722
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИнтересно, какая реакция у ТСа будет на Хаскель, ну или на общую алгебру и матан.

Во-во. А зачем функции высшего порядка, замыкания и lexical scope ?
Нахрен. Дожмём всё циклами forEach, и пусть компилятор умрёт. Они же PhD а мы простые юзеры их либ.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059748
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Carrying:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
// A raw value, represented as a function
var value = function(val){
  return function(){
    return val;
  }
}

// A function to add two functions together
var add = function(x, y){
  return function(){
   return x() + y();
  }
}

// A function to subtract one function from another
var subtract = function(x, y){
  return function(){
    return x() - y();
  }
}

// A function to multiply two functions
var multiply = function(x, y){
  return function(){
    return x() * y();
  }
}
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059755
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.Vatagin и пусть компилятор умрёт
Да и хрен с ним, его проблемы. Ассемблер все равно не знает ни об объектах, ни о высших порядках. После компиляции все на уровне if/goto.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059774
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот пример из реальной жизни. локализация
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
const translations = {
  en: {
      en: 'English',
      ru: 'Russian',
      MESSAGE: 'Message'
...
  ru: {MESSAGE: 'Сообщение'}
}
export default function (langKey) {
  return function(str) {
    return translations[langKey][str] || str;
  };
};


И потом где угодно в коде
Код: javascript
1.
2.
3.
4.
    
import i18nWrapper from '../translations';
var l8n = i18nWrapper(this.state.langKey);
l8n('MESSAGE')
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059826
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
запостить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Author Manu S&#225;nchez (Manu343726). Aug 2014

// Everything started from this:
// http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
// Now, play with C++14!

#include <utility>
#include <iostream>

auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };

auto map = [](auto... args) {
  return [=](auto f) { return tuple(f(args)...); };
};

auto cat_raw = [](auto... largs) {
  return [=](auto... rargs) { return tuple(largs..., rargs...); };
};

auto rcat = [](auto... largs) {
  return [=](auto rhs) { return rhs(cat_raw)(largs...); };
};

auto print_tuple = [](auto t) {
  return t(map)([](auto e) {
    std::cout << e << " ";
    return e;
  });
};

int main() {
  auto t = tuple(5u, 6, 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

  print_tuple(t);
}

...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059837
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wst,
Класс!!!
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059842
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ТС нам ответит что-нибудь?
А то как-то я вижу его как чел-ка непонимающего зачем x,y,z
а он молчит.
Но мб это так принято здесь на sql.ru.
не обессудьте, думал, если спросил, - хочешь услышать ответ...
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059858
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RWolfЭто с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами?Не надо передергивать.
Начавшие с легопаскаля, это одно.
Играющие в лего всю жизнь, это другое.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059862
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstРаз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
наконец то :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059868
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfMasterZivА другого нет, если ты знаешь, конечно.
Сейчас используется только Object Pascal и его реализации Delphi и FreePascal. Виртовский паскаль лично я последний раз наблюдал в 90-х на спектруме.

Правильно, но это -- другие языки.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059950
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059965
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarertchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки,
Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл.C "простыми указателями на функцию" иногда возникают такие вопросы: http://www.sql.ru/forum/1032828/hochu-izbavitsya-ot-globalnoy-peremennoy
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39059991
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneC "простыми указателями на функцию" иногда возникают такие вопросы: http://www.sql.ru/forum/1032828/hochu-izbavitsya-ot-globalnoy-peremennoy
Я вижу две разные возможности понять Вашу фразу: то ли Вы имеете в виду "с указателями на standalone функции в отличие от указателей на методы", то ли "с указателями на функции в отличие от делегатов".

Если Вы про первое - то, во-первых, замечу, что я имел в виду "указатели на функции, в том числе на методы", а во-вторых, такие вопросы возникают от плохого владения инструментом. Если же Вы про второе - не понимаю, как делегаты, будь они в его распоряжении, смогли бы ему помочь.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060008
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в реализациях алголоподобных языков - указатель на вложенную функцию -обычно - это пара указателей -
один на собственно исполняемый код, второй - указатель на дисплей(массив указателей на области активации)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060079
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060115
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstРаз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
запостить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Author Manu S&#225;nchez (Manu343726). Aug 2014

// Everything started from this:
// http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
// Now, play with C++14!

#include <utility>
#include <iostream>

auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };

auto map = [](auto... args) {
  return [=](auto f) { return tuple(f(args)...); };
};

auto cat_raw = [](auto... largs) {
  return [=](auto... rargs) { return tuple(largs..., rargs...); };
};

auto rcat = [](auto... largs) {
  return [=](auto rhs) { return rhs(cat_raw)(largs...); };
};

auto print_tuple = [](auto t) {
  return t(map)([](auto e) {
    std::cout << e << " ";
    return e;
  });
};

int main() {
  auto t = tuple(5u, 6, 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

  print_tuple(t);
}


В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060129
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВwstРаз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
запостить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Author Manu S&#225;nchez (Manu343726). Aug 2014

// Everything started from this:
// http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
// Now, play with C++14!

#include <utility>
#include <iostream>

auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };

auto map = [](auto... args) {
  return [=](auto f) { return tuple(f(args)...); };
};

auto cat_raw = [](auto... largs) {
  return [=](auto... rargs) { return tuple(largs..., rargs...); };
};

auto rcat = [](auto... largs) {
  return [=](auto rhs) { return rhs(cat_raw)(largs...); };
};

auto print_tuple = [](auto t) {
  return t(map)([](auto e) {
    std::cout << e << " ";
    return e;
  });
};

int main() {
  auto t = tuple(5u, 6, 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

  print_tuple(t);
}


В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060140
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsm
будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };


Это ответ на первый или на второй вопрос?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060168
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае для "объекта произвольного класса" все упрется в строчку
Код: plaintext
1.
std::cout << e << " ";

Собственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060178
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst
Собственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
Соответственно произвольный кортеж в tuple мы не сможем передать? :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060189
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "произвольный кортеж" и откуда он возьмется? Хотелось бы увидеть пример кода.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060192
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВwstСобственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
Соответственно произвольный кортеж в tuple мы не сможем передать? :)напиши для своего пользовательского типа оператор вывода в поток - и передавай :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060212
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВdrsmбудет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };


Это ответ на первый или на второй вопрос?
на оба
http://ideone.com/F2cHt5
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060297
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstЧто такое "произвольный кортеж" и откуда он возьмется? Хотелось бы увидеть пример кода.
кортеж
std::tuple.
Призвольный я не подсуну, должен явно в коде прописать вызов tuple(....) и компилятор на этапе компиляции должен все это развернуть...
drsmЕвгенийВпропущено...

Это ответ на первый или на второй вопрос?
на оба
http://ideone.com/F2cHt5
С оператором вывода в поток понятно. Отсутствие такого вызовет ошибку компиляции?
В .NET например все объекты наследуются от одного и у всех есть метод ToString().
В С++ никто не обязывает класс иметь operator const char*().
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060335
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВ tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

ЕвгенийВПризвольный я не подсуну, должен явно в коде прописать вызов tuple(....) и компилятор на этапе компиляции должен все это развернуть...

Кто-то явно запутался в показаниях.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060393
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВС оператором вывода в поток понятно. Отсутствие такого вызовет ошибку компиляции?конечно, в этом и смысл. Зачем пытаться распечатать то, что распечатать нельзя?
ЕвгенийВВ С++ никто не обязывает класс иметь operator const char*().более того, рекомендуется его не иметь )))
а иметь оператор << если надо класс выводить в поток.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060407
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst
Кто-то явно запутался в показаниях.
Я отвечаю сам себе.
Что бы было можно, язык должен поддерживать Параметрический полиморфизм высших порядков .
Его к сожалению нет даже в F#, но к моему удивлению есть в scala.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060447
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsmЕвгенийВпропущено...

В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };



я намекал на то, что захват аргументов в возвращаемой лямбде происходит по значению [=], те класс уже не произвольный
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060476
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsmя намекал на то, что захват аргументов в возвращаемой лямбде происходит по значению [=], те класс уже не произвольный
Да уж плюсы однако, даже замыкания надо описывать)))
Бедные разработчики компиляторов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060504
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВБедные разработчики компиляторов.
им то глубоко фиолетово
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060514
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилим то глубоко фиолетово
Почему? Ведь много больше работы.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060541
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИзопропилим то глубоко фиолетово
Почему? Ведь много больше работы.
это кажется.

лямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060568
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разработчики стандарта с++ снисходят к страданиям разработчиков компиляторов только если те годами отказываются пилить какую-то фичу (export template ftw).
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060622
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstРазработчики стандарта с++ снисходят к страданиям разработчиков компиляторов только если те годами отказываются пилить какую-то фичу (export template ftw).
Толи дело Хейсберг! Сам придумал, сам запилил :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060659
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропиллямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает

Все языки высокого уровня -- синтаксический сахар. ПИШИТЕ НА АсСЕМБЛЕРАХ !
(но почему-то никто не пишет).
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060661
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Испортят ведь. Расколят сообщество С++ еще на несколько лагерей.
Будет консервативное крыло. И приверженцы кортежей и прочих adhoc
и параметрических полиморфизмов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060680
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonИспортят ведь. Расколят сообщество С++ еще на несколько лагерей.
Будет консервативное крыло. И приверженцы кортежей и прочих adhoc
и параметрических полиморфизмов.
Я только не понимаю. Разве вопрос был именно про C++. Я, например, вообще приводил примеры на javascript.
Но можно на Scala, Haskell, Ruby, Python, Erlang etc
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060687
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини. Топик живёт своей жизнью. Разумеется мой камент относится исходникам wst.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060716
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivИзопропиллямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает

Все языки высокого уровня -- синтаксический сахар. ПИШИТЕ НА АсСЕМБЛЕРАХ !
(но почему-то никто не пишет).
я к тому, что реализация лямбд в с++ не требует от создателей компиляторов особых усилий
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060793
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, сегодня прочитал, в целом то о чём я и думал. Читаю сейчас ещё одну статью , думаю некоторым будет интересно
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060816
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВсем спасибо, сегодня прочитал, в целом то о чём я и думал. Читаю сейчас ещё одну статью , думаю некоторым будет интересноЕщё бы ссылка открывалась.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060900
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASashaMercuryВсем спасибо, сегодня прочитал, в целом то о чём я и думал. Читаю сейчас ещё одну статью , думаю некоторым будет интересноЕщё бы ссылка открывалась.

прошу прощение.
Вот весь список .Название Higher Order Functions Necessary for Spatial Theory Development
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39061816
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryskyANAпропущено...
Ещё бы ссылка открывалась.

прошу прощение.
Вот весь список .Название Higher Order Functions Necessary for Spatial Theory DevelopmentВы издеваетесь? :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39062242
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, нет. Та ссылка была доступна, но судя по всему не должна была быть, и её прикрыли. У меня есть загруженный файл, но не на этом компьютере, я его позже попробую отправить. Можно попробовать поискать в сети по запросу "Higher Order Functions Necessary for Spatial Theory Development"
...
Рейтинг: 0 / 0
129 сообщений из 129, показаны все 6 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / делегаты в языках программирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]