|
|
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Уважаемые, delphi-гуру Кто-нибудь использует Анонимные методы ? Поделитесь опытом, какие у них преимущества в сравнении с процедурными типами? Вот, например: Анонимные методы можно объявлять, прямо в месте использования. Но, неужели кто-то этим пользуется? Код: pascal 1. 2. 3. 4. 5. 6. 7. А какую еще выгоду дают Анонимные методы ? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 01:23 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Простой пример: Код: pascal 1. 2. 3. 4. Это проще и наглядней чем городить отдельную фунцию для сортировки в другом месте кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 01:35 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Еще пример - можно с минимальными усилиями выполнять асинхронные задачи: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 08:39 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
>> Это проще и наглядней rgreat, asutp2, спасибо, что откликнулись. Про наглядность ..., любой дотошный читатель :-) обратит внимание, что Ваши примеры(как и примеры в официальном Help) выглядят наглядно, если это функция из одной короткой строки . Ну, хорошо. А какую еще выгоду дают Анонимные методы, в сравнении с процедурными типами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 08:46 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Классический вариант такой: Код: pascal 1. 2. 3. 4. 5. А так стало наглядней ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. rgreat, asutp2, заранее извините, я специально чучь-чуть "провоцирую", но честно хочу осознать эту "наглядность" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 08:54 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Судя по инфе от сотрудников самой Аброкадабры, практически не используются. Причина очевидна, выглядят они хорошо только для предельно короткого кода. Дополняется наличием вложенных функций, позволяющих внятно оформить код тут же рядом. А если люди что-то используют очень редко, то они будут забывать о самой наличии возможности, даже если иногда она работает. Так-то ведь даже у Label есть одно применение, где оно радикально уменьшает число строк кода, - мгновенный выход из вложенных циклов. Но я не думаю, что люди помнят об этом. Среди меня, например, практически не получила распространения конструкция for each, хотя при использовании с датасетами она исключает частую ошибку с забыванием Next. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:02 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, обрати внимание - в моем случае используется вызов метода SendSms. Он больше, чем одна строчка кода :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:12 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, у себя постоянно распараллеливание вычислений: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Так же удобно использовать при обустройстве слоёв приложения. Когда нужно развязать какие-то модули между собой. Пример кину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:22 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1stПро наглядность ... Pascal-style и наглядность не совместимы.. Вот если бы они ввели маркер => как это делается в других языках.. Код: pascal 1. Код: pascal 1. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:28 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Пример. Заполнение списка в гуе из библиотеки. Библиотека не должна ничего знать про верхние слои (например - гуй) но должна быть способна с ними работать. Часть кода библиотеки: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Гуй: Код: pascal 1. 2. 3. 4. 5. 6. 7. Анонимный тип: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:30 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
X-Cite, и что здесь что? я до сих пор в этих птичьих знаках без понятия :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:31 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
X-Cite, "()" это процедура или функция? она может что-то вернуть? судя по плюсам это скорее функция. как такую функцию(процедуру?) описать и передать куда-то? ну это первое, что вот сразу вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:47 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Поиск при помощи анонимной функции: Само тело поиска: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Дальше, в зависимости от надобности, вызываем поиск с разными компараторами: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Можно без дополнительных ссылок, можно как у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:53 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
В чем выразилась анонимность типа TNotifyStrReferProc? Это просто расширенный функционал процедурных типов, когда вызываемый метод лениво нормально описывать. И да, выглядит омерзительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 09:59 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1stА какую еще выгоду дают Анонимные методы ? Самое главное - это захват контекста (читай про замыкания). Можно местное почитать отсюда 17814553 , и дальше, сколько осилишь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:03 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Beltar, не там смотришь. анонимность не в TNotifyStrReferProc, а в переданной ему функции. выглядит отлично, использовать очень удобно. контекст захватывается, модули развязаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:10 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Онанимные методы на самом деле процедуры... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:15 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Анонимные процедуры хорошо ложатся на паттерны Strategy/Visitor. Выгода здесь в том, что они избавляют от необходимости делать новый класс, придумывать ему имя, создавать экземпляр этого класса, следить за его временем жизни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:18 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
К слову - кому интересны паттерны в Delphi, можно глянуть свежую книгу Primož Gabrijelčič'а "Hands-On Design Patterns with Delphi" Build applications using idiomatic, extensible, and concurrent design patterns in Delphi. Ищите в интернетах, либо заходите в телеграмм-канал, там можно скачать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:28 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
makhaonArtem.1st, у себя постоянно (1) распараллеливание вычислений: Так же удобно использовать при (2) обустройстве слоёв приложения. Когда нужно (3) развязать какие-то модули между собой. makhaon , спасибо что ответили. см. 1, 2, 3, Вы пишите о серьезных прикладных задачах. Это то, что меня интересует. Вопрос: Зачем в серьезных задачах, Вы пользуетесь не обычным Процедурным типом, а новым Анонимным методом? Вот обычный вариант. Процедурный Тип: Код: pascal 1. 2. 3. 4. 5. 6. Вот новый вариант. Анонимный Метод. Это стало "наглядней" ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Я искренне подозреваю, что у Анонимных Методов должно быть еще другое преимущество , т.к. их "наглядность" очень сомнительна... Так что это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:32 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, преимущество сказали: захват контекста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:34 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, авторВот обычный вариант. Процедурный Тип: в обычном варианте нет доступа к экземпляру класса, это только локальная процедура. в анонимном же варианте (как у меня все) есть доступ к экземпляру класса (к селфу), откуда идёт вызов: EnsureSliceOpened - это метод класса, а не просто какая-то локальная процедура SpTBXComboBox1.AddItem - это метод конкретного комбобокса, который в данный момент заполняем. В компораторах доступны FSearchStr и NodeData, к которым в случае вызова обычной процедуры было бы сложнее достучаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:40 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:48 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:52 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyСамое главное - это захват контекста (читай про замыкания) Большое спасибо за ссылку. Буду изучать. Пока плохо ориентируюсь в терминах: "Захват контекста" - это отдать область видимости наружу? Если "Да" , то опять же обычный Процедурный Тип может быть вложенным(т.е. процедура внутри процедуры). А значит "Захват контекста" можно делать и без Анонимных методов, при помощи обычного вложенного Процедурного Типа. Так? Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:53 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39801274&tid=2039515]: |
0ms |
get settings: |
13ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
546ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 899ms |

| 0 / 0 |
