function printId(id: number | string) {
console.log("Your ID is: " + id);
}
Раньше приходилось все объявлять object
До выхода C# 15, когда метод должен был возвращать один из нескольких возможных типов, у вас были не самые удачные варианты. Использование object не накладывало никаких ограничений на то, какие типы будут храниться в памяти, — там мог оказаться любой тип, и вызывающей стороне приходилось писать защитную логику на случай непредвиденных значений. Интерфейсы-маркеры и абстрактные базовые классы были лучше, потому что они ограничивали набор типов, но их нельзя было назвать «закрытыми» — любой мог реализовать интерфейс или унаследовать базовый класс, поэтому компилятор никогда не мог считать набор полным. Кроме того, оба подхода требуют, чтобы у типов был общий предок, что не работает, если вам нужен союз несвязанных типов, таких как string и Exception или int и IEnumerable<T>.
Объединённые типы решают эти проблемы. Объединение объявляет закрытый набор типов-кейсов — они не обязательно должны быть связаны друг с другом, и к ним нельзя добавлять другие типы. Компилятор гарантирует, что switch выражения, обрабатывающие объединение, являются исчерпывающими и охватывают все типы-кейсы без необходимости использования discard _ или ветки default. Но это не просто исчерпывающий набор: объединения позволяют создавать структуры, которые невозможно выразить с помощью традиционных иерархий, объединяя любые комбинации существующих типов в единый контракт, проверяемый компилятором.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, amironov79, Вы писали:
A>Их таких неплохих с десяток наберётся Но не долго им осталось.
A какие еще? В OneOf особенно костылит бойлерплейт по написания и поддержке осмысленно названных оберток над AsT0, IsT1 и т.д.
Я шарпистом стал не давно, но после Скалы жить без DU не могу.
Здравствуйте, novitk, Вы писали:
N>A какие еще? В OneOf особенно костылит бойлерплейт по написания и поддержке осмысленно названных оберток над AsT0, IsT1 и т.д. N>Я шарпистом стал не давно, но после Скалы жить без DU не могу.
Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.
Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.
Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.
VD>Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.
VD>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦
Гордыня -- смертный грех, если что. Неужели ты думаешь, что разработчик, хоть немного интересующийся программированием в целом, не в курсе этого?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>>https://devblogs.microsoft.com/dotnet/csharp-15-union-types/
VD>Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.
VD>Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.
VD>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦
Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ?
Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
VD>>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦
S> Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ? S>Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.
Я вполне понимаю Влада. Индустрия чёрт знает чем занимается уже больше 30 лет.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, Serginio1, Вы писали:
S>> Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ? S>>Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.
С>Я вполне понимаю Влада. Индустрия чёрт знает чем занимается уже больше 30 лет.
Так пускай идет к людям, которые определяют развитие языка, и их оскорбляет.
Здравствуйте, amironov79, Вы писали:
A>Гордыня -- смертный грех, если что. Неужели ты думаешь, что разработчик, хоть немного интересующийся программированием в целом, не в курсе этого?
Я не то что думаю. Я 100% знаю, что 99% разработчиков искренне считают, что МС миссия и даёт им новые знания, а не осторожничает 30 лет и тормозит прогресс.
Большинство людей, включая программистов, не знаю ни истории, ни технологий.
По этому они так неистово радуются огрызкам которые им выдают в 2026 не смотря на то, что все это в более обобщенном виде было 20, а то и 30 лет назад.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Я не то что думаю. Я 100% знаю, что 99% разработчиков искренне считают, что МС миссия и даёт им новые знания, а не осторожничает 30 лет и тормозит прогресс.
Таких всё меньше, к тому же с того времени, как выпустили .net core, такого мнения я не встречал
VD>Большинство людей, включая программистов, не знаю ни истории, ни технологий.
Думаю, что люди, которые пришли на rsdn, в большинстве интересуются и историей, и технологиями. Другой разговор, что их мнение может отличаться от твоего
VD>По этому они так неистово радуются огрызкам которые им выдают в 2026 не смотря на то, что все это в более обобщенном виде было 20, а то и 30 лет назад.
Ты это так описываешь, как будто люди на улицу праздновать выходят с транпарантами "Даешь объединения" и "Догоним и перегоним МетаЯзыки" А здесь всего лишь обсудили, что хорошо, что появились стандартные du.