Sobes.tech
Middle

Mis on funktsionaalne programmeerimine?

sobes.tech AI

Vastus AI-lt

Funktsionaalne programmeerimine — see on programmeerimisparadigma, kus arvutused käsitletakse kui matemaatiliste funktsioonide arvutusi, vältides muutuva oleku ja muudetavate andmete kasutamist.

Peamised põhimõtted:

  • Puhad funktsioonid (Pure Functions): Funktsioonid, mis sama sisendiga alati tagastavad sama tulemuse ning millel ei ole kõrvaltoimeid (näiteks väliste muutujate muutmine, sisend/väljund).
  • Muutumatuse põhimõte (Immutability): Andmed ei muutu pärast loomist. Iga "muutus" loob uue koopi andmetest.
  • Funktsioonid kui esmaklassilised objektid (Functions as First-Class Citizens): Funktsioone saab edasi anda argumentidena, tagastada teistest funktsioonidest ning omistada muutujatele.
  • Viidete läbipaistvus (Referential Transparency): Väärtusega võib asendada selle väljendi ilma programmi käitumist muutmata. See on otseselt seotud puhaste funktsioonidega.

Eelised:

  • Prognoositavus: Lihtsam testida ja siluda, kuna kõrvaltoimeid pole.
  • Paralleelne töö: Lihtsam koodi paralleelne täitmine, kuna ühine muutuva oleku pole.
  • Koodi hooldatavus: Kood muutub modulaarsemaks ja arusaadavamaks.

Näide JavaScriptis:

// Ebaselge funktsioon (muudab välist olekut)
let total = 0;
function addToTotal(value) {
  total += value;
  return total;
}

// Puhas funktsioon (ei muuda välist olekut, tagastab uue väärtuse)
function add(a, b) {
  return a + b;
}

// Funktsioonide kui esmaklassiliste objektide kasutamine (funktsioon argumendina)
function processArray(arr, handler) {
  return arr.map(handler);
}

const numbers = [1, 2, 3];
const doubledNumbers = processArray(numbers, x => x * 2);

Kuigi JavaScript ei ole rangelt funktsionaalne keel, võimalused (nagu puhtad funktsioonid, massiivide meetodid map, filter, reduce) võimaldavad rakendada funktsionaalprogrammeerimise põhimõtteid. Frontend arenduses kasutatakse FP-d sageli teekides ja raamistikus (näiteks Redux, React hooks).