TypeScript Academy · Lektion

Funktionssammensætning med typer

Sammensæt funktioner, mens De bevarer typesikkerheden

Lektion 3 af 413 trin

Funktionssammensætning med typer er en gratis TypeScript Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i TypeScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. TypeScript Academy-kurset indeholder 4 lektioner i alt.

Hvad er funktionssammensætning?

Funktionssammensætning kombinerer små funktioner til en større funktion. compose(f, g) returnerer en funktion, der først anvender g og derefter giver resultatet videre til f.

Den grundlæggende definition

Matematisk gælder compose(f, g)(x) = f(g(x)). Funktionerne køres fra højre mod venstre: den længst til højre køres først.

const compose = (f: (n: number) => number, g: (n: number) => number) =>
  (x: number) => f(g(x));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
console.log(compose(inc, dbl)(5)); // 11 (5*2 then +1)

Rækkefølge fra højre mod venstre

Rækkefølgen betyder noget. compose(inc, dbl) fordobler først og lægger derefter én til, mens compose(dbl, inc) lægger én til først. Læs sammensætningen indefra og ud.

console.log(compose(dbl, inc)(5)); // 12 (5+1 then *2)

Typning af sammensætning med generiske typer

Generiske typer lader inddata- og uddatatyperne være forskellige. g afbilder A på B, f afbilder B på C, og resultatet afbilder A på C.

function compose<A, B, C>(f: (b: B) => C, g: (a: A) => B): (a: A) => C {
  return a => f(g(a));
}

Ændring af typer undervejs

Fordi de generiske typer danner kæden A -> B -> C, kan sammensætning omdanne en værdi gennem flere former, f.eks. fra streng til tal til streng.

const length = (s: string) => s.length;
const toStr = (n: number) => "len=" + n;
const describe = compose(toStr, length);
console.log(describe("hello")); // len=5

Typegrænsen skal passe

Uddatene fra g skal passe med inddataene til f. Hvis de ikke stemmer overens, afviser kompileren sammensætningen og opdager forbindelsesfejl tidligt.

// compose(length, toStr) would error:
// toStr returns string, length expects string -> ok here,
// but mismatched pairs are flagged by the compiler.

Sammensætning af tre funktioner

Du kan indlejre sammensætninger eller skrive en version med tre argumenter. Reglen om højre mod venstre gælder stadig for dem alle.

const compose3 = <A, B, C, D>(
  f: (c: C) => D, g: (b: B) => C, h: (a: A) => B
) => (a: A): D => f(g(h(a)));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
const neg = (n: number) => -n;
console.log(compose3(neg, dbl, inc)(3)); // -8

Sammensætning opbygger funktionskæder

Ved at sammensætte små, rene funktioner kan du deklarativt samle komplekse transformationer. Hver del kan testes isoleret.

const trim = (s: string) => s.trim();
const upper = (s: string) => s.toUpperCase();
const clean = compose(upper, trim);
console.log(clean("  hi ")); // HI

Hvorfor rene funktioner er bedst til sammensætning

Sammensætning forudsætter, at hver funktion kun afhænger af sine inddata. Rene funktioner garanterer dette, så sammensætningen af dem giver endnu en forudsigelig, ren funktion.

compose eller pipe

compose kører fra højre mod venstre og afspejler matematisk notation. Mange foretrækker at læse fra venstre mod højre, og det er det, pipe giver mulighed for. Det gennemgår vi i næste afsnit.

Hold delene små

Sammensætning fungerer bedst, når hver funktion gør én lille ting. Små, navngivne, rene trin gør den sammensatte funktionskæde selvforklarende og nem at omarrangere.

Hurtigt tjek

Et hurtigt tjek af denne lektion.

Opsummering

compose(f, g)(x) = f(g(x)) køres fra højre mod venstre. Generisk typning danner kæden A -> B -> C, så uddatene fra g skal passe med inddataene til f, hvilket lader kompileren kontrollere funktionskæden af små, rene funktioner.

Gratis at komme i gang

Lær TypeScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
101
Lektioner
352

Ofte stillede spørgsmål

Er lektionen “Funktionssammensætning med typer” gratis?

Ja — hele teksten til “Funktionssammensætning med typer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af TypeScript Academy-kurset, skal du opgradere til CoddyKit PRO. TypeScript Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Funktionssammensætning med typer”?

Sammensæt funktioner, mens De bevarer typesikkerheden Du øver dig i TypeScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på TypeScript Academy?

Der kræves ingen tidligere erfaring. TypeScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Funktionssammensætning med typer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne TypeScript Academy-lektion?

Ja. Alle TypeScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Rene funktioner og uforanderlighed
  2. Currying og delvis anvendelse
  3. Funktionssammensætning med typer
  4. Typede pipe- og flow-utilities
← Tilbage til TypeScript Academy