Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Week 3: Chapter summaries #155

Open
samanthavz opened this issue May 11, 2021 · 0 comments
Open

Week 3: Chapter summaries #155

samanthavz opened this issue May 11, 2021 · 0 comments

Comments

@samanthavz
Copy link

Chapter 5: Higher Order functions

Je kan code op veel verschillende manieren schrijven, maar door abstractions te schrijven kan je sneller bugs voorkomen. Abstractions verbergen details van een functie waardoor je abstracter naar problemen kan kijken:
console.log(sum(range(1, 10)));
Als je veel van deze abstracte functies gebruikt, voorkom je dus grote stukken code waar je alles stuk voor stuk uitschrijft.
Deze functies die werken binnen andere functies noem je higher-order functions:

function greaterThan(n) {
  return m => m > n;
}
let greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true

Data sets van scripts kan je gebruiken om andere characters op te halen, bijvoorbeeld latijn. Deze scripts zijn gebonden aan unicode.
ranges: [[994, 1008], [11392, 11508], [11513, 11520]]
Binnen deze range bevindt zich de unicode van Coptic. Je leest dit als 994 tot 1008, waarbij 994 een coptic character is, en 1008 niet. Om erachter te komen welke scripts in de dataset nog gebruikt worden kan je de volgende code gebruiken:

function filter(array, test) {
  let passed = [];
  for (let element of array) {
    if (test(element)) {
      passed.push(element);
    }
  }
  return passed;
}
console.log(filter(SCRIPTS, script => script.living));
// → [{name: "Adlam", …}, …]

Je gebruikt hierbij dus filter om een nieuwe array op te bouwen. Deze functie noem je pure, want het past niet de array aan die gegeven wordt. Met de functie map kan je een array transformeren en een nieuwe aanmaken waarin je de waardes een nieuwe vorm geeft.

function map(array, transform) {
  let mapped = [];
  for (let element of array) {
    mapped.push(transform(element));
  }
  return mapped;
}
 
let rtlScripts = SCRIPTS.filter(s => s.direction == "rtl");
console.log(map(rtlScripts, s => s.name));
// → ["Adlam", "Arabic", "Imperial Aramaic", …]

Om een bepaalde value uit een array te halen gebruik je de reduce functie.

function reduce(array, combine, start) {
  let current = start;
  for (let element of array) {
    current = combine(current, element);
  }
  return current;
}
 
console.log(reduce([1, 2, 3, 4], (a, b) => a + b, 0));
// → 10

Met CharacterCount() kan je de grootte van een script berekenen.

Some is ook een higher-order function. Het laat zien of de uitkomst true is voor elke waarde in de array.
CharCodeAt() returned een code unit, codePointAt() geeft je een unicode character. Dit kan je gebruiken als je niet met units werkt, maar bijvoorbeeld met emoji’s en toch de code erachter wilt weten.

Als je al deze functies niet als een higher-order functie zou schrijven zou je niet veel meer code krijgen, maar het gaat pas echt nut krijgen als je gaat operations gaat composen. Het is dus voornamelijk makkelijk als je met veel grote arrays te werk gaat. Dit kan je veel tijd kosten.

@samanthavz samanthavz changed the title Chapter 5: Higher Order functions Week 3: Chapter summaries May 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant