Вроде и есть полезные штуки, но как-то все убого. Как кусок дерьма, присыпанный сахаром.
Почему "data class", а не просто "record"?
"public data class Person { string FirstName; string LastName; }" и "public data class Person(string FirstName, string LastName)". Не хватает еще "public data class Person [ string FirstName string LastName ]".
Магия и сахар для top-level инструкций.
">= 3000 and <= 5000 => 10.00m" — нечитаемый кусок дерьма, плюс появились "and", "or", "not". Конгениально.
Здравствуйте, AlexRK, Вы писали:
ARK>Почему "data class", а не просто "record"?
Например, потому что это таки class, хоть и присыпанный сахаром. На мой вкус в троице class, struct и record — последний лишний, потому что и class и struct являются record.
Здравствуйте, Mystic Artifact, Вы писали:
ARK>>Почему "data class", а не просто "record"? MA> Например, потому что это таки class, хоть и присыпанный сахаром. На мой вкус в троице class, struct и record — последний лишний, потому что и class и struct являются record.
В тексте используется _исключительно_ терминология "record", а словосочетание "data class" встречается _только_ в сниппетах кода. Какой мудрый ход со стороны микрософта — называть в коде сущность одним именем, а в документации — другим. Разве это не прекрасно?
Здравствуйте, AlexRK, Вы писали:
ARK>В тексте используется _исключительно_ терминология "record", а словосочетание "data class" встречается _только_ в сниппетах кода. Какой мудрый ход со стороны микрософта — называть в коде сущность одним именем, а в документации — другим. Разве это не прекрасно?
Единой терминологии на этот счет нет нигде. В мире около ФП и хипсиеров record используется именно так. В классике жанра — record это просто составной тип. Поэтому, честно говоря наскоро пролистал всю статью, понял о чем они и закрыл. В принципе не плохо, на мой взгляд.
PS: Улучшенный паттернматчинг местами переулучшен.
Здравствуйте, Mystic Artifact, Вы писали:
ARK>>В тексте используется _исключительно_ терминология "record", а словосочетание "data class" встречается _только_ в сниппетах кода. Какой мудрый ход со стороны микрософта — называть в коде сущность одним именем, а в документации — другим. Разве это не прекрасно?
MA> Единой терминологии на этот счет нет нигде.
Это понятно, но не в рамках одного языка же. Шизофрения какая-то, в тексте "record", в коде "data class".
Да и, откровенно говоря, само словосочетание "data class" мне кажется убогим. Какая разница, класс это на самом деле или нет. Делегаты тоже классы, почему бы не назвать их "callable class"?
… случайно смержили в релиз — Как-то иначе эти нововведения объяснить сложно.
Сделать одну фундаментальную фичу макросы — и вот эти "нововведения" запилит студент в корридоре кампуса на стажировке. Собственно от "топовых" новинок именно такое ощущение. Если бы это выкатили пакетом в NuGet — не факт что я бы его подключил.
Ну и конечно фичи есть куда развивать. Явно нехватает двух вещей: value-type records это раз. И скобочек на клавиатуре для них это два.
Предвижу проблему с logical patterns. Они поддерживают туплы?!
(a, b) switch
{
(<10 and >5, >10) => WriteLine("J это C#12!");
}
Пока лютую дичь написать нельзя, есть ещё над чем работать и куда расти!
И только Covariant returns штука хорошая, даст возможность выкинуть куски повторяющегося и тупого кода.
Налицо явный многолетний тренд на возрождение Паскаля. Дочитал до "with" и аж вздрогнул. А так — чувствуется лютое влияние Kotlin и Swift (читай — стараются не отставать от Google и Apple).
Здравствуйте, Mr.Delphist, Вы писали:
MD>Налицо явный многолетний тренд на возрождение Паскаля. Дочитал до "with" и аж вздрогнул. А так — чувствуется лютое влияние Kotlin и Swift (читай — стараются не отставать от Google и Apple).
Лично я не считаю, что паскаль — это плохо (даже считаю наоборот, но это неважно). Плохи бессистемность и эклектичность. Раз уже есть && и || — так делайте дальше в том же стиле, а не пихайте and/or. Та же байда с == и equals и многим другим. Получается уродливое месиво — тут си, тут паскаль, тут рыбу заворачивали. Логика, последовательность? Какое там. "Запомнытэ это, дэти, потому что понять это — нэвозможно!" (с)
Здравствуйте, Mystic Artifact, Вы писали:
MA>Здравствуйте, AlexRK, Вы писали:
ARK>>Почему "data class", а не просто "record"? MA> Например, потому что это таки class, хоть и присыпанный сахаром. На мой вкус в троице class, struct и record — последний лишний, потому что и class и struct являются record.
В F# под record принято понимать сравнение по значению и невозможность инициализации null-ами(если это не указано специально).
Может поэтому*
ARK>Раз уже есть && и || — так делайте дальше в том же стиле, а не пихайте and/or.
Подозреваю что они отказались от && и || потому что если писать с ними качественный продакшен код:
Здравствуйте, AlexRK, Вы писали:
ARK>Лично я не считаю, что паскаль — это плохо (даже считаю наоборот, но это неважно). Плохи бессистемность и эклектичность. Раз уже есть && и || — так делайте дальше в том же стиле, а не пихайте and/or. Та же байда с == и equals и многим другим. Получается уродливое месиво — тут си, тут паскаль, тут рыбу заворачивали. Логика, последовательность? Какое там. "Запомнытэ это, дэти, потому что понять это — нэвозможно!" (с)
А мне нравится! Могли и сразу ввести and, or and not вместо && и || и ! перекурочили бинарные (& и | и ~)
Просто в паскале and, or and not применяется к булевым и числовым по разному. А здесь наследственность понимаетели.
Правильным путем идем товарищи!
и солнце б утром не вставало, когда бы не было меня
Шарп упорно соревнуется с самим собой в том, сколько одних и тех же по своей сути вещей можно сделать разными способами.
> Target-typed new expressions > new expressions in C# have always required a type to be specified (except for implicitly typed array expressions). Now you can leave out the type if there’s a clear type that the expressions is being assigned to. > > Point p = new (3, 5);
Point p(3, 5); уже можно записать, или это кандидат в 10.0?