Pull to refresh

Comments 26

На Alex Thissen / Xpirit у вас двойная надежда?
Не сразу понял, о чем речь. Пофиксил, спасибо!
:-) А представляете, если бы их было восемь, какая ответственность бы легла на Алекса.
Зато теперь Андрей из JetBrains занял достойное место.
Поздравляем Михаила Щербакова с получением MS MVP!
«Оператор проверки на null» — это вот правда нужно?

Это очень клёвая фича. Представьте, что у вас есть некое свойство A, у которого есть свойство B, у которого есть свойство C, у которого есть свойство D, у которого вы хотите вызвать метод Foo. Но вот проблема: по пути к методу Foo одно из свойств A, B, C, D может оказаться равным null. Раньше приходилось писать:


if (A != null && A.B != null && A.B.C != null && A.B.C.D != null)
    A.B.C.D.Foo();

В C#6 вы можете написать просто


A?.B?.C?.D?.Foo();

Материал для дополнительного чтения:


Я имел ввиду — кому-то еще нужно об этом отдельно рассказывать? И притом на конференции за большие деньги?
У Джесси это будет кейноутный доклад, который по замыслу не должен быть тяжелым и технически сложным. Хардкора у нас в технических слотах хватает. :)
Ну а если мой коммент соберет 10 лайков, то я попрошу Джесси не рассказывать про оператор проверки на null" на кейноуте :)
А если серьезно, то есть много девелоперов, которые не особо следят за прогрессом и им это может быть полезно.
Представьте, что у вас есть некое свойство A, у которого есть свойство B, у которого есть свойство C, у которого есть свойство D, у которого вы хотите вызвать метод Foo.

Минутку, а как же закон Деметры?

Увы, законы реальной жизни оказываются сильнее, такой код систематически появляется в совершенно разных проектах.
Но даже если бы не появлялся, то


A?.Foo();

всё равно выглядит лаконичнее, чем какое-нибудь


if (A != null)
{
    A.Foo();
}
Закон Деметры слабее нежелания писать врапперы на врапперы на врапперы, только чтобы делегировать методы в какие-то внутренние сущности.

Если фича хорошая, то она часто появляется сразу в нескольких хороших языках программирования. А null propagation operator — хорошая фича, поэтому мы можем её наблюдать не только в C#6 и Kotlin, но ещё и в Groovy. =)

Ну, вот про «сразу в нескольких» это ты хорошо пошутил, если учесть что в Груви они появилась десять лет назад, а в С# и в Котлине сейчас. Есть инноваторы, и есть последователи, и не надо их в одну кучу мешать.

Да не пытаюсь я Груви обидеть, не волнуйся так. =) Чудный язык, в нём очень давно появилось много разного и хорошего, с этим никто не спорит. Я просто хотел сказать, что это абсолютно нормально, когда хорошие фичи переходят из одних языков в другие.

это абсолютно нормально, когда хорошие фичи переходят из одних языков в другие

Всячески согласен и приветствую.

Чет на задачки никто не отвечает. Попробую я
Скрытый текст
Т.к. у нас плавающая точка, то все суммы будут округляться до самого числа, в результате ответ будет 1e16. В принципе, если поменять местами AddRange и Add эта проблема может решиться.
А вообще печально, рассказывать собираются про C# 6.0 ( который по-моему все уже знают), а вот про C# 7.0 мало чего слышно. Да, на гитхабе время от времени обновляют страничку «Strong interest» (хотя изменений в ней не видно, но дата последнего редактирования меняется), хотя там тоже по сути ничего супер инновационного нет (кроме match expression). Заинтересовали было non-null reference types, но и там молчок, непонятно, идея будет реализована или нет. Я понимаю, что от спикеров инсайдерскую информацию не требуют, но это реально то, что интересно. А рассказывать про ?., про который 2 года назад уже все обсудили не так уж сильно хочется.

@PsyHaSTe, направление мысли правильное. А можно что-нибудь сделать без модификации входных данных? Другими словами, нужно написать собственную функцию Sum, которая для любого набора чисел выдаст «хорошую» сумму.

Можно просто в обратном порядке массив пройти. Либо просто внутри Sum сначала сортировку сделать, если мы не делаем предположения о порядке элементов.

Нет, предположения о порядке мы не делаем. Нам просто приходит набор double-чисел, нужно вернуть сумму.
Сортировка — мысль интересная, но не очень хорошая в плане производительности, сумма будет работать долго.
Можно ли что-нибудь придумать для произвольных входных данных, чтобы работало за O(N) ?

У меня с теорией алгортимов вообще беда, так что я вряд ли что-то толковое предложу. Можно только логически порассуждать. Например, что детерменированно без потерь мы можем складывать только целые числа, либо отсортированные даблы. Сортировку за O(N) провести мы не можем, оперировать с даблами как с лонгами — это особая С++ магия, в которую я не очень умею.

Тогда приходите на нашу замечательную конференцию, в своём докладе я буду рассказывать о том, как же решать эту и многие другие проблемы без всякой C++ магии. =)

static class Extensions
{
	public static double SumRight(this IEnumerable<double> list)
	{
		return Decimal.ToDouble(
			list.Select(i => new Decimal(i)).Sum());
	}
}
Sign up to leave a comment.