|
|
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercury, выше пример про таймер не канает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 05:36 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANA, я плохо понял тот пример. Можно ли привести пример на уровне программного кода, где будет чётко видно разницу между так называемыми "слоями"? Ваше объяснение хорошее, но я представлял это на уровне того, что некоторая функция высшего порядка принимает другие функции, например, функция бинарного поиска может принимать различные функции сравнения элементов(искать по длине строки, либо сравнивать лексикографически). Вы привели хорошее объяснение на русском языке почему возможные функции параметры называются функциями обратного вызова, и в данном объяснении присутствуют так называемые "уровни", потому мне не очень понятно как это работает на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 06:11 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryнапример, функция бинарного поиска может принимать различные функции сравнения элементов(искать по длине строки, либо сравнивать лексикографически)это не про callback, это про "вычисление интеграла" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 06:28 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Хотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 06:42 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANAХотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал). Но если все эти функции определены (полностью описан алгоритм данных конкретных функций) в одной единице трансляции, то все эти функции будут находиться в одной глобальной области видимости. Разве не так ? Тогда о каких слоях идёт речь ? О том что вызов функции идёт через параметр в теле функции высшего порядка с локальной областью видимости ? В этом дело ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 06:47 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Тут неплохой пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 06:48 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryskyANAХотя можно считать функцию бинарного поиска и функцию вычисления интеграла внутренним слоем (базовый функционал), а то, где определены функции сравнения и подынтегральные функции, внешними слоями (расширяющий функционал). Но если все эти функции определены (полностью описан алгоритм данных конкретных функций) в одной единице трансляции, то все эти функции будут находиться в одной глобальной области видимости. Разве не так ?С чего вдруг? Давайте рассмотрим очевидную альтернативу в ОО стиле: наследование и полиморфизм. В этом случае функции определяются как переопределение методов базового класса. Но разве наследники обязаны быть в одной области видимости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 08:09 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANA, подождите, мы ведь не закончили с предыдущим примером. одна функция будет сравнивать длины строк, а другая сравнивать строки лексикографически. Здесь разные "уровни" о которых вы говорите в том смысле, что описание strcmp находится в string.cpp, а это другая область видимости. Правильно ли я вас понял ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 08:45 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercury, я нигде не писал, что функции сравнения должны быть собраны именно в одном месте, если Вы об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 09:01 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANASashaMercury, я нигде не писал, что функции сравнения должны быть собраны именно в одном месте... Вот. В том то и дело что вы говорите о некоторых разных слоях skyANAПусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G, задающую параметр (а иногда и саму функцию F), называют функцией обратного вызова (callback функцией). Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F, то предварительно во внешнем слое следует позаботиться о создании функции G, которая и будет передана F. Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт. Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова, принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 09:10 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Архитектурные слои имелись в виду. Пользовательский код, вызывающий SetTimer, и библиотека WinAPI, этот таймер реализующая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 10:15 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа что такое делегат ? список указателей на функции. одно из применений - для подсовывания разных обработчиков к событиям есть тип делегат, есть поле класса либо переменная описанная типом делегат (это собственно и есть список), есть метод, указатель на который добавляется либо убирается из переменной типа делегат (из списка) апд в сишарпе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 10:56 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
начинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки, а не с функций высших порядков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:01 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
пример по передаче функции Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:07 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
tchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки, Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:10 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
softwarerDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель". я бы попросил не катить бочку на Люка Карделли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:11 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
softwarertchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки, Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл. Ага. а кому сейчас легко? Лично я думаю, затем, чтобы разработчики сишарпа смогли отчитаться перед менеджером проекта что в языке сишарп нет указателей на функцию. Их (разработчиков) на работу наняли и сказали избавится от указателей (деструкторов) - они избавились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:13 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
softwarertchingizначинать понимать, как использовать, имхо, лучше с обработчиков нажатия на кнопки, Там очень трудно ответить на вопрос "нафига всё это уродство вместо простого указателя на функцию". Да и слово callback, которое любят употреблять, окончательно теряет смысл. прибилизительно также тяжело как ответить на вопрос зачем слово тарелька пишется без мягкого знака, а слово сол с мягким знаком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 11:15 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВПриспокойно можно сделать так. Код: c# 1. Где тут экземпляр? Т.е. как это где? А sin - не экземпляр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 12:36 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? В C и даже в С++ нет делегатов, делегаты придумали в C#, и только там они используются и называются таким образом. Если ты вырос на Pascale, QBasice и VBA, то ты УЖЕ ТОЛЬКО ПОЭТОМУ НЕНОРМАЛЬНЫЙ человек (точнее, человек-то ты наверняка нормальный, но программист -- нет), поэтому объяснять тебе, зачем нужны делегаты, в общем, бессмысленно. Но если хочешь -- изволь. В конце концов, надежда всегда есть. Делегаты нужны для того, чтобы функции (т.е. код) в языке стали первоклассными объектами. Это -- термин. Означает, что с фукнциями можно поступать так же, как и с другими объектами языка. Класть их в структуры данных, передавать как параметры, распечатывать и т.п. -- всё, что можно делать с другими объектами языка. Т.е. функции будут данными, код -- это данные. Далее последует вопрос, ЗАЧЕМ это нужно. Логично, отвечаю -- чтобы иметь возможность в языке реализовать алгоритмы высших порядков или функции высших порядков (взаимозаменяемые термины). Зачем нужны функции высших порядков ? Очень просто -- они очень сильно повышают мощность и выразительность языка. Т.е. за меньшее время и меньшими усилиями ты можешь на языке сделать больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 12:43 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа что такое делегат ? По сути -- указатель на функцию, возможно с дополненный какими-то дополнительными данными, передаваемыми при вызове фукнции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 12:45 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
ТС похоже слился уже из топика...А я то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 12:47 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Это с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 13:52 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
RWolfЭто с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами? Всегда были. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 13:54 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
MasterZivRWolfЭто с каких же пор начавшие с бейсика/паскаля перестали быть нормальными программистами? Всегда были. Не, если там начали с Синлера и его бейсика -- нормально! Но кто учит паскаль и влюбляется в него -- 100% ничего путного из них не выходит, если они не переходят на программирование в СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39059211&tid=1340921]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 463ms |

| 0 / 0 |
