Днес ще се докоснем до функционалното програмиране. По-конкретно, ще разгледаме разликата между декларативното и императивното програмиране.

Първо, нека бързо да прегледаме условията. След това ще сравним тези стилове на програмиране и ще видим How изглеждат в Java и дали езикът поддържа тяхното щастливо съвместно съществуване.

Функционалното програмиране е парадигма, при която функциите се разбират като математически функции, а не като подпрограми, Howто при proceduresното програмиране . Тоест в тези две парадигми думата "функция" се тълкува по различен начин. Запомнете това и не ги бъркайте. Java не ви позволява да се объркате, тъй като подпрограмите се наричат ​​"методи", докато функциите се отнасят за математически функции (също: ламбда функции or препратка към метод).

На практика при proceduresното програмиране функциите зависят не само от входните променливи, но и от външни фактори (като други променливи извън функцията or състоянието на системата). Това означава, че извикването на същата функция със същите аргументи, но в различен контекст може да доведе до различни резултати. Във функционалното програмиране, когато една функция се извиква с едни и същи аргументи, тя винаги произвежда един и същ резултат, тъй като функциите зависят само от входните данни.

Плюсове на функционалното програмиране

  • Подобрена надеждност на codeа
  • Удобно тестване на единици
  • Възможности за оптимизиране на codeа по време на компилация
  • Възможности за паралелност

Минуси на функционалното програмиране

Недостатъците на функционалното програмиране произтичат от всички тези същите характеристики:

  • Няма изявления за възлагане. Вместо това новите стойности се съхраняват в нови променливи, което води до необходимостта от постоянно разпределяне и автоматично освобождаване на памет. В резултат на това високоефективното събиране на отпадъци е съществена част от всяка система, която изпълнява функционални програми.

  • Нестриктната оценка означава, че редът на извикванията на функции е непредсказуем, което създава I/O проблеми, когато редът на операциите е важен.

Това приключва нашия бърз преглед на функционалното програмиране. Сега да преминем към стиловете на програмиране.

Императивното програмиране е програмна парадигма, характеризираща се със следните характеристики:

  • Изходният code на програмата се състои от инструкции (изявления).

  • Инструкциите трябва да се следват последователно.

  • Данните, генерирани чрез изпълнение на предишни инструкции, могат да бъдат прочетени от паметта чрез последващи инструкции.

  • Данните, получени чрез изпълнение на инструкция, могат да бъдат записани в паметта.

Ето основните характеристики на императивните езици:

  • Използване на булеви променливи.
  • Използване на оператора за присвояване.
  • Използване на съставни изрази.
  • Използване на подпрограми.

Императивната програма е като заповеди, изразени в повелително наклонение в естествените езици. С други думи, императивната програма е последователност от команди.

Императивните езици за програмиране включват C и C++.

Декларативното програмиране е парадигма на програмиране, в която е посочено решението на даден проблем. Тоест описва се крайният резултат, а не начинът за постигането му. HTML е пример за декларативен език. Когато пишем етикети на този език, ние не мислим How ще бъдат изобразени елементите на pageта. Просто описваме How трябва да изглежда pageта.

Друг декларативен език за програмиране е SQL.

Нека сравним двата стила на програмиране , като разгледаме пример от реалния живот: How да обясним на човек How да стигне до определено място?

Представете си тази ситуация: един човек идва при нас на улицата и пита: "Как да стигна до музея?"

С императивен подход бихме му предоставor алгоритъма How да стигне пеша:

  • обърни се точно тук
  • вървете 2 пресечки по права линия
  • завийте надясно

При декларативен подход ние просто даваме address и след това човекът сам ще стигне до правилното място.

В момента Java е многопарадигмен език за програмиране . Мултипарадигма означава, че езикът поддържа няколко парадигми.

По време на дългата си еволюция езикът разшири своя обектно-ориентиран модел, така че потребителите му да разполагат с различни инструменти и да могат да изберат най-добрия за своята конкретна задача.

В резултат на това Java в момента поддържа Howто императивния подход (като писане на code за извиквания на метод), така и декларативния подход (като анотациите, налични по време на изпълнение).

Нека обобщим:

  • Има различни програмни парадигми.

  • Има декларативен и императивен подход.

  • Трябва да изберете този, който е най-подходящ за поставената задача.

  • Java е многопарадигмен език, който поддържа и двата подхода.