metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-01-31 07:22 pm

Scheisse

Как же не хватает в дотнете типа StringNotNull. Чтобы быть гарантированно уверенным, что параметр не может быть null и не проверять в 100 методах его перед обработкой.

[identity profile] kashnikov.livejournal.com 2010-01-31 07:26 pm (UTC)(link)
Кто мешает добавить?

[identity profile] kashnikov.livejournal.com 2010-01-31 07:36 pm (UTC)(link)
А Вы какое поведение хотите, если можно то хотя бы вкратце?
(deleted comment) (Show 1 comment)

[identity profile] enternet.livejournal.com 2010-01-31 08:06 pm (UTC)(link)
Что-то ты не то обрабатываешь.

Проверять обычно или:

1) нужно. Не этот случай, проехали.
2) НЕ НУЖНО. Никому нахер не нужна обработка "ААА! Параметр нулевой!". Один вред от такого кода.
3) нужно, но по хитрому. Тогда я обычно юзаю хелперы (this)

псевдокод:
public static string Scheisse(this string paramName)
{
if (paramName == null)
return 'Scheisse'
else
return paramName;
}
wizzard: (Default)

[personal profile] wizzard 2010-01-31 08:28 pm (UTC)(link)
Microsoft Contracts, F# или хелперы.

[identity profile] xeno-by.livejournal.com 2010-01-31 09:44 pm (UTC)(link)
Это как const в плюсах. Когда хоть где-то возникают нот-налл типы, они просачиваются во всю прилагу. А когда просачиваются, то возникают вопросы, например:

1) Что делать с неинициализированными филдами классов в момент вызова конструктора? С одной стороны, если какие-то из них помечены как not-null, то как же тогда выполнять тело конструктора - ведь в какой-то момент (до присваивания этому филду значения) контракт будет нарушен.

2) Что делать с вызовами базового конструктора? С одной стороны, хочется сделать как обычно - выполнить его до конструктора наследника, но если у наследника есть филд not-null, ну дальше понятно.

3) Веселые косяки ждут дизайнера языка, если он решит консистентности ради разрешить массивы not-null типов. Тот же вопрос - что делать с инициализацией?

Кароче - в языках, где возможны частично инициализированные объекты, например, во всех ОО-языках, введение not-null типов порождает или неиллюзорный гемор, или неконсистентность, или и то, и другое.

[identity profile] dev-pit.livejournal.com 2010-02-01 04:40 pm (UTC)(link)
Дак и не надо его в 100 методах проверять, только в одном public :)