Functionele bewerkingen op collecties
Beheers veelgebruikte functionele bewerkingen zoals map, filter, fold en reduce voor gegevenstransformatie.
Functionele bewerkingen op collecties is een gratis Scala voor backend-engineering en functioneel programmeren-les op CoddyKit. Dit is les 2 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.
Functionele bewerkingen: waarom zou je ze gebruiken?
Functionele bewerkingen op verzamelingen helpen je gegevens te transformeren en te combineren zonder de oorspronkelijke verzameling te wijzigen. Deze aanpak bevordert onveranderlijkheid en maakt je code gemakkelijker te lezen en te testen.
We bekijken belangrijke bewerkingen zoals map, filter, reduce en fold.
Transformeren met `map`
De bewerking map past een functie toe op elk element van een verzameling en retourneert een nieuwe verzameling met de getransformeerde resultaten. De oorspronkelijke verzameling blijft ongewijzigd.
Probeer dit voorbeeld uit te voeren:
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4)
val doubled = numbers.map(n => n * 2)
println(s"Original: $numbers")
println(s"Doubled: $doubled")
}
}`map` met verschillende typen
map is erg flexibel! Je kunt elementen transformeren naar een volledig ander type. Hier zetten we getallen om in tekenreeksen of bepalen we de lengte van tekenreeksen.
Merk op dat het resultaat een List[Int] is, ook al was de invoer een List[String].
object Main {
def main(args: Array[String]): Unit = {
val names = List("Alice", "Bob", "Charlie")
val lengths = names.map(name => name.length)
println(s"Names: $names")
println(s"Lengths: $lengths")
}
}Selecteren met `filter`
De bewerking filter maakt een nieuwe verzameling met alleen de elementen die aan een bepaalde voorwaarde voldoen (een predicaatfunctie). Ongewenste elementen worden eruit gefilterd.
Laten we de even getallen zoeken:
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4, 5, 6)
val evens = numbers.filter(n => n % 2 == 0)
println(s"Original: $numbers")
println(s"Evens: $evens")
}
}Meer voorbeelden met `filter`
Je kunt elke Booleaanse expressie als filtervoorwaarde gebruiken. Laten we een lijst met woorden filteren en alleen de woorden behouden die langer zijn dan 4 tekens.
object Main {
def main(args: Array[String]): Unit = {
val words = List("apple", "cat", "banana", "dog", "elephant")
val longWords = words.filter(w => w.length > 4)
println(s"Words: $words")
println(s"Long words: $longWords")
}
}Combineren met `reduce`
De bewerking reduce combineert alle elementen van een verzameling tot één resultaat. De bewerking gebruikt een binaire bewerking (een functie die twee argumenten accepteert en er één retourneert) en past die cumulatief toe.
Hier tellen we alle elementen op:
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4)
val sum = numbers.reduce((a, b) => a + b)
println(s"Numbers: $numbers")
println(s"Sum: $sum")
}
}`reduce` voor product en maximum
Met reduce kun je verschillende aggregaties uitvoeren. We kunnen het product van getallen berekenen of de maximale waarde zoeken.
Let op: reduce veroorzaakt een fout bij een lege verzameling.
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 5, 2, 8)
val product = numbers.reduce((a, b) => a * b)
val maxNum = numbers.reduce((a, b) => if (a > b) a else b)
println(s"Numbers: $numbers")
println(s"Product: $product")
println(s"Max: $maxNum")
}
}`fold`: de kracht van een beginwaarde
fold lijkt op reduce, maar verschilt op een belangrijk punt: er wordt een beginwaarde gebruikt (ook wel een "accumulator" genoemd). Daardoor is de bewerking veilig voor lege verzamelingen en zijn verschillende resultaattypen mogelijk.
Laten we getallen optellen en beginnen bij 10:
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3)
// foldLeft(initialValue)(operation)
val sumWithInitial = numbers.foldLeft(10)((acc, n) => acc + n)
println(s"Numbers: $numbers")
println(s"Sum (starting from 10): $sumWithInitial")
}
}Richting: `foldLeft` versus `foldRight`
Scala biedt foldLeft en foldRight. Ze verschillen in de volgorde waarin elementen worden verwerkt en in de manier waarop de accumulator wordt doorgegeven.
foldLeft(initial)(op): verwerkt elementen van links naar rechts.foldRight(initial)(op): verwerkt elementen van rechts naar links.
Bij bewerkingen zoals het samenvoegen van tekenreeksen is de richting belangrijk!
object Main {
def main(args: Array[String]): Unit = {
val chars = List('a', 'b', 'c')
val leftFold = chars.foldLeft("")((acc, c) => acc + c)
val rightFold = chars.foldRight("")((c, acc) => acc + c)
println(s"Chars: $chars")
println(s"foldLeft: $leftFold") // Output: abc
println(s"foldRight: $rightFold") // Output: abc (due to string append order)
// Example where order matters: (acc, char) => char + acc
val rightFoldReversed = chars.foldRight("")((c, acc) => c + acc)
println(s"foldRight (char + acc): $rightFoldReversed") // Output: abc
// A common example where order matters is for operations like subtraction or division, but string concatenation also shows it.
}
}Controle van functionele bewerkingen
Bekijk het volgende Scala-codefragment:
val data = List(10, 20, 30, 40)
val result1 = data.map(x => x / 10)
val result2 = data.filter(x => x > 25)
val result3 = data.reduce((a, b) => a + b)
Welke van de volgende uitspraken over de resultaten zijn WAAR?
Samenvatting: de kracht van functionele bewerkingen
Je beheerst nu de belangrijkste functionele bewerkingen!
maptransformeert elk element.filterselecteert elementen op basis van een voorwaarde.reducecombineert elementen tot één resultaat (vereist een niet-lege verzameling).foldcombineert elementen met een beginwaarde (veilig voor lege verzamelingen).
Deze bewerkingen zijn essentieel voor het schrijven van beknopte, onveranderlijke en krachtige Scala-code. Vervolgens bekijken we robuuste foutafhandeling met Option, Try en Either.
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 “Functionele bewerkingen op collecties” gratis?
Ja — de volledige tekst van “Functionele bewerkingen op collecties” 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 “Functionele bewerkingen op collecties”?
Beheers veelgebruikte functionele bewerkingen zoals map, filter, fold en reduce voor gegevenstransformatie. 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 2 van 3.
Hoe lang duurt de les “Functionele bewerkingen op collecties”?
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
- Verdieping in immutable collecties
- Functionele bewerkingen op collecties
- Option, Try en Either voor fouten