C# - pattern matching - many discards
Как про другое, если это оно и есть?
https://docs.oracle.com/javase/8/docs/api/java/util/functi...
Написать можно что угодно на чём угодно. Только на одном это будет легко и приятно, а на другом нет. Вспоминаем.
Нет, мне просто интересно как в шарпе реализовали именно ссылки на методы
Ну тут вроде достаточно много
https://www.tutorialsteacher.com/csharp/csharp-delegates
Если недостаточно, опишите подробнее, что именно интересует.
Есть подозрения, что начнётся новый вой, что в этом хх языке и Multicast Delegate нету
Ну тут вроде достаточно много
https://www.tutorialsteacher.com/csharp/csharp-delegates
Только потом читатели букварей забывают забыть все эти MyDelegate(string msg), и начать пользоваться обычными Action и Func. Так и продолжают клепать свои однотипные делегаты на каждый чих.
в этом хх языке и Multicast Delegate нету
Я уже привык, что многое в Джаве, включая делегаты - кривое-косое-урезанное. После Сишарпа - будто переехал из своего дома в общагу. Как правильно отмечают в беседах на том же Stackoverflow, создатели Джава слишком ограничили себя "чистым ООП", загнали в сами себе же созданные рамки ради идеологии, принеся в жертву реальные потребности. Шарп оказался гибче и этим лучше. Да плюс возник попозже, учтя ошибки Джавы. "Что отвердело, то не победит."
Ну тут вроде достаточно много
https://www.tutorialsteacher.com/csharp/csharp-delegate
Во. Вот это меня интересует: MyDelegate del = MethodA;
Если я два делегейта сделаю
MyDelegate del1 = MethodA;
MyDelegate del2 = MethodA;
del1 будет равен del2? del1 == del2, или del1.Equals(del2)?
Мне можно, т.к. на самом деле я ламер.
Глянул получше - это что-то типа Enumerable? Можно бесконечно цеплять фукнции к последовательностям, которые что-то делают с элементами этих последовательностей?
Просто в Select то же самое - это расширение Enumerable, позволяющее сразу задать несколько действий над элементами последовательности через параметры-делегаты.
del1 будет равен del2?
Никогда не интересовало, но по идее должны быть равны.
И таки да:
https://dotnetfiddle.net/9qRfq2 интересно еще View IL глянуть
Никогда не интересовало, но по идее должны быть равны. И таки да
Ну вот. Поэтому (для меня) в шарпе делегейты есть, а в яве - нет. Если определять (по-моему неправильно) делегейт как "возможность передать метод как параметр" тогда они есть и в шарпе и в яве. Причём с самой первой версии :)
P.S. Но и тот и другой близко не функциональные языки с выводом типов (type inference) вроде ML или хаскеля.
В Яву потихоньку подвозят Сишарп 5-7-летней давности.
Implicitly Declared Classes and Instance Main Methods (Second Preview) (JEP 463)
Мне ненравится как сделали этот JEP. Есть проблема-многословный синтаксис, лишние абстракции которые как выяснилось не всегда нужны. Что мы сделаем, исправим это в языке? Нет, введем дополнительный граничный случай для начинающих с неявно объявленными классами, которые как потом выснится больше нигде работать небудут.
В Яве через эти внутренние классы вообще все фичи вводят?
Новая часть кода сделана по ЧиА, а старая постепенно переносится из дремучего легаси в новую парадигму. Да, получилось много классов, но они маленькие, сконцентрированные на своей задаче, разбитые по слоям. Но в чём проблема?
Проблема в том, что управлять кучей мелкотни, разбросанной по слоям, не особо проще, чем монолитом. Монолит можно весь выбросить и переписать, или хотя бы его большие части. А у мелкотни обвязка по связности между собой зачастую больше самой функциональности, закладываемой в эту мелкотню. Т.е. у нас поддерживающая инфрасруктура больше, чем основное производство. Долго возводим леса, кантуем оснастку вокруг, огораживаем, убивая дни на всё это. А потом приходит Петрович и за одну минуту в нужном месте один раз бьёт кувалдой. После чего всё несколько дней разбираем. Примерная аналогия из строительства.
Вообще, всё это сделано для якобы аджайла и continuous integration. Но зачастую проекты как один раз написаны, так почти без существенных доработок и существуют годами. После чего их в значительной части или полностью переписывают. Раз в 5-10 лет. Получается просто последовательность переписываемых почти-монолитов. И такая модель в некоторых случаях более уместна. Проблема всяких аджайл-фанатиков и прочих солидистов в том, что они пихают своё видение во все щели, даже где оно нафиг не сдалось.
без ЧиА в легаси это большие классы на несколько сотен строк, а в новом коде это много классов до сотни строк каждый
Блин, чел хоть раз открывал исходники больших библиотек? Там некоторые классы на тыщи строк. Вот проще и удобнее в некоторых случаях сделать класс на тыщи строк - его так и делают. А не следуют тупым и слепым догмам "классы должны быть маленькими". В куче связанных мелочей зачастую очень трудно составить весь путь потока информации от скажем нажатия на кнопку до получения результата. Там всё проходит через десять слоёв, 20 классов и пачку конвертаций. Задолбаешься прыгать по этим мелким классам, отслеживая стеки вызовов.