Pull to refresh
4
0
Send message
> Не знал, что альди и до Америки добрались (прямо сейчас жую с кофе шоколадку Moser Roth).

Не просто добрались, но и переформатировали американские представления о шопинге: позвонить в магазин нельзя, тележка за монетку, вместо тридцати брендов кетчупов на полке стоит кетчуп от Альди, на кассе упаковываешь покупки сам. Зато всё проходит быстрее и дешевле.
> Не знал, что альди и до Америки добрались (прямо сейчас жую с кофе шоколадку Moser Roth).

Не просто добрались, но и переформатировали американские представления о шопинге: позвонить в магазин нельзя, тележка за монетку, вместо тридцати брендов кетчупов на полке стоит кетчуп от Альди, на кассе упаковываешь покупки сам. Зато всё проходит быстрее и дешевле.
Если вопросы были поданы заранее, то это позор. Позор пиар-департаменту мэрии, который выпустил Лысенко на Хабр, не подготовив с ним ответы и не проведя обучение публичным выступлениям.
Можно я поработаю адвокатом дьявола? Очень многие люди не умеют связно излагать свои мысли без бумажки, экспромтом. У представителя пиар-службы или дипломата должен стоять фильтр между мозгами и языком, а менеджеру среднего звена (например, директору ДИТ) это не требуется.

Человек может вот так балаболить, прыгать с мысли на мысль, при этом коллеги его понимают, потому что они в одном контексте находятся. Даже лекторов я таких встречал. Слушаешь его на лекции — и вроде нормально. Слушаешь фрагмент в записи — шизофазия. Здесь, конечно, ситуация усугублена некомфортными вопросами (хотя они все в целом ожидаемы, можно было и получше подготовиться), на которые и нужно что-то ответить, и не хочется.
Про String и string дан неправильный ответ. String может означать что угодно, смотря какие using указаны в этом файле. string с маленькой буквы всегда определяется как System.String из BCL.
Письма будут практически каждый день: счета и спам точно.
Мне Space видится больше конкурентом Atlassian (который убил свой чат и забросил он-прем CI/CD).

GitHub пока не позиционирует себя как средство автоматизации вообще всех процессов в команде разработки.

private protected нужен для построения закрытых иерархий, но большой ценности в нём нет.


Например, у вас есть класс Foo и наследники: Bar, Baz. Как сделать так, чтобы никто не смог добавить другого наследника? Можно сделать конструктор internal Foo(), тогда из другой сборки его никто не вызовет.


Если сделать конструктор private protected Foo(), его никто не сможет вызвать, кроме наследников в той же сборке. Если ваш Foo абстрактный, то разницы нет вообще.

Если это локальная переменная, то там никто не вклинится. Если это поле или свойство, то такой риск есть, и сейчас компилятор позволяет проверять их, не копируя значение в локальную переменную. Я писал им фидбэк, что для откровенно многозадачного кода хотелось бы иметь более суровые проверки, получил от Мэдса ответ, что это звучит разумно.
Да, в превью такое есть. Только один восклицательный знак, а не два.
Докер точно не предоставляет макось и не предоставляет винду и никсы на одном хосте. Так что только виртуалки.
На null оператор `is` проверяет, но только старый оператор, `value is Type`. Новый оператор, `value is pattern`, доверяет все проверки паттерну, а паттерн уже сам решает, что проверять и какие переменные создавать.

Паттерн `var x` ничего не проверяет, он просто создаёт x, пишет туда то, что получил и возвращает true.

Дисконнект есть не между семантикой паттерна `var` и объявления переменной с выводом типа, а между паттерном `Type x`, который хочет получить на вход ненулевое значение и объявлением переменной `Type x`, которой может быть присвоен null.

Но это сгладится введением Nullable Reference Types в C#8, где `Type x = null;` будет выдавать предупреждение.

Уважаемый Makeman, скопирую сюда свой комментарий из обсуждения на гитхабе.


var x и Type x — это не один и тот же паттерн, они просто похожи. Type (x тут опционален) нужен в первую очередь для проверки типа, а уже во вторую очередь для присвоения сматченного значения переменной. var x (без переменной тут не обойтись) нужен в первую очередь для присвоения любого значения переменной и используется как подпаттерн для деконструкции. Он не матчит принципиально, а получает значение от надпаттерна.


Да, если использовать его как самостоятельный паттерн, то получается, что он просто матчит значение целиком и пишет его в переменную безо всякой проверки. Но если добавить тут в логику проверку на null, то сломается его основная функция — записывать в переменную кусок разобранного паттерна. Ну и вообще, я же могу написать var x = default(string);? var тут не пытается проверить, null я записываю или нет.


И вообще, не надо использовать паттерн-матчинг для проверки на null. Во-первых, можно написать if (x != null), и в C#8 x внутри консеквента станет гарантированно непустым значением. Если нужно обязательно использовать switch, то там есть паттерн null, можно написать


switch (x) {
    case is null: ...
    case _: ... //тут можно использовать x
}

Я надеюсь, что в C#8 внутри case _: значение x также станет непустым.

12 ...
7

Information

Rating
Does not participate
Registered
Activity