AB
Size: a a a
AB
AB
AB
AB
ЛЛ
Зачем?
. К примеру, возьмём 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 }
ЛЛ
AB
PG
ЛЛ
PG
PG
AB
ЛЛ
AB
PG
ЛЛ
AB
PG
AB
Зачем?
. К примеру, возьмём 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 }
AB