В последние годы устал твердить, что "в коде предметной логики не должно быть проверок на нулл"
Представьте, вот вы - ваш персонаж. Вы бегаете, стреляете из лука, даже не знаете о существовании Unity (везет ведь кому-то...), и в какой-то момент проверяете что торговец в городе... не равен пустой ссылке на объект в оперативной памяти...
Для этого нам и нужны монады: штука из функционального программирования, обертка над каким-либо значением, которая уже содержит некоторый набор операций. Такой как проверка на нулл, например.
Помимо Nullable, в туторе еще рассказывают про Optional и Either. Первая похожа на nullable но дает возможность определить другой набор операций при отсутствии значения. Вторая дает возможность обрабатывать различные значения в зависимости от условий. Например, основное и дополнительное (или ближнее/дальнее) оружие у игрока.
Во многих случаях я бы предпочел наоборот инкапсулировать эту логику в объект предметной области, а не декорировать его. Хочется все таки максимально вглубь классов убрать эти некрасивые вызовы, чтобы вместо:
Either<Weapon, Weapon> weapon;
weapon.Match(
left => //do something with primary weapon,
right => //do something with secondary weapon);
Была красивая и короткая запись:
WeaponPair weapons;
weapons.DoSomething();
Фух, так давно веду канал, пора бы и за код начать душнить)
Ставьте 🔥если понравился такой формат
#туториал@GamedevForge