Ngayon ay tatalakayin natin ang functional programming. Higit na partikular, titingnan natin ang pagkakaiba sa pagitan ng declarative at imperative programming.

Una, mabilis nating talakayin ang mga tuntunin. Pagkatapos ay ihahambing natin ang mga istilo ng programming na ito at tingnan kung paano lumalabas ang mga ito sa Java at kung sinusuportahan ng wika ang kanilang masayang magkakasamang buhay.

Ang functional programming ay isang paradigm kung saan ang mga function ay nauunawaan bilang mga mathematical function, hindi bilang mga subroutine, tulad ng sa procedural programming . Ibig sabihin, sa dalawang paradigm na ito ay naiiba ang kahulugan ng salitang "function". Tandaan ito at huwag silang lituhin. Hindi ka hinahayaan ng Java na malito, dahil ang mga subprogram ay tinutukoy bilang "mga pamamaraan", samantalang ang mga pag-andar ay tumutukoy sa mga pag-andar ng matematika (din: mga function ng lambda o sanggunian ng pamamaraan).

Sa pagsasagawa, sa procedural programming, ang mga function ay nakadepende hindi lamang sa mga variable ng input, kundi pati na rin sa mga panlabas na salik (tulad ng iba pang mga variable sa labas ng function o ang estado ng system). Nangangahulugan iyon na ang pagtawag sa parehong function na may parehong mga argumento ngunit sa ibang konteksto ay maaaring magdulot ng magkakaibang mga resulta. Sa functional programming, kapag ang isang function ay tinatawag na may parehong mga argumento, ito ay palaging gumagawa ng parehong resulta, dahil ang mga function ay nakasalalay lamang sa input data.

Mga kalamangan ng functional programming

  • Pinahusay na pagiging maaasahan ng code
  • Maginhawang pagsubok sa yunit
  • Mga pagkakataon para sa pag-optimize ng code sa panahon ng compilation
  • Mga pagkakataon para sa concurrency

Kahinaan ng functional programming

Ang mga disadvantage ng functional programming ay nagmumula sa lahat ng parehong mga tampok na ito:

  • Walang mga pahayag ng pagtatalaga. Sa halip, ang mga bagong halaga ay iniimbak sa mga bagong variable, na humahantong sa pangangailangan na patuloy na maglaan at awtomatikong maglabas ng memorya. Bilang resulta, ang napakahusay na pangongolekta ng basura ay isang mahalagang bahagi ng anumang sistema na nagsasagawa ng mga functional na programa.

  • Ang hindi mahigpit na pagsusuri ay nangangahulugan na ang pagkakasunud-sunod ng mga tawag sa pagpapaandar ay hindi mahuhulaan, na lumilikha ng mga problema sa I/O kapag ang pagkakasunud-sunod ng mga pagpapatakbo ay mahalaga.

Na nagtatapos sa aming mabilis na pagsusuri ng functional programming. Ngayon ay lumipat tayo sa mga istilo ng programming.

Ang imperative programming ay isang programming paradigm na nailalarawan ng mga sumusunod na tampok:

  • Ang source code ng programa ay binubuo ng mga tagubilin (mga pahayag).

  • Ang mga tagubilin ay dapat sundin nang sunud-sunod.

  • Ang data na nabuo sa pamamagitan ng pagsasagawa ng mga nakaraang tagubilin ay mababasa mula sa memorya ng mga kasunod na tagubilin.

  • Ang data na nakuha sa pamamagitan ng pagpapatupad ng isang pagtuturo ay maaaring isulat sa memorya.

Narito ang mga pangunahing tampok ng mga imperative na wika:

  • Paggamit ng boolean variable.
  • Paggamit ng assignment operator.
  • Paggamit ng tambalang ekspresyon.
  • Paggamit ng mga subroutine.

Ang isang imperative na programa ay tulad ng mga order na ipinahayag sa imperative na mood sa natural na mga wika. Sa madaling salita, ang isang imperative na programa ay isang pagkakasunod-sunod ng mga utos.

Kasama sa mga imperative na programming language ang C at C++.

Ang declarative programming ay isang programming paradigm kung saan ang solusyon sa isang problema ay tinukoy. Ibig sabihin, ang huling resulta ay inilarawan, hindi ang paraan upang makamit ito. Ang HTML ay isang halimbawa ng isang deklaratibong wika. Kapag nagsusulat ng mga tag sa wikang ito, hindi namin iniisip kung paano iguguhit ang mga elemento sa pahina. Inilalarawan lang namin kung ano dapat ang hitsura ng page.

Ang isa pang declarative programming language ay SQL.

Ihambing natin ang dalawang istilo ng programming sa pamamagitan ng pagsasaalang-alang sa isang halimbawa sa totoong buhay: paano natin ipapaliwanag sa isang tao kung paano makarating sa isang partikular na lugar?

Isipin ang sitwasyong ito: isang lalaki ang lumapit sa amin sa kalye at nagtanong, "Paano ako makakapunta sa museo?"

Gamit ang isang mahalagang diskarte, bibigyan namin siya ng algorithm kung paano makarating doon sa paglalakad:

  • lumingon ka dito
  • maglakad ng 2 bloke sa isang tuwid na linya
  • lumiko sa kanan

Sa isang deklaratibong diskarte, ibibigay lang namin ang address, at pagkatapos ay ang tao ay pupunta sa tamang lugar nang mag-isa.

Ang Java ay kasalukuyang isang multi-paradigm programming language . Multi-paradigm ay nangangahulugan na ang wika ay sumusuporta sa ilang paradigm.

Sa mahabang panahon ng ebolusyon nito, pinalawak ng wika ang object-oriented na modelo nito upang ang mga gumagamit nito ay may iba't ibang tool at maaaring pumili ng pinakamahusay para sa kanilang partikular na gawain.

Bilang resulta, kasalukuyang sinusuportahan ng Java ang parehong imperative na diskarte (tulad ng pagsusulat ng code para sa mga method call) at ang declarative na diskarte (tulad ng mga anotasyong available sa runtime).

Ibuod natin:

  • Mayroong iba't ibang mga paradigm sa programming.

  • May mga deklaratibo at imperative na paraan.

  • Dapat mong piliin ang isa na pinakaangkop para sa gawain sa kamay.

  • Ang Java ay isang multi-paradigm na wika na sumusuporta sa parehong mga diskarte.