Comments 20
UFO just landed and posted this here
Код на erlang чем-то похож.
Потрясающая статья! Но думаю, если использовать do end вместо { }, то код смотрелся красивей.
Без синтаксического сахара как-то… несладко. :-)
Спасибо за статью! Если кто-то хочет продолжения банкета, то вот: experthuman.com/programming-with-nothing
Особо никто не машет программировать на руби как на php. Но, увы, а, для большинства, к счастью, мы живем в эпоху брутфорса.
return [nil,"Name is required"] if String(person.(:name)) == ''
По-моему, возврат по условию выглядит совсем не в функциональном стиле.
learnyouahaskell.com/syntax-in-functions#guards-guards
По-моему, очень похоже. А код на Haskell назвать написанным не в функциональном стиле язык не поворачивается.
bmiTell :: (RealFloat a) => a -> String
bmiTell bmi
| bmi <= 18.5 = "You're underweight, you emo, you!"
| bmi <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
| bmi <= 30.0 = "You're fat! Lose some weight, fatty!"
| otherwise = "You're a whale, congratulations!"
По-моему, очень похоже. А код на Haskell назвать написанным не в функциональном стиле язык не поворачивается.
Да, но тут полный кейс с результирующим значением. Ему больше соответствует if … elsif … else …
Так в коде на Ruby
Скорее вы напишете так (хотя, это далеко не лучший вариант):
return
, так что else
просто не нужен. Вы же не будете писать на C так:if (bmi <= 18.5)
return "You're underweight, you emo, you!";
else if (bmi <= 25.0)
return "You're supposedly normal. Pffft, I bet you're ugly!";
else if (bmi <= 30.0)
return "You're fat! Lose some weight, fatty!";
else
return "You're a whale, congratulations!";
Скорее вы напишете так (хотя, это далеко не лучший вариант):
if (bmi <= 18.5)
return "You're underweight, you emo, you!";
if (bmi <= 25.0)
return "You're supposedly normal. Pffft, I bet you're ugly!";
if (bmi <= 30.0)
return "You're fat! Lose some weight, fatty!";
return "You're a whale, congratulations!";
else
в этом случае не несет никакой смысловой нагрузки. И так ясно, что после return
следующий if
выполняться не будетСкорее я напишу так:
А явные return'ы пусть остаются для C, который вы зачем-то привели в пример.
add_person = ->(name,birthdate,gender) {
if String(name) == '' # валидации место в отдельной функции
[nil,"Name is required"]
elsif String(birthdate) == ''
[nil,"Birthdate is required"]
elsif String(gender) == ''
[nil,"Gender is required"]
elsif gender != 'male' && gender != 'female'
[nil,"Gender must be 'male' or 'female'"]
else
id = insert_person.(name,birthdate,gender) # side effect
[[name,birthdate,gender,id],nil]
end
}
А явные return'ы пусть остаются для C, который вы зачем-то привели в пример.
Если мы говорим про ruby, то к слову сказать использование String в качестве проверки на nil как минимум не корректно. Например String('') тоже вернет пустую строку. Используйте метод nil?..
В остальном интересная статья. Расширяет горизонты, особенно новичкам…
В остальном интересная статья. Расширяет горизонты, особенно новичкам…
Sign up to leave a comment.
Занимательное функциональное программирование в Ruby