Повідомлення telegram каналу - @yura_hunter

Логотип телеграм спільноти - Yura Hunter 2021-05-02

Yura Hunter

Кількість підписників:
49
Фото:
38 
Відео:
11 
Посилання:
56 
Категорія:
Блоги
Опис:
Нотатки про життя і роботу в IT

Канал Yura Hunter - @yura_hunter - №131

Вже неодноразово чув і бачив як в C# розробники приносять свою реалізацію монади Maybe/Option.
Написали абстрактний клас Option. Від нього ще Some і None. Все це приправили функцією Map і готово.
Воно виглядає круто і авторитетно, але приносить ще більше проблем ніж було до Option.
Задача option полягає в тому, щоб сповістити користувачів що значення може бути, а може і не бути і інших варіантів немає.
І якщо значення немає, то розробнику явно треба з цим щось зробити (наприклад написати Option.defaultValue)
Коли ж ми використовуємо свій Option в C# то у нас значення може бути Some, може не бути None… а може бути null.
І тоді при виклику Map є шанс отримати NullReferenceException. Як бачите простіше не стало, бо всеодно треба перевірити на null, а потім ще і з Option працювати.
В F# такої проблеми не буде, бо компілятор не дозволить повернути null для функції, що має тип option.
При цьому в C# є своя реалізація монади maybe, щоправда там ніхто не кричить це страшне слово.
Його називають Null-conditional operator і виглядає він отак ?.
А з недавніх часів зʼявились nullable reference types, що змушують компілятор генерувати попередження якщо ви звертаєтесь до nullable змінної без перевірки на null.
Не знаю чи це реально, але хотілося б щоб в наступних версіях C# це були не warning повідомлення, а помилки компіляції.

44
23-07-22 06:01