Функциональное программирование
Попалась тут переводная статья, объясняющая принципы функционального программирования на примере Питона. Всем кто занимается программированием профессионально и нет, и не в курсе что такое FP советую зачитать - Функциональное программирование на языке Python. Статья написана доступно и я думаю будет полезна даже тем кто Питон не использует, как я, например. Не согласен только с двумя вещами:
- Автор обидел мой любимый perl, записав его в компанию языков лишенных возможности писать в стиле FP. На самом деле в perl есть все что он описывает в статье, а в рекомендациях по хорошему стилю программирования на perl всячески рекомендуют этим пользоваться, там где уместно. Большинство так и делает - 99 процентов программеров на perl напишут:
open(IN,"<filename") or die;
вместо
unless(open(IN,"<filename")) { die; }
- Помоему, FP использовать нужно только там, где это делает код короче и читабельней. Злоупотреблять им явно не стоит. А то что функциональный подход стоит использовать для уменьшения количества ошибок в программе, это просто бред. Сравните примеры из статьи.
императивный код:
xs = (1,2,3,4)
ys = (10,15,3,22)
bigmuls = []
#...прочий код...
for x in xs:
for y in ys:
#...прочий код...
if x*y > 25:
bigmuls.append((x,y))
#...прочий код...
#...прочий код...
print bigmuls
функциональный код:
bigmuls = lambda xs,ys: filter(lambda (x,y):x*y > 25, combine(xs,ys))
combine = lambda xs,ys: map(None, xs*len(ys), dupelms(ys,len(xs)))
dupelms = lambda lst,n: reduce(lambda s,t:s+t, map(lambda l,n=n: [l]*n, lst))
print bigmuls((1,2,3,4),(10,15,3,22))
Просто очевидно какой вариант читабельней, проще пишется и проще отлаживается.
0 Comments:
Отправить комментарий
<< Home