is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 26.06.20 09:43
Оценка:
Кто использует в коде is null вместо == null ?
Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.

Расскажите про ваш опыт написание семантически правильного кода
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: is null , is {}
От: SomeOne_TT  
Дата: 26.06.20 10:20
Оценка:
_NN>Кто использует в коде is null вместо == null ?
_NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.

_NN>Расскажите про ваш опыт написание семантически правильного кода


А NotNull ты тоже расставляешь?
Люди пишут как привыкли, МС подвозит иногда весьма странный сахар и то, что на него не переходят сразу, ни о чем плохом не говорит.
Re[2]: is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 26.06.20 10:27
Оценка: 1 (1)
Здравствуйте, SomeOne_TT, Вы писали:


_NN>>Кто использует в коде is null вместо == null ?

_NN>>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.

_NN>>Расскажите про ваш опыт написание семантически правильного кода


SO_>А NotNull ты тоже расставляешь?


Аннотации пока не ввёл, но хочу.
Я включил nullable reference.
Это тоже было встречено холодно.

SO_>Люди пишут как привыкли, МС подвозит иногда весьма странный сахар и то, что на него не переходят сразу, ни о чем плохом не говорит.


Никто не пишет object.ReferenceEquals(a, null). Неужели ваша команда да?
Все пишут a != null, что конечно не эквивалентно.
Вот и придумали a is null.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: is null , is {}
От: alexzzzz  
Дата: 26.06.20 10:47
Оценка: 3 (1)
Здравствуйте, _NN_, Вы писали:

_NN>Кто использует в коде is null вместо == null ?

_NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.
_NN>Расскажите про ваш опыт написание семантически правильного кода

Я пишу is null, когда имею в виду ReferenceEquals(obj, null) — так просто короче. Оно периодически требуется, потому что в API движка Unity оператор == переопределён для всех наследников базового UnityEngine.Object, и == null может выдавать true даже на существующих объектах. Плюс, даже если в каком-то конкретном случае возможная разница в поведении роли не играет, этот переопределённый оператор работает на порядки медленнее, чем ReferenceEquals.
Отредактировано 26.06.2020 10:51 alexzzzz . Предыдущая версия . Еще …
Отредактировано 26.06.2020 10:50 alexzzzz . Предыдущая версия .
Re[3]: is null , is {}
От: Vladek Россия Github
Дата: 26.06.20 11:25
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Никто не пишет object.ReferenceEquals(a, null). Неужели ваша команда да?


Надо писать, если реализуешь методы проверки на равенство для структур или классов.
Re[4]: is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 26.06.20 11:27
Оценка: +1
Здравствуйте, Vladek, Вы писали:

V>Здравствуйте, _NN_, Вы писали:


_NN>>Никто не пишет object.ReferenceEquals(a, null). Неужели ваша команда да?


V>Надо писать, если реализуешь методы проверки на равенство для структур или классов.


Ну вот чтобы не думать когда что писать и придумали is null.
Всегда получаешь именно то, что хотел .
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: is null , is {}
От: rameel https://github.com/rsdn/CodeJam
Дата: 26.06.20 16:11
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Кто использует в коде is null вместо == null ?


is null используем, is {} стараемся не писать, вот так is {} variable нормально, !(value is null) не используем, никто не против если кто-то напишет так is null == false, ждем когда решарпер поддержит is not null
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: is null , is {}
От: rameel https://github.com/rsdn/CodeJam
Дата: 26.06.20 16:11
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Аннотации пока не ввёл, но хочу.

_NN>Я включил nullable reference.
_NN>Это тоже было встречено холодно.

Мы всей командой ждали, когда nullable reference завезут, и когда завезли потихоньку начали избавляться от решарперовских NotNull/CanBeNull аннотации, рослиновские аннотации тоже проставляем, где можем
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: is null , is {}
От: Kolesiki  
Дата: 26.06.20 22:03
Оценка: -1
Здравствуйте, _NN_, Вы писали:

_NN>Кто использует в коде is null вместо == null ?


Я по привычке пишу ==.

_NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.


Ну прально! А с чего ты предложил? Просто потому, что "есть такие буквы"?
Re[2]: is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 27.06.20 19:34
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>Ну прально! А с чего ты предложил? Просто потому, что "есть такие буквы"?


Семантика is null и is {} однозначная в отличии от ==, != которые могут либо вызывать сравнение ссылок либо переопределённую операцию равенства.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: is null , is {}
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.06.20 00:57
Оценка: -1
https://stackoverflow.com/questions/3982658/c-sharp-object-objs-value-is-what-is

{ 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

Отредактировано 29.06.2020 1:00 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 29.06.2020 0:59 Эйнсток Файр . Предыдущая версия .
Re[2]: is null , is {}
От: rameel https://github.com/rsdn/CodeJam
Дата: 29.06.20 08:08
Оценка: -1
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>https://stackoverflow.com/questions/3982658/c-sharp-object-objs-value-is-what-is


На дату ответа посмотри и внимательно прочти вопрос на который давался ответ
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: is null , is {}
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.06.20 09:16
Оценка:
ЭФ>> https://stackoverflow.com/questions/3982658/c-sharp-object-objs-value-is-what-is

R> На дату ответа посмотри и внимательно прочти вопрос на который давался ответ


Мне не знаком этот синтаксис, тут
https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/is
и тут
https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/language-specification/expressions#the-is-operator
я подходящего примера не вижу

Просто дай пожалуйста ссылку что прочитать, чтобы правильно понять семантику этого выражение.
Re[4]: is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 29.06.20 09:56
Оценка: 4 (1)
Здравствуйте, Эйнсток Файр, Вы писали:

Про is null всё ясно ?
Вот объяснение is {}


The { } case matches any non-null object

https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/pattern-matching#implement-the-basic-toll-calculations
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: is null , is {}
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.06.20 10:34
Оценка:
_NN>Вот объяснение is {}

Мне непонятно, почему ты пишешь is {}, в то время как на самом деле это switch {{}:}
Re: is null
От: Qbit86 Кипр
Дата: 29.06.20 10:49
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Кто использует в коде is null вместо == null ?


Майкрософт; в новом коде, по крайней мере. (Я хотел привести цитату кого-то из разработчиков Майкрософт, что теперь «is null» предпочтительный способ, но не нашёл, где это встречал.)

А вот «is {}» не используют.

_NN>Я предложил в коде писать правильно через is, но встретил недопонимание со стороны коллег.


Иными словами, тебе и им нужно социальное подкрепление :) Кидай им ссылку на https://github.com/dotnet/runtime

_NN>Расскажите про ваш опыт написание семантически правильного кода :)


Если вне Unity 3D курильщика, то опыт положительный.
Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 29.06.2020 10:51 Qbit86 . Предыдущая версия .
Re[6]: is null , is {}
От: _NN_ www.nemerleweb.com
Дата: 29.06.20 11:00
Оценка: 4 (1)
Здравствуйте, Эйнсток Файр, Вы писали:

_NN>>Вот объяснение is {}


ЭФ>Мне непонятно, почему ты пишешь is {}, в то время как на самом деле это switch {{}:}


Познакомитесь с сопоставления с образцом:
https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching
https://devblogs.microsoft.com/dotnet/do-more-with-patterns-in-c-8-0/

Пример:
if (shape is Square s)


Можно использовать это как с switch так и с is
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: is null
От: _NN_ www.nemerleweb.com
Дата: 29.06.20 11:01
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, _NN_, Вы писали:


_NN>>Кто использует в коде is null вместо == null ?


Q>Майкрософт; в новом коде, по крайней мере. (Я хотел привести цитату кого-то из разработчиков Майкрософт, что теперь «is null» предпочтительный способ, но не нашёл, где это встречал.)


Q>А вот «is {}» не используют.

Потому что будет "is not null" в C# 9
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: is null , is {}
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.06.20 12:30
Оценка:
_NN> Расскажите про ваш опыт написание семантически правильного кода

Много лет назад, когда ещё не было шаблонов в C++, их начали вводить.
И не все люди умели ими пользоваться.

Я тогда тоже удивлялся, как так, можно "не понимать" шаблоны.

Но на самом деле, это означает, что в компании не поставлен процесс документирования.
Иначе менеджер бы мог поставить задачу написать туториал по теме знающим членам команды,
и задачу изучить материал незнающим.
Re[3]: is null , is {}
От: karbofos42 Россия  
Дата: 30.06.20 06:46
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Kolesiki, Вы писали:


K>>Ну прально! А с чего ты предложил? Просто потому, что "есть такие буквы"?


_NN>Семантика is null и is {} однозначная в отличии от ==, != которые могут либо вызывать сравнение ссылок либо переопределённую операцию равенства.


Ну, в первую очередь сильно желательно долго думать, прежде чем писать классы, которые не умеют нормально объекты с null сравнивать.
Если уже решились так переопределять операторы, тогда можно решиться на is null, а если такой фигнёй никто не занимается, то и разницы принципиальной нет что используется.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.