Scala voor backend-engineering en functioneel programmeren · Les

Inleiding tot Functors en Applicatives

Krijg inzicht in Functors voor het mappen over contexten en Applicatives voor het combineren van onafhankelijke contexten.

Les 1 van 311 stappen

Inleiding tot Functors en Applicatives is een gratis Scala voor backend-engineering en functioneel programmeren-les op CoddyKit. Dit is les 1 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Scala voor backend-engineering en functioneel programmeren. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Scala voor backend-engineering en functioneel programmeren bevat in totaal 3 lessen.

Meer dan eenvoudige waarden

Welkom bij een grondigere kennismaking met functioneel programmeren! In Scala werken we vaak met waarden die niet alleen 'eenvoudig' zijn, maar die zijn verpakt in een bepaalde 'context'.

Denk aan een Option die wel of geen waarde kan bevatten, of aan een List die meerdere waarden bevat. Hoe werken we met deze waarden zonder steeds te controleren of ze bestaan of erdoorheen te lussen?

Waarden in een doos: contexten

Wat bedoelen we met 'context'? Zie het als een container die betekenis of gedrag aan een waarde toevoegt. Veelvoorkomende voorbeelden in Scala zijn:

  • Option[T]: Een waarde die aanwezig (Some(T)) of afwezig (None) kan zijn.
  • List[T]: Een verzameling van nul of meer waarden.
  • Future[T]: Een waarde die op een bepaald moment in de toekomst beschikbaar zal zijn.

Functors en Applicatives zijn krachtige hulpmiddelen om met waarden *binnen* deze contexten te werken.

Functors: transformeren binnenin

Een Functor is een type dat weet hoe het een functie moet toepassen op een waarde *binnen* zijn context, zonder de context zelf te veranderen.

Zie het als het transformeren van de inhoud van een doos zonder de doos te veranderen. De belangrijkste bewerking van een Functor is map.

Voorbeeld van een Functor: Option

Het type Option is een klassiek voorbeeld van een Functor. De map-methode past een functie alleen toe als de Option een Some is. Bij None wordt de functie nooit aangeroepen en wordt None teruggegeven.

Probeer dit voorbeeld uit te voeren:

object Main {
  def main(args: Array[String]): Unit = {
    val maybeNum = Some(5)
    val mappedNum = maybeNum.map(x => x * 2)
    println(s"Mapped Some: $mappedNum") // Some(10)

    val noNum: Option[Int] = None
    val mappedNoNum = noNum.map(x => x * 2)
    println(s"Mapped None: $mappedNoNum") // None
  }
}

Voorbeeld van een Functor: List

Ook List is een Functor. De map-methode past een functie toe op elk element in de lijst en produceert een nieuwe lijst met de getransformeerde elementen.

Zo kun je alle items transformeren zonder expliciete lussen te schrijven!

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3)
    val doubled = numbers.map(x => x * 2)
    println(s"Doubled list: $doubled") // List(2, 4, 6)

    val emptyList = List.empty[Int]
    val mappedEmpty = emptyList.map(x => x * 2)
    println(s"Mapped empty: $mappedEmpty") // List()
  }
}

De kracht van `map`

Waarom zijn Functors belangrijk?

  • Abstractie: Ze verbergen de details van hoe je een functie toepast op een waarde in een context. Je hebt geen if (option.isDefined) of for (item <- list) nodig.
  • Samenstelbaarheid: Je kunt meerdere aanroepen van map aan elkaar koppelen om op een overzichtelijke manier een reeks transformaties uit te voeren.
  • Veiligheid: Voor types zoals Option handelt map de afwezigheid van een waarde netjes af.

Applicatives: meer dan `map`

Applicatives zijn een krachtiger concept dat voortbouwt op Functors. Met Functors kun je een gewone functie toepassen op een waarde in een context; met Applicatives kun je een functie die *zelf in een context zit* toepassen op een waarde *in een context*.

Ze zijn vooral handig voor het combineren van meerdere *onafhankelijke* waarden in een context.

Waarden in contexten tillen

Een belangrijke eigenschap van Applicatives is de mogelijkheid om een gewone waarde in de kleinst mogelijke context te 'tillen'. In de standaardbibliotheek van Scala doe je dit vaak door simpelweg de context te construeren.

Als je bijvoorbeeld een Int in een Option-context wilt plaatsen, gebruik je Some(value).

object Main {
  def main(args: Array[String]): Unit = {
    val value = 10
    val inOptionContext = Some(value) // Lifting 10 into Option
    println(s"Lifted to Option: $inOptionContext") // Some(10)

    val anotherValue = "Hello"
    val inListContext = List(anotherValue) // Lifting "Hello" into List
    println(s"Lifted to List: $inListContext") // List(Hello)
  }
}

Onafhankelijke contexten combineren

Applicatives zijn bijzonder geschikt voor het combineren van meerdere onafhankelijke waarden in een context. Stel bijvoorbeeld dat je twee Options hebt en de inhoud ervan wilt optellen. Met een Applicative kun je dat op een nette manier doen.

Scala's for-expressie kan patronen met Applicatives vaak elegant uitdrukken, vooral voor types zoals Option en List.

object Main {
  def main(args: Array[String]): Unit = {
    val maybeX = Some(5)
    val maybeY = Some(10)

    // Combine maybeX and maybeY to sum their values
    val result = for {
      x <- maybeX
      y <- maybeY
    } yield x + y

    println(s"Combined result: $result") // Some(15)

    val maybeZ: Option[Int] = None
    val resultWithError = for {
      x <- maybeX
      z <- maybeZ
    } yield x + z

    println(s"Result with None: $resultWithError") // None
  }
}

Korte controle: Functors

Test je begrip van Functors!

Functors en Applicatives herhaald

In deze les hebben we het volgende behandeld:

  • Contexten: Waarden die zijn verpakt in containers zoals Option of List.
  • Functors: Types waarmee je met map een functie kunt toepassen op een waarde binnen een context, zodat de waarde verandert zonder de context te wijzigen.
  • Applicatives: Krachtiger dan Functors; ze maken het mogelijk om waarden in een context te 'tillen' en meerdere *onafhankelijke* waarden in een context te combineren.

Deze concepten vormen fundamentele bouwstenen voor geavanceerdere patronen in functioneel programmeren!

Gratis beginnen

Leer Scala met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
39
Lessen
143

Veelgestelde vragen

Is de les “Inleiding tot Functors en Applicatives” gratis?

Ja — de volledige tekst van “Inleiding tot Functors en Applicatives” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Scala voor backend-engineering en functioneel programmeren wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Scala voor backend-engineering en functioneel programmeren bevat in totaal 3 lessen.

Wat leer ik in “Inleiding tot Functors en Applicatives”?

Krijg inzicht in Functors voor het mappen over contexten en Applicatives voor het combineren van onafhankelijke contexten. Je oefent met Scala voor backend-engineering en functioneel programmeren door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Scala voor backend-engineering en functioneel programmeren te beginnen?

Ervaring vooraf is niet nodig. Scala voor backend-engineering en functioneel programmeren op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 3.

Hoe lang duurt de les “Inleiding tot Functors en Applicatives”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Scala voor backend-engineering en functioneel programmeren?

Ja. Elke les over Scala voor backend-engineering en functioneel programmeren bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Inleiding tot Functors en Applicatives
  2. Monads in Scala begrijpen
  3. Cats en ZIO verkennen
← Terug naar Scala voor backend-engineering en functioneel programmeren