C# - pattern matching - many discards
Я на русском программирование не учил, делегаты это все что Func<…> и Action<…>?
Оно и на английском делегаты - delegates. ))
Делегаты это делегаты. Func и Action это готовые определённые типы делегатов, которые широко используются внутри Дотнет фреймворка. Ну и их можно использовать, чтобы не писать велосипеды - в конце-концов, для всех методов с одним входных параметром и без возврата достаточно типа Action<T>. Но судя по коду, что я встречаю, почти все пишут свои определения для банальных делегатов. Вобщем, народ букварей не читает, чего во фреймворке есть не отдупляет, но на собесах по бумажкам какую-то заумь спрашивает. ))
Надо такой вопрос на собесах задавать, когда хочешь кого-то завалить.Если кандидат не знает почему для нотификации следует использовать эвенты, а не делегаты, то гнать в шею надо такого кандидата :)
А если программист повсеместно использует делегаты, то надо гнать в шею такого программиста. Все просто.
Я же говорю - передерутся и выгонят друг друга из профессии. И останутся одни со своим говнокодом на проекте, и лишь покладистыми инфантильными подопечными. Не забывая при этом их метелить, какие они говнокодеры и ничего не понимают. А начальству будут втирать, что нет на рынке нормальных, умных, достойных. ))
12 год - да наф нам не нужон этот ваш делегат.
На всякий случай, Ололёшеньке всё равно, он у нас дурачок, по-англицки читать это не его, но вдруг кого удивило.
Во-первых, статья 1997-8 года. Не позднее. Java 1.2 не упоминается. Ну, ашипся ололёшенька. Бывает. (Статья про J++. Кто такое мелкомягкое уродство помнит?)
Во-вторых, суть статьи "нафиг усложнять VM ссылками на методы, если есть внутренние классы".
Ну и, в-третьих, ...
14 год - Джава 8 представляет лямбды и ссылки на методы.
"Ссылка на метод" в 8-й Яве это не "delegate". Это синтаксический сахар. Который компилятором преобразуется... во внутренний класс. Как и лямбда.
Во-первых, статья 1997-8 года. Не позднее. Java 1.2 не упоминается
Согласен, спутал - в 2012 году это было заархивировано, а не выпущено. Но сути это не меняет - до последнего "нам не нужны делегаты", а потом резко "но если очень надо, то вот вам имитирующие костыли".
Так никто и не говорит, что в Джаве есть нормальные делегаты и лямбды. Так, лишь жалкая пародия. Непонятно, зачем их ввели в такую лучшую и совершенную Джаву - наверное, зумеры заколебали - "а вот в Сишарпе и других современных языках...", вот им и бросили кость. А так бы старпёры до сих пор сидели на старых версиях и довольно рыгали бы на форумах - "а нам даже за поддержку старого говна платят больше, чем вам, гы-гы!". Просто Оракл понял, что если сейчас не оторвать свою жопу от насиженного дивана, то Джава окончательно сдохнет вместе со своими старпёрами. Старпёрам может до пенсии бы их зарплат хватило, а вот Ораклу - нет, если он намерен этих старпёров пережить без сокращения бизнеса. По сути, единственная существенная тростинка, на которой она до сих пор держится - Гугл со своим Андроидом. Без него и новых версий Джавы со всем этим сахаром вакухи по Джаве усохли бы в разы.
Кстати, у Джавы и проблемы есть с несовместимыми версиями - тут можно так писать, а тут нельзя. Раньше множество имплементаций виртуальных машин считалось благом, а теперь понятно, что это дурь, и всё равно будет один фаворит и куча догоняющих, которые никому не нужны. Пока в Джаве всё ещё сидит куча народу, это как-то незаметно. По мере её усыхания эта раздробленность будет сказываться всё больше.
Но сути это не меняет - до последнего "нам не нужны делегаты", а потом резко "но если очень надо, то вот вам имитирующие костыли".
Утомил тупостью, чесслово. Ещё раз: в статье было про то, что расширять/усложнять VM поддержкой ссылок на методы НЕ НАДО, потому что то же самое можно делать внутренними классами.
"потом резко, очень надо" - это твоя дурь. Синтаксический сахар добавляется постоянно. То ссылки на методы, то записи.
Всё остальное комментировать не имеет смысла. Ололёшенька в своём репертуаре, брехня.
Делегаты это делегаты. Func и Action это готовые определённые типы делегатов, которые широко используются внутри Дотнет фреймворк
ну как я и говорю
delegate void MyMethod(string message) это эквивалент Action<string> MyMethod
или
delegate int MyFunc(string message) это Func<string,int> MyFunc
я бы хотел узнать у староверов, как бы они закодили вот такую хотелку
есть энтити класс Person, хочу функцию, которой я мог бы апдейтить любое свойство объекта Person в базе данных, доступ к объектам по айди
в статье было про то, что расширять/усложнять VM поддержкой ссылок на методы НЕ НАДО, потому что то же самое можно делать внутренними классами.
"потом резко, очень надо" - это твоя дурь. Синтаксический сахар добавляется постоянно. То ссылки на методы, то записи.
Так не надо, что они эти ссылки на методы и лямбды добавляли аж с версии 1.х - сколько там, больше 15 лет прошло? А чего раньше не добавили, раз это всё уже считай было и можно было легко сделать "внутренними классами"? Уверен, не дай им Сишарп и другие современные языки пинка под зад, они бы до сих пор шамкали "не надо, нам и так хорошо!".
Гуй. В том числе гуёвые модели в паттернах типа MVVM, MVP, MVC и т.п.Там используются event'ы. Эвенты используют делегаты, но разница между ними огромна.
Альтернатива какая событиям?Эвенты используют делегаты, но разница между ними огромна.
Если в 2-х словах:
An Event declaration adds a layer of abstraction and protection on the delegate instance. This protection prevents clients of the delegate from resetting the delegate and its invocation list and only allows adding or removing targets from the invocation list.
Т.е. события основаны на делегатах. Т.е. без делегатов никуда. Ну и чего бухтеть "убил бы, убил бы"?
Что есть в той же Джаве по событиям, на чём они там основаны?
Обычные методы с параметрами на каждый подобный чих. Ну и возможность самому ещё расширить это дело. До этих делегатов и лямбд такие методы вроде даже автоматически по шаблонам генерились - к каждому дата сету генерилась пачка методов на несколько тысяч строк в среднем.
Альтернатива какая событиям?
-----
Альтернатива называется WinProc.
У меня сейчас сильно перегружен лапоть.
А при написании экранной клавы как раз пользовались делегатами.
Результат - нажимаю Шифт, нажимаю букву...буква выводится не в том регистре.
а чтобы было совсем смешно - лечить надо заменой... БП и акку...
Но я против того, чтобы делегатам назначались методы самого класса - это способ подключения внешнего решения и пусть таким и остается.
А где вы видели, чтобы делегатам-членам класса назначались методы-члены этого же класса? Какой в этом смысл? Почему бы сами методы не использовать?
Когда я в своём примере использую лямбды в инициализаторе объекта, то это извне класса, объект которого создаю.
есть энтити класс Person, хочу функцию, которой я мог бы апдейтить любое свойство объекта Person в базе данныхпофигу в какую группу попадаю, но такую хотелку просто-бы отмели в зародыше.
Он намекает на EF с его возможностью повставлять делегаты в функции запросов. Вы сейчас будете отрицать, что используете это? ))