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