wysyłanie argumentu jako funkcji

0
<script>

        var passengers = [{ name: "Janka Pętlicka", paid: true },
                          { name: "Dr. Zatan", paid: true },
                          { name: "Stefa Właściwa", paid: false },
                          { name: "Janek Funkcyjniak", paid: true }];
        
        function checkNoFlyList(passenger) {
            return (passenger.name === "Dr. Zatan");
        }

        function processPassengers(passengers, checkNoFlyList) {
            for(var i = 0; i < passengers.length; i++)
            {
                if(checkNoFlyList(passengers[i]))
                {
                    return false;
                }
            }
            return true;
        }

        var allCanFly = processPassengers(passengers, checkNoFlyList);
        if (!allCanFly) {
            console.log("Samolot nie moze wystartowac: na pokladzie jest pasazer objety zakazel lotow.");
        }

    </script>

Po co przekazywać referencję do funkcji checkNoFlyList, jak w ten sposób dostanę ten sam wynik:

<script>

        var passengers = [{ name: "Janka Pętlicka", paid: true },
                          { name: "Dr. Zatan", paid: true },
                          { name: "Stefa Właściwa", paid: false },
                          { name: "Janek Funkcyjniak", paid: true }];
        
        function checkNoFlyList(passenger) {
            return (passenger.name === "Dr. Zatan");
        }

        function processPassengers(passengers) {
            for(var i = 0; i < passengers.length; i++)
            {
                if(checkNoFlyList(passengers[i]))
                {
                    return false;
                }
            }
            return true;
        }

        var allCanFly = processPassengers(passengers);
        if (!allCanFly) {
            console.log("Samolot nie moze wystartowac: na pokladzie jest pasazer objety zakazel lotow.");
        }

    </script>
0

W tym przypadku nie ma to większego sensu. Gdyby to rozbijać bardziej na moduły to by miało sens.

0

Mógłbyś podać jakiś najprostszy przykład, gdzie przekazanie funkcji jako argumentu ma sens ?

0

Np tam gdzie wywoływana funkcja może być różna:

function map(transformation, arr) {
  const result = [...arr];
  for (let i = 0; i < result.length; i++) {
    result[i] = transformation(result[i]);
  }

  return result;
}

// usage:
const myArray = [1, 2, 3];
const myDoubledArray = map(item => item * 2, myArray); // => [2, 4, 6]
const myTripledArray = map(item => item * 3, myArray); // => [3, 6, 9]

Możesz także sklecić sobie z tego gotowe funkcje do ponownego użycia:

const doubleArray = arr => map(item => item * 2, arr);

const arr2 = doubleArray([3, 4, 5]); // => [6, 8, 10]
const arr3 = doubleArray([6, 7, 9]); // => [12, 14, 18]

Czyli ogólnie - kompozycja funkcji - jedna z wazniejszych rzeczy w JavaScripcie.

PS
Oczywiście metoda map jest wbudowana w język i nie trzeba jej samodzielnie tworzyć, ale nie chciało mi sie szukac innego przykładu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1