Между ифами может быть много кода, причем в разных местах — разного. Не всегда возможно перенести ифы в одну функцию.
То есть проверки условий могут быть разбросаны по разным местам системы. К примеру, проверили где-то наверху, что переменная не равна нулю, и дальше с помощью типов это знание растекается по всем функциям.