assert
От: _ichensky Европа https://github.com/ichensky
Дата: 31.10.15 02:24
Оценка:
Как в .net рациональной всего писать такой код:
void func(Obj o){
    assert(o != null);
    ...
}


что бы во время компиляции, если вызов функции будет такой:
func(null);

вылетел красный варнинг в Output, что так вызывать данную функцию нельзя,
а в /Release моде все ассерты в msil были убраны.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re: assert
От: Sinix  
Дата: 31.10.15 09:09
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>Как в .net рациональной всего писать такой код:


_>вылетел красный варнинг в Output, что так вызывать данную функцию нельзя,

_>а в /Release моде все ассерты в msil были убраны.
Решарпер + [NotNull] или самому писать проверку рослина (начать с примера отсюда, по аналогии с проверкой на make constant или вот отсюда).
Re: assert
От: VladCore  
Дата: 01.11.15 18:05
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>Как в .net рациональной всего писать такой код:

_>
_>void func(Obj o){
_>    assert(o != null);
_>    ...
_>}
_>



_>а в /Release моде все ассерты в msil были убраны.


если в продакшене вываливается NullReferenceException, что обычно и бывает при игноре наллов, то обычно лид вешается на витой паре делает себе сепукку
Отредактировано 01.11.2015 18:12 VladCore . Предыдущая версия . Еще …
Отредактировано 01.11.2015 18:08 VladCore . Предыдущая версия .
Отредактировано 01.11.2015 18:06 VladCore . Предыдущая версия .
Отредактировано 01.11.2015 18:06 VladCore . Предыдущая версия .
Re: assert
От: TK Лес кывт.рф
Дата: 01.11.15 18:30
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>что бы во время компиляции, если вызов функции будет такой:

_>
_>func(null);
_>

_>вылетел красный варнинг в Output, что так вызывать данную функцию нельзя,
_>а в /Release моде все ассерты в msil были убраны.

Смотрите в ConditionalAttribute
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: assert
От: vdimas Россия  
Дата: 06.11.15 16:28
Оценка:
Здравствуйте, _ichensky, Вы писали:

_>вылетел красный варнинг в Output, что так вызывать данную функцию нельзя,

_>а в /Release моде все ассерты в msil были убраны.

Debug.Assert(arg != null);

В релизе его не будет.
Re[2]: assert
От: vdimas Россия  
Дата: 06.11.15 16:29
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>если в продакшене вываливается NullReferenceException, что обычно и бывает при игноре наллов


ТС не предлагает их игнорить.

Проверять аргументы обязательно только для публичных или защищённых мемберов, для приватных же достаточно Debug.Assert + тестирование инвариантов.
Re[2]: assert
От: Sinix  
Дата: 06.11.15 16:33
Оценка:
Здравствуйте, vdimas, Вы писали:

V>

Debug.Assert(arg != null);


Оно как бы и да, но с учётом

что бы во время компиляции ... вылетел красный варнинг

как бы и нет
Re[3]: assert
От: VladCore  
Дата: 06.11.15 16:50
Оценка:
Здравствуйте, vdimas, Вы писали:

VC>>если в продакшене вываливается NullReferenceException, что обычно и бывает при игноре наллов


V>ТС не предлагает их игнорить.


не может быть!

_>а в /Release моде все ассерты в msil были убраны.

Re[4]: assert
От: vdimas Россия  
Дата: 07.11.15 11:29
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>не может быть!

VC>

_>>а в /Release моде все ассерты в msil были убраны.


Это ничему не противоречит с учетом вырезанного тобой:

Проверять аргументы обязательно только для публичных или защищённых мемберов, для приватных же достаточно Debug.Assert + тестирование инвариантов.


Рантайм-проверка аргументов приватных методов ПОСЛЕ факта вызова этого метода с неверными аргументами — это роспись в слабоумии, ИМХО.
Re[3]: assert
От: vdimas Россия  
Дата: 07.11.15 11:32
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Оно как бы и да, но с учётом

S>

S>что бы во время компиляции ... вылетел красный варнинг

S>как бы и нет

уупс, не обратил внимание на "компиляцию".

Всё-равно фигня. Даже с учетом имеющихся или самописных тулзин, в общем случае требуется аналог чего-то вроде constexpr для нынешнего С++, т.к. если значение аргумента вычислимое, то всё не так просто.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.