Pull to refresh

Comments 11

Я правильно понимаю, что все это встроено в F# для поддержки библиотек из C#?

Только язык портить

Лучше бы в c# дали возможность писать функции без классов. Просто синт сахаром

Лучше бы в С# добавили алгебраические типы данных))

Ссылки все про generic math или я что-то упустил?
Я же имел ввиду Descriminated Unions.

Ну так бы сразу и говорили (впрочем, Вы так сразу и сказали - это я ступил). Ну на C# это уже пробовали эмулировать на record - но решение "такое себе" (наверное потому, что не использован ни генераторы, ни расширение компилятора Roslyn и всей ".net compiler platform sdk", включая надстройку для IDE; там в комментариях есть ссылка на другую разработку на generic types , и с применением генераторов; со стороны C# не хватает только анонимных типов в определениях, без создания экземпляров). Вопрос больше - а нафига вообще это в современном ООП, и в C# в частности? в F# это есть потому что это идёт от корней функционального программирования без ООП. В продвинутом ООП в этом нет большой надобности - тут есть классы, интерфейсы и наследования! Ну да - есть решения в некоторых ОО-ЯП, например в Scala - но это больше для галочки более глубокой поддержки функциональной парадигмы (у него была когда-то реализация и под .NET, а так под .NET был ещё Nemerle).

А в C# тут многое упирается в поддержку со стороны платформы .NET - но да, как-то же это сделали для F# (скорее всего опять же через классы и наследования, т.е. не для типов-значений - тут есть ограничения со стороны платформы)

Впрочем, если говорить об объединённых типах - то про желание иметь таковые в C# речь уже шла в обсуждениях развития данного ЯП - но пока воз и ныне там!

Чем статические функции не угодили? Класс там это просто синтаксический контейнер, модуль. Разницы никакой нет.

Ну и что бы это такого дало?

В C# класс - это не совсем синтаксический контейнер - это основная типообразующая сущность (вместе со структурой и интерфейсом, и кортежем), даже делегат - это тоже класс. Если не ошибаюсь, кроме классов типы образует только перечисление enum - вроде как классом не являющееся (на уровне платформы .NET), но... я наверное ошибаюсь - вроде там тоже можно и свойства вводить и методы - значит тоже класс! Это упрощает модель типов в C# (и в .NET)

В C# сейчас можно создавать проект без классов - с одними функциями - но это хорошо только для мелких примеров. На практике вряд ли кто-то этим активно пользуется.

Есть же статические функции и свойства!

В C# куда полезнее методика расширений классов дополнительными функциями - это стиль ООП!

А оператор usnig позволяет эффективно создавать псевдонимы длинным именам типов и вообще импортировать статические члены в текущий контекст - буду доступны а-ля глобальные функции и свойства! Чего Вам ещё нужно? (ну, может, наследования статических членов)

C# изначально заточен под ООП и потихоньку впитывает в себя функциональную парадигму.

А вот чего не хватает - это функций высшего порядка - лет 10 назад шли о них разговоры, года 3-4 назад даже "обещали" добавить - но их до сих пор нет. Конечно в C# есть делегаты - но они слишком тяжеловесны и неповоротливы - но, с учётом встроенной библиотеки стандартных типов, вполне себе позволяют программировать и без функций высшего порядка, тем более что поддержка анонимах функций и лямбда-синтаксис имеются!

В этом плане - ОО-ЯП Kotlin куда более перспективен в плане синтаксиса. Ему только не хватает поддержки мощи платформы .NET

Зато, в Kotlin есть мощь легковесных корутин для асинхронного программирования - вроде бы они позволяют создавать ещё более легковесный асинхронный код - чем async\await модель C#

В прочем в C# с асинхронностью всё не так уж плохо!

А ещё в C# есть LINQ - вот это вещь! Как раз построено на методике расширений!

Вот бы ещё макросы и макрофункции... и захват Unit-блока кода как в Kotlin, и инфиксные операторы...

Но скорее нужен просто Kotlin for Dot NET - и я его, кстати, сам разрабатываю...

Чем принципиально функция без класса, но с упоминанием пространства имён, отличается в использовании от функции в классе?

Sign up to leave a comment.