|
|
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
makhaonИли почему запрещено передавать проперти как переменные. Особенно те, которые без сеттеров. Потому что свойство это абстракция. Сегодня у тебя сеттера нет, а завтра он есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 10:31 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, отлично. Будет сеттер - будет ошибка. Нет сеттера - нет ошибки. Известно, что без сеттера проперти трактуется как обычная переменная без какой-либо дополнительной обвязки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 10:50 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Да и сеттер могли бы обвязать, что уж... Чай не бином Ньютона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 10:51 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
makhaonИзвестно, что без сеттера проперти трактуется как обычная переменная без какой-либо дополнительной обвязки. Известно, что свойство это абстракция усиливающая инкапсуляцию (сокрытие деталей реализации). Декларируя свойство, программист говорит компилятору, что это не переменная, не поле, а именно способ доступа к некотором данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 11:02 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
BeltarавторПроцедурный Тип в Delphi применим только для автономных процедур(не для вложенных). Т.е. вложенные процедуры(компилятор называет “локальными”) не являются Процедурным Типом, и их нельзя использовать в качестве переменных или параметров. Дык вот это само по себе странность. Причем странность неочевидная, если про нее не знать, как та же невозможность передать property в var параметр. И вообще непонятная. Если можно прямо в центре процедурки зафигачить другую процедурку, которая будет иметь точку входа и при этом еще и захватывать контекст, то что мешает сделать то же самое для вложенных функций, которые с точки зрения их пользователя есть то же самое, только записанное чуть в стороне? Это странность тогда, когда рассматривают язык только с точки зрения синтаксиса, а не реализации, что часто очень удобно: представляшь, какой код должен получиться после компиляции, а из этого уже создаешь синтаксическую конструкцию, которая к этому приводит. Var и property - это синтаксический "сахар", без которого можно обойтись ( var - очень древний "сахар", property - чуть новее), поэтому если представить, что var - это просто адрес переменной, а property это вызов соотвествующих гетеров и сетеров, становится понятно, почему property нельзя передать как var параметр. С локальными процедурами аналогично - локальная процедура отличается от "независимой" процедуры именно указателем на контескт "родителя", она видима, только пока контекст родителя доступен, поэтому ее нельзя вернуть "наружу". Как реализованны анонимные процедуры с захватом контекста, я не изучал (пока) и с трудом представляю, т.к. (обычно) локальные переменные - это просто кусок стека, который при завершении процедуры освободится, а значит контекст должен быть где-то в другом месте, что должно приводить ко всяким проблемам со времени жизни этого контекста и пр. Написанное относится к обычным компилируемым реализациям, в которых нет RTTI: информация об именах переменных и функций не попадает в результирующий код, однако необходимость удобной сериализации привела к некоторому сближению компилируемых и интерпретируемых концепций - появились published свойства и RTTI, соответсвенно. Дальше - больше, подозреваю, скоро появится еще и функция eval(SourceCode:string):TVariant, которая в runtime выполняет код :) Сумбурно как-то получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 11:05 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
DmSerВ Java Script без анонимных/стрелочных функций сейчас как без рук. Все фреймворки под них заточены. Смотрятся они в JS очень красиво (изящнее и читабельнее, чем в лямбды C# из-за динамической типизации). Оффтоп, правда, но я вот никак не оценю плюшки стрелочных. На какой-то элементарщине в один оператор из примеров да, они дают большое сокращение. Но потом в реальном коде добавляется еще один оператор, а значит, и скобки, потом еще один, вынуждая делать тело функции многострочным, а потом вдруг и this понадобится... в итоге все сокращение выливается лишь в => вместо function. Учитывая лучшую воспринимаемость слова и автогенерацию кода средой, преимущество так себе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 11:07 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Захват контекста + ручная реализация анонимки 21836708 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 11:22 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, если соблюдать принципы инкапсуляции, то я не могу создать переменную в public вообще. нет выбора: переменная или свойство, вот в чем проблема. да, можно нарушить инкапсуляционные принципы и вытянуть часть переменных наружу. но как-то так себе идея. ну да ладно. обсуждаем не это :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 11:28 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Василий 2DmSerВ Java Script без анонимных/стрелочных функций сейчас как без рук. Все фреймворки под них заточены. Смотрятся они в JS очень красиво (изящнее и читабельнее, чем в лямбды C# из-за динамической типизации). Оффтоп, правда, но я вот никак не оценю плюшки стрелочных. На какой-то элементарщине в один оператор из примеров да, они дают большое сокращение. Но потом в реальном коде добавляется еще один оператор, а значит, и скобки, потом еще один, вынуждая делать тело функции многострочным, а потом вдруг и this понадобится... в итоге все сокращение выливается лишь в => вместо function. Учитывая лучшую воспринимаемость слова и автогенерацию кода средой, преимущество так себе. Посмотрите учебный курс ReactJS. Там стрелочные функции очень активно используются и очень наглядно смотрятся. Там, где строк много, можно объявить таким образом: const MyFunc = function(a,b) { ...... } либо так: const MyFunc = (a, b) => ({}) Не обязательно стрелочную функцию объявлять по месту использования, можно раньше. Если сравнивать с C# (сужу по статьям на том же Хабре), то там лямбды объявляются в основном (или всегда?) именно по месту использования (а раньше видимо и не получится, т.к. нужно заранее знать какие типы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 12:52 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Ну к примеру самый яркий пример псевдокода (через стрелочные, чтобы нагляднее было) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 13:29 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Проблема того же TTask в том, что там Run принимает процедурный тип без аргументов т.е. если есть какой-то метод без параметров, который хотим вызвать асинхронно - проблем нет Если метод с параметрами, то уже его указать нельзя, т.к. TTask.Run ожидает TProc Приходится писать что-то вроде Код: pascal 1. 2. 3. 4. 5. 6. Как бы без анонимного метода не обойтись, т.к. сам класс ни про какой Item может не знать, если Item как входной параметр в текущем методе Но, если к примеру применить карирование, то получим вполне красивый код Код: pascal 1. Но к сожалению карирование на дженериках - работает не верно, контекст параметров захватывается некорректно. (Уже в QC) А писать карирующую функцию под каждый метод со своими параметрами - нет смысла, проще анонимками разрулить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 13:41 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
DmSerПосмотрите учебный курс ReactJS. Там стрелочные функции очень активно используются и очень наглядно смотрятся. Там, где строк много, можно объявить таким образом: const MyFunc = function(a,b) { ...... } либо так: const MyFunc = (a, b) => ({}) Посмотрел. О чем я и говорил - на мелкоте - дает выигрыш в краткости. И это не полноценный код, а обвязка интерфейса. А вот когда начинается что-то посерьезнее Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. особой разницы с Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. нету. Второй вариант даже выигрывает в наглядности, т.к. слово function подсвечивается. В Delphi за счет куда большей многословности краткая форма могла бы выиграть существенней, но едва ли на это пойдут - это не в стиле языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:40 |
|
||
|
Анонимные методы. Какие дают преимущества?
|
|||
|---|---|---|---|
|
#18+
Даже в php пошли на сахар в виде стрелочных функций... Было Код: php 1. 2. 3. Стало Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2019, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2039515]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
8ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 507ms |

| 0 / 0 |
