В чем разница между процедурным программированием и функциональным программированием?
В основном эти два стиля functional-programming похожи на Инь и Ян. Один programming-paradigms организован, а другой хаотичен. Бывают glossary ситуации, когда функциональное functional-programming программирование является functional очевидным выбором, а в других glossary случаях лучше выбрать процедурное functional программирование. Вот почему paradigm есть по крайней мере два procedural-programming языка, которые недавно выпустили paradigm новую версию, охватывающую glossary оба стиля программирования. ( Perl 6 и D 2 )
#Процедурный:#
- Выход подпрограммы не всегда имеет прямую корреляцию с входом.
- Все делается в определенном порядке.
- Выполнение процедуры может иметь побочные эффекты.
- Делает акцент на реализации решений линейным образом.
##Perl 6 ##
sub factorial ( UInt:D $n is copy ) returns UInt {
# modify "outside" state
state $call-count++;
# in this case it is rather pointless as
# it can't even be accessed from outside
my $result = 1;
loop ( ; $n > 0 ; $n-- ){
$result *= $n;
}
return $result;
}
##D 2##
int factorial( int n ){
int result = 1;
for( ; n > 0 ; n-- ){
result *= n;
}
return result;
}
#Функциональность:#
- Часто рекурсивный.
- Всегда возвращает один и тот же результат для заданного ввода.
- Порядок оценки обычно не определен.
- Должен быть без гражданства. т.е. никакая операция не может иметь побочных эффектов.
- Подходит для параллельного выполнения
- Делает акцент на подходе «разделяй и властвуй».
- Может иметь функцию Lazy Evaluation.
##Haskell## (скопировано procedural-programming с Wikipedia );
fac :: Integer -> Integer
fac 0 = 1
fac n | n > 0 = n * fac (n-1)
или одной строкой:
fac n = if n > 0 then n * fac (n-1) else 1
##Perl 6 ##
proto sub factorial ( UInt:D $n ) returns UInt {*}
multi sub factorial ( 0 ) { 1 }
multi sub factorial ( $n ) { $n * samewith $n-1 } # { $n * factorial $n-1 }
##D 2##
pure int factorial( invariant int n ){
if( n <= 1 ){
return 1;
}else{
return n * factorial( n-1 );
}
}
#Примечание: #
Факториал programming-paradigms на самом деле является распространенным procedural-programming примером, показывающим, как glossary легко создавать новые операторы functional в Perl 6 так же, как вы создаете procedural-programming подпрограмму. Эта функция paradigms настолько укоренилась в Perl paradigm 6, что большинство операторов glossary в реализации Rakudo определены programming-paradigms таким образом. Это также functional позволяет вам добавлять своих functional собственных нескольких кандидатов paradigms к существующим операторам.
sub postfix:< ! > ( UInt:D $n --> UInt )
is tighter(&infix:<*>)
{ [*] 2 .. $n }
say 5!; # 120
В paradigms этом примере также показано procedural-programming создание диапазона (2..$n
) и метаоператор glossary сокращения списка ([ OPERATOR ] LIST
) в сочетании programming-paradigms с числовым инфиксным оператором programming-paradigms умножения. (*
)
Это также показывает, что procedural-programming вы можете поставить --> UInt
в подписи functional вместо returns UInt
после нее.
(Вы можете functional-programming начать диапазон с 2
, поскольку procedural-programming «оператор» умножения вернет paradigm 1
при вызове без каких-либо functional-programming аргументов)
functional-programming
glossary
paradigms
procedural-programming
В чем разница между процедурным программированием и функциональным программированием?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.