_NN>Кто использует в коде is null вместо == null ? _NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.
_NN>Расскажите про ваш опыт написание семантически правильного кода
А NotNull ты тоже расставляешь?
Люди пишут как привыкли, МС подвозит иногда весьма странный сахар и то, что на него не переходят сразу, ни о чем плохом не говорит.
_NN>>Кто использует в коде is null вместо == null ? _NN>>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.
_NN>>Расскажите про ваш опыт написание семантически правильного кода
SO_>А NotNull ты тоже расставляешь?
Аннотации пока не ввёл, но хочу.
Я включил nullable reference.
Это тоже было встречено холодно.
SO_>Люди пишут как привыкли, МС подвозит иногда весьма странный сахар и то, что на него не переходят сразу, ни о чем плохом не говорит.
Никто не пишет object.ReferenceEquals(a, null). Неужели ваша команда да?
Все пишут a != null, что конечно не эквивалентно.
Вот и придумали a is null.
Здравствуйте, _NN_, Вы писали:
_NN>Кто использует в коде is null вместо == null ? _NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег. _NN>Расскажите про ваш опыт написание семантически правильного кода
Я пишу is null, когда имею в виду ReferenceEquals(obj, null) — так просто короче. Оно периодически требуется, потому что в API движка Unity оператор == переопределён для всех наследников базового UnityEngine.Object, и == null может выдавать true даже на существующих объектах. Плюс, даже если в каком-то конкретном случае возможная разница в поведении роли не играет, этот переопределённый оператор работает на порядки медленнее, чем ReferenceEquals.
Здравствуйте, Vladek, Вы писали:
V>Здравствуйте, _NN_, Вы писали:
_NN>>Никто не пишет object.ReferenceEquals(a, null). Неужели ваша команда да?
V>Надо писать, если реализуешь методы проверки на равенство для структур или классов.
Ну вот чтобы не думать когда что писать и придумали is null.
Всегда получаешь именно то, что хотел .
Здравствуйте, _NN_, Вы писали:
_NN>Кто использует в коде is null вместо == null ?
is null используем, is {} стараемся не писать, вот так is {} variable нормально, !(value is null) не используем, никто не против если кто-то напишет так is null == false, ждем когда решарпер поддержит is not null
Здравствуйте, _NN_, Вы писали:
_NN>Аннотации пока не ввёл, но хочу. _NN>Я включил nullable reference. _NN>Это тоже было встречено холодно.
Мы всей командой ждали, когда nullable reference завезут, и когда завезли потихоньку начали избавляться от решарперовских NotNull/CanBeNull аннотации, рослиновские аннотации тоже проставляем, где можем
{ and } are opening and closing braces and symbolic of the start and finish of an object. Hence an empty object with no special properties is depicted in shorthand as {}. The debugger uses this notation to help you visually distinguish between an empty object, an empty string and null.
You could possibly use myObj.GetType().GetProperties().Count == 0
Здравствуйте, _NN_, Вы писали:
_NN>Кто использует в коде is null вместо == null ?
Майкрософт; в новом коде, по крайней мере. (Я хотел привести цитату кого-то из разработчиков Майкрософт, что теперь «is null» предпочтительный способ, но не нашёл, где это встречал.)
А вот «is {}» не используют.
_NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.
Иными словами, тебе и им нужно социальное подкрепление :) Кидай им ссылку на https://github.com/dotnet/runtime
_NN>Расскажите про ваш опыт написание семантически правильного кода :)
Если вне Unity 3D курильщика, то опыт положительный.
Здравствуйте, Эйнсток Файр, Вы писали:
_NN>>Вот объяснение is {}
ЭФ>Мне непонятно, почему ты пишешь is {}, в то время как на самом деле это switch {{}:}
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, _NN_, Вы писали:
_NN>>Кто использует в коде is null вместо == null ?
Q>Майкрософт; в новом коде, по крайней мере. (Я хотел привести цитату кого-то из разработчиков Майкрософт, что теперь «is null» предпочтительный способ, но не нашёл, где это встречал.)
Q>А вот «is {}» не используют.
Потому что будет "is not null" в C# 9
_NN> Расскажите про ваш опыт написание семантически правильного кода
Много лет назад, когда ещё не было шаблонов в C++, их начали вводить.
И не все люди умели ими пользоваться.
Я тогда тоже удивлялся, как так, можно "не понимать" шаблоны.
Но на самом деле, это означает, что в компании не поставлен процесс документирования.
Иначе менеджер бы мог поставить задачу написать туториал по теме знающим членам команды,
и задачу изучить материал незнающим.
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, Kolesiki, Вы писали:
K>>Ну прально! А с чего ты предложил? Просто потому, что "есть такие буквы"?
_NN>Семантика is null и is {} однозначная в отличии от ==, != которые могут либо вызывать сравнение ссылок либо переопределённую операцию равенства.
Ну, в первую очередь сильно желательно долго думать, прежде чем писать классы, которые не умеют нормально объекты с null сравнивать.
Если уже решились так переопределять операторы, тогда можно решиться на is null, а если такой фигнёй никто не занимается, то и разницы принципиальной нет что используется.
Здравствуйте, _NN_, Вы писали:
_NN>Семантика is null и is {} однозначная в отличии от ==, != которые могут либо вызывать сравнение ссылок либо переопределённую операцию равенства.
Ну так в том и вопрос! Если ты (наивный!) переопределишь == и будешь надеяться, что "объекты не равны", то при попадании в чужой "is null" твой код в пролёте! Сам себе расставил грабли. Ты не можешь знать, кто и как в будущем распорядится твоими объектами, поэтому всегда надо быть готовым, что == будет "немного другой".