Как стать автором
Обновить
198
0
Максим Аршинов @marshinov

В саббатикале

Отправить сообщение

Просто сравниваю. У ng тоже много родовых травм (например, html-шаблоны), но там хорошо сделана структура приложения: feature modules, services, components и везде четко написано, что куда нужно совать, а что не нужно. И "It’s hard to reuse stateful logic between components" просто не существует в ng: делаешь сервис и ничего не hard to reuse. И главное эта логика очень простая и понятная для любого программиста с опытом в enterprise. Хуки вводят новый концепт, который надо учить. Для меня это выглядит как сущность, которую наплодили с понятной надобностью конечно... Но что мешашло IOC или подобие partial application прикрутить, чтобы внедрять зависимости? Типа с хуками проще? Ну может.

Ну redux сам по себе копипасту создает:)) Причем в ng эта проблема просто не существует из-за наличия сервисов.

Ну может для игр так. У меня таких страшных HoC'ов не было никогда, но ваша точка зрения понятна.

Плюс это все пиарят как что-то хорошее и "простое". "Классы сложно, поэтому давайте вот на хуках". Але, если вам классы сложно, то какие нафиг "функциональные компоненты"?

Вот да. Как только неявный стейт где-то за кадром в хуках "проще" - ну хз. Может проще, пока не думаешь, как это работает под ковром.

Мне одному классы больше нравились?

Кажется там должно быть (*variables)["get_has_field_bit_message"]

мне говорят о том, что вы слабо понимаете что такое корутины и что такое Task в C#.

Ну просветите, по мне разница только в том что в Kotlin концепт обобщенный, а в C# гвоздями прибили ключевые слова. В обоих случаях CPS получаем. Опять же async/await можно же перебить на свои awaiter'ы, просто это не нужно никому.

Корутины (да, "самописные") сократили изначально джавовский код в разы, при этом в разы подняв его читаемость и исключив падучесть.

Ну т.е. вы описали типовой сценарий использования акторов. Т.е. скорее всего можно не писать свои корутины, а использовать существующие.

??? Вас вообще куда понесло-то?

Я об этом.

Ну все-таки есть object и companion. Да, я знаю про @JvmStatic,но мы говорим про язык, а не байткод. async/await, yield чем не корутины в C# или вы свои корутины пишете когда-нибудь? Если пишете, очень интересно узнать какие real-world scenarios для этого. Из очевидного - arrow, но я не уверен, что все понравятся конструкции вида:

result {
  val smth = r.bind()
  //...
}  

Лично мне нравятся. Я бы еще и инфиксную нотацию или оператор для bind добавил, но вот студенты жалуются :)

А что больнее всего было в Java? Я сейчас тоже по долгу службы сравниваю C#, Kotlin и Java. И если по поводу первых двух во многом дело вкуса, то Spring для меня просто тихий ужас по сравнению с ASP.NET Core

У меня там не стрелка, а "меньше" было:) Я имел в виду, что вам C# нравится больше, чем Java, а Kotlin больше чем C#, верно?

Из них именно переход на чистую жаву был самый травмирующий:))

Не так страшна Java как Spring...

Имеете в виду Java < C# < Kotlin?

Котлин - java compliant language

Еще и в JS, а там стирающиеся дженерики - самое то. Ну и inline reified T все-таки никто не отменял. Костыли конечно, но работает же:)

Конструкторы с пропертями можно для рекордов. Думаю, через пару версий втащат и в классы (ну глядя на C#10: как там акуратненько рекорды для структур всунули).

Они рассматривали несколько вариантов, в итоге решили, что проще разрешить статику в интерфейсах, чем вводить дополнительные синтаксические сахарюшки. Т.е. если в generic'е хочется +, то нужно объявить:

Add<T>(T x, T y) where T: IAddable 

interface IAddable { static + }

В proposal'е это коротко написано. Если другие proposal'ы посмотреть, то че только не предлагали: начиная с тайпклассов, заканчивая трейтами. ИМХО, у C# прослеживается довольно выигрышная стратегия вводить хорошие частные решения для типовых задач. Когда Бреслав говорит, что "у нас async/await - это не ключевые слова, а функции, а ключевое слово у нас suspend" я не вполне уверен, что это преимущество Котлина, потому что чтобы использовать async/await без понимания внутренностей достаточно не использовать .Result и всегда предпочитать асинхронные версии методов и не оборачивать синхронные в Task.Run. С корутинами все несколько сложнее на мой вкус...

Не читайте "любую", читайте эту. И http://ulearn.me.

Мне казалось, что они ее в preview-режиме выпустят. Но могу ошибаться.

Добавляют потихоньку. Лучше медленно, но в верном направлении.

В Котлин пришлось object сделать ключевым словом, чтобы new убить. Хотя там конечно специфика JVM еще, например functionName ClassName - сразу видно где конструктор, где функция. Ну и сама среда немного другое разрешает.

А я правильно помню, что в .NET 6 опцию можно включить и фича появляется?

Информация

В рейтинге
Не участвует
Откуда
Казань, Татарстан, Россия
Работает в
Дата рождения
Зарегистрирован
Активность