DEV Community

Jelena Petkovic
Jelena Petkovic

Posted on

Razumevanje funkcija višeg reda (Higher-Order Functions) u JavaScript-u

Ako učite JavaScript, verovatno ste naišli na pojam Funkcija Višeg Reda (Higher-Order Functions). Iako zvuči složeno, nije toliko komplikovano. JavaScript, kao funkcionalni programski jezik, omogućava korišćenje ovih funkcija, koje su ključne u programiranju zasnovanom na funkcijama.

Funkcionalno Programiranje

Funkcionalno programiranje podrazumeva kreiranje i korišćenje funkcija kao primarnih gradivnih elemenata. U ovom pristupu, funkcije se mogu prosleđivati kao parametri drugim funkcijama ili vraćati kao rezultati. Ovaj način razmišljanja omogućava organizovano i efikasno pisanje koda.

Prvoklasne Funkcije

JavaScript tretira funkcije kao "prvoklasne građane". To znači da su funkcije objekti — specifična vrsta objekata koji se mogu dodeljivati promenljivama, prosleđivati kao parametri i koristiti u različitim kontekstima, kao što je slučaj sa brojevima ili stringovima.

Primer:

function pozdrav() {
  console.log('Zdravo, svete!');
}
pozdrav();  // Ispisuje 'Zdravo, svete!'

// Dodavanje svojstva funkciji
pozdrav.jezik = 'srpski';
console.log(pozdrav.jezik); // Ispisuje 'srpski'
Enter fullscreen mode Exit fullscreen mode

Dodeljivanje Funkcija Promenljivama

U JavaScriptu, funkcije se mogu dodeljivati promenljivama:

const kvadrat = function(x) {
  return x * x;
};
console.log(kvadrat(5));  // Ispisuje 25
Enter fullscreen mode Exit fullscreen mode

Prosleđivanje Funkcija kao Parametara

Jedna od glavnih karakteristika prvoklasnih funkcija je mogućnost da se proslede kao argumenti drugim funkcijama:

function formalniPozdrav() {
  console.log("Kako ste?");
}
function neformalniPozdrav() {
  console.log("Šta ima?");
}
function pozdravVrsta(vrsta, formalan, neformalan) {
  if (vrsta === 'formalan') {
    formalan();
  } else if (vrsta === 'neformalan') {
    neformalan();
  }
}
pozdravVrsta('neformalan', formalniPozdrav, neformalniPozdrav);  // Ispisuje 'Šta ima?'
Enter fullscreen mode Exit fullscreen mode

Funkcije Višeg Reda

Funkcije Višeg Reda su funkcije koje prihvataju druge funkcije kao argumente ili ih vraćaju kao rezultate. Ovo omogućava elegantnije i sažetije pisanje koda. Primeri uključuju metode map, filter i reduce.

map Metod

map kreira novi niz tako što poziva funkciju na svakom elementu postojećeg niza:

Bez map metode:

const arr1 = [10, 20, 30, 40, 50];
const arr2 = [];
for (let i = 0; i < arr1.length; i++) {
  arr2.push(arr1[i] * 2);
}
console.log(arr2);  // [20, 40, 60, 80, 100]
Enter fullscreen mode Exit fullscreen mode

Sa map metodom:

const arr1 = [10, 20, 30. 40, 50];
const arr2 = arr1.map(item => item * 2);
console.log(arr2);  // [20, 40, 60, 8-, 100]
Enter fullscreen mode Exit fullscreen mode

filter Metod

filter stvara novi niz sa svim elementima koji zadovoljavaju zadati uslov:

const osobe = [
  { ime: 'Pera', godine: 13 },
  { ime: 'Mika', godine: 18 },
  { ime: 'Laza', godine: 64 },
  { ime: 'Ana', godine: 10 },
];
const punoletni = osobe.filter(osoba => osoba.godine >= 18);
console.log(punoletni);  // [ { ime: 'Mika', godine: 18 }, { ime: 'Laza', godine: 64 } ]
Enter fullscreen mode Exit fullscreen mode

reduce Metod

reduce izvršava funkciju na svakom članu niza i vraća jedinstvenu vrednost:

Primer sa reduce:

const arr = [4, 6, 10, 5, 25];
const suma = arr.reduce((akumulator, vrednost) => akumulator + vrednost, 0);
console.log(suma);  // 50
Enter fullscreen mode Exit fullscreen mode

Kreiranje Funkcije Višeg Reda

Zamislite da JavaScript nema ugrađenu map metodu. Možemo sami da je kreiramo:

function mapiraj(arr, fn) {
  const noviNiz = [];
  for (let i = 0; i < arr.length; i++) {
    noviNiz.push(fn(arr[i]));
  }
  return noviNiz;
}
const duzine = mapiraj(['JavaScript', 'Python'], item => item.length);
console.log(duzine);  // [10, 6]
Enter fullscreen mode Exit fullscreen mode

Zaključak

Funkcije Višeg Reda omogućavaju fleksibilnost i jednostavnost koda u JavaScriptu. Korišćenjem ovih funkcija, naš kod postaje sažetiji, organizovaniji i lakši za održavanje.

Top comments (0)