|
|
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1stу Анонимных Методов должно быть еще другое преимущество в некоторых оптимизирующих компайлерах их применение позволяет иногда сгенерить код оптимальнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 10:54 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1stКлассический вариант такой: Код: pascal 1. 2. 3. 4. 5. А так стало наглядней ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. rgreat, asutp2, заранее извините, я специально чучь-чуть "провоцирую", но честно хочу осознать эту "наглядность"Так - не стало. Но ты забыл реализацию неанонимных функций в код добавить. Если добавишь и правильно отформатируешь - наглядней будет именно анонимно. Ибо код функции сортировки будет лежать сразу перед взглядом а не где-то еще. Но это работает на коротких функциях и процедрурах. Более десятка строк это будет выглядеть слишком тяжеловесно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 11:06 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
X-CitePascal-style и наглядность X-Cite, спасибо, что участвуете в теме. Я помню, Вы хорошо разбираетесь в C++. Скажите, в C++ есть возможность описать функцию в любом месте кода, например, внутри цикла “for” ? Вот, в Delphi это стало возможно. Я искренне пытаюсь осознать какие дает преимущества ... :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 11:40 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, В си++ даже лямды появились :) Стандарт расширяется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 11:45 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1stX-CitePascal-style и наглядность X-Cite, спасибо, что участвуете в теме. Я помню, Вы хорошо разбираетесь в C++. Скажите, в C++ есть возможность описать функцию в любом месте кода, например, внутри цикла “for” ? Вот, в Delphi это стало возможно. Я искренне пытаюсь осознать какие дает преимущества ... :-/ Вы меня с кем-то путаете... Я не разбираюсь в С++ Чтобы понять как работают замыкания и почему анонимные функции как нельзя лучше подходят для "Функций высшего порядка" https://habr.com/ru/post/244945 Например каррирование или мемоизация - очень мощные штуки, но к сожалению в delphi не работающие нормально... Я уже в QC запостил пару багов с захватом контекста.. Захват контекста нужен, чтобы в другие классы не передавать параметры, которые там не должны жить, т.к. каждый класс должен выполнять ровно одну задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 12:03 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st...в C++ есть возможность описать функцию в любом месте кода, например, внутри цикла “for” ? ... Конечно, есть. Более того, в состав стандартной библиотеки включили специальные формы, основанные на лямбдах: https://ru.cppreference.com/w/cpp/algorithm/for_each Лябды в с++ в миллион раз мощнее того, что имеем в дельфи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 12:06 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Проблема реализации анонимных функций в Delphi заключается в том, что они реализованы через интерфейсы и не совместимы с реализацией в других языках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 12:07 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
ziv-2014, за это бы им следовала оторвать в руки, и всунуть их на место (в задний проход) . В c# к примеру анонимные функции легко запоминают переданные в них локальные значения, и при вызове сразу нескольких функций, с разными переменными будут давать разный результат, который был передан А в Delphi что????? Смех один. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 13:16 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Вот так более эстетичнее Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 13:31 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st "Захват контекста" - это отдать область видимости наружу? Если "Да" , то опять же обычный Процедурный Тип может быть вложенным(т.е. процедура внутри процедуры). А значит "Захват контекста" можно делать и без Анонимных методов, при помощи обычного вложенного Процедурного Типа. Так? Нет? Нет. Процедурный Тип в Delphi применим только для автономных процедур(не для вложенных). Т.е. вложенные процедуры(компилятор называет “локальными”) не являются Процедурным Типом, и их нельзя использовать в качестве переменных или параметров. А вот новые Анонимные методы - это вариант вложенных процедур, которые совместимы с Процедурным Типом, и их можно присваивать и передать наружу(с Захваченным контекстом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 13:38 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Foxpcziv-2014, за это бы им следовала оторвать в руки, и всунуть их на место (в задний проход) . В c# к примеру анонимные функции легко запоминают переданные в них локальные значения, и при вызове сразу нескольких функций, с разными переменными будут давать разный результат, который был передан А в Delphi что????? Смех один. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 14:01 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Массово использую анонимные методы. Например для исключения while not DS.Eof do DS.Next; End; и вообще практически везде, где требуются процедурные типы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 14:04 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
ааа, поторопился) конечно же, это не с++ билдер) но и не делфи. Foxpc , приведи пример на делфи, который будет работать некорректно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 14:06 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
asutp2ааа, поторопился) конечно же, это не с++ билдер) но и не делфи. Foxpc , приведи пример на делфи, который будет работать некорректно Это применимо к асинхронному выполнению, когда к примеру захват контекста в одной нити, а выполнение в другой. Сравните ниже. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 14:18 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Хотя в C# тоже самое... Захват контекста из другой нити работает также Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 14:58 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
X-CiteЗахват контекста из другой нити работает также А ява тут сругается, что переменная должна быть финализированной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 15:18 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, авторА значит "Захват контекста" можно делать и без Анонимных методов, при помощи обычного вложенного Процедурного Типа. Так? Нет? Я не знаю что ты называешь процедурным типом. Но вот так сделать нельзя:: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Компилятор выдаст ошибку (собственно - из-за отсутствия возможности захватить контекст). И вот что бы это стало возможным как раз анонимные функции и нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 18:25 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Использую редко. Но очень классно их использовать для всяких callback Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 19:23 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Метод как метод только без имени. Но если часто использовать паттерны Visitor, Dependency Injection, Control Inversion и тд, то: * меньше писать кода; * код не размазан по юниту а в месте его использования. PS: Все можно и на ASM написать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 20:56 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Кто-то выше сказал, что Эмба не использует анонимные методы. Все с точностью наоборот ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2019, 20:57 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
В Java Script без анонимных/стрелочных функций сейчас как без рук. Все фреймворки под них заточены. Смотрятся они в JS очень красиво (изящнее и читабельнее, чем в лямбды C# из-за динамической типизации). Зато в JS нет классов (есть только эмуляция за счёт сахара) и такой классной штуки как "function of object" (TMethod) в JS нету, что ведёт в постоянным извращениям типа bind. Я к тому, что в Delphi анонимные функции нужны куда реже, чем в других языках. Имхо, и слава богу. Такое ощущение, что некоторые, особенно молодые C# - программисты, начинают забывать (или не знают), как объявить поле класса без лямбд или как сделать обычный метод. Везде лямбды лепят. Это хорошо видно из статей на Хабре, посвящённых C#. В C# сделать анонимный метод с нормальным описанием параметров куда сложнее, чем вставить лямбду. Ведь там нет ключевого слово function / func / fn и т.п., поэтому приходится городить огород. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 00:11 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Эмба у себя использует, они-то свой продукт лучше всех знают. Потом их спецы едут в народ, опрашивают его, узнают, что народ не очень понимает, зачем это всё надо, и очень расстраиваются. Ну кому понравится, когда старались, работали, а результат не ценят. авторПроцедурный Тип в Delphi применим только для автономных процедур(не для вложенных). Т.е. вложенные процедуры(компилятор называет “локальными”) не являются Процедурным Типом, и их нельзя использовать в качестве переменных или параметров. Дык вот это само по себе странность. Причем странность неочевидная, если про нее не знать, как та же невозможность передать property в var параметр. И вообще непонятная. Если можно прямо в центре процедурки зафигачить другую процедурку, которая будет иметь точку входа и при этом еще и захватывать контекст, то что мешает сделать то же самое для вложенных функций, которые с точки зрения их пользователя есть то же самое, только записанное чуть в стороне? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 09:14 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Beltar, Совместимость с легаси ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 09:20 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Мы тоже у себя всё чаще используем. Ибо иногда удобнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 09:41 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
X-Cite, С одной стороны бесспорно то, что Делфи всегда был хорош обратной совместимостью. И до 90% кода еще первых версий соберется либо сразу (если изначально был хорошо написан - то скорее всего и соберется) либо с минимальными правками. Для долгоиграющих проектов отличный язык. Для сравнения путь Гугл: постоянно ломается совместимость, а потом программеры плачут: https://habr.com/ru/post/446346/ С другой, я сам слабо понимаю, какая совместимость может сломаться если локальные процедуры будет разрешено передавать как процедурный тип (если, конечно, подходят параметры). Или почему запрещено передавать проперти как переменные. Особенно те, которые без сеттеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 10:21 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39801550&tid=2039515]: |
0ms |
get settings: |
4ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 412ms |

| 0 / 0 |
