Habr<p>Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 5. Ошибки и исключения</p><p>Мы закончили обсуждать тело функции, и теперь пришло время вывода данных. Простые сценарии мы сразу отбросим, так как по ним уже хорошо прошлись, когда изучали выражения. Мы начнём с косяков выполнения, под которыми я подразумеваю не баги, а непреодолимые препятствия с различной степенью неожиданности. Это может прозвучать странно, так как аварийный выход не подпадает под определения output , codomain и т. д. Я с этим согласен и пересматривать эти термины не собираюсь. Однако меня интересует не только легитимная часть, но и вообще всё, что выходит из функции. Вплоть до того, что в следующих главах я начну включать в это аморфное понятие сайд-эффекты, фоновые процессы и много чего другого. Я начал с ошибок, потому что Godot эту тему фактически проигнорировал, и вряд ли за ненадобностью, так как несколько раз мне уже было очень больно. У меня всё ещё не дошли руки покопаться в GDScript, так что я понятия не имею, вызван ли этот пробел ограничениями языка или архитектурным решением, но в любом случае нам его надо закрывать. C# и ФП пропагандируют разные подходы к ошибкам. F#, будучи на перепутье, испытывает влияние обоих. Можно много говорить про плюсы взаимного обогащения культур, но судя по публичным баталиям, это не совсем наш случай. Вместо синтеза я куда чаще наблюдаю эмоциональные взрывы в среде представителей то одного, то другого лагеря. Я не буду ввязываться в эту борьбу (в этот раз) и сосредоточусь на решении более насущной задачи. Мне нужно доработать интероп так, чтобы он соблюдал привычную систему распределения ответственности. Так что сегодня только рутина, без красивых ходов и эффектных бросков.</p><p><a href="https://habr.com/ru/companies/first/articles/909536/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/first/ar</span><span class="invisible">ticles/909536/</span></a></p><p><a href="https://zhub.link/tags/f" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>f</span></a># <a href="https://zhub.link/tags/net" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>net</span></a> <a href="https://zhub.link/tags/godot" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>godot</span></a> <a href="https://zhub.link/tags/godotengine" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>godotengine</span></a> <a href="https://zhub.link/tags/exception" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>exception</span></a> <a href="https://zhub.link/tags/error" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>error</span></a> <a href="https://zhub.link/tags/result" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>result</span></a></p>