чтобы ответить на вопрос Зачем?. К примеру, возьмём haskell. Казалось бы, бесполезный по сути язык, но он приучает тебя к написанию тестируемого кода. Чистые функции и правда легко тестировать. Пожалуй это одно из главных его преимуществ. Пример:
                  
                  
                  createNewUser :: RequestBody -> IO (Either Error User)
                  
                  
                  createNewUser body =
                  
                  
                    case bodyToUser body of
                  
                  
                      Left err -> pure . Left $ err
                  
                  
                      Right (user, pass) -> do
                  
                  
                        -- Connect to DB:
                  
                  
                        db <- connectToDb
                  
                  
                        let
                  
                  
                          insertSql =
                  
                  
                            "INSERT INTO table (user_name, password) VALUES (?, ?) returning id"
                  
                  
                  
                  
                  
                        -- Persist using insert statement:
                  
                  
                        userId <- query db insertSql (user, pass)
                  
                  
                  
                  
                  
                        -- Create a response
                  
                  
                        pure . Right $ User { userName = user, userId = userId }
                  
                  
                  Функция не идеальна, можно было бы её разить на части, но подход приколный. Такой код легко протестировать.
                  
                  
                
это описание функции такое?
Обсуждают сегодня