Funktionaaliset mallit Groovylla
Soveltakaa closureja ja kokoelmametodeja funktionaalisen ohjelmoinnin mallien toteuttamiseen Groovy-koodissanne.
Funktionaaliset mallit Groovylla on ilmainen Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-kurssilla on yhteensä 4 oppituntia.
Funktionaalinen Groovy: johdanto
Tervetuloa tutustumaan funktionaalisiin malleihin Groovylla! Tässä oppitunnissa tutustumme siihen, miten voitte kirjoittaa ilmaisuvoimaisempaa ja helpommin ylläpidettävää koodia funktionaalisella tyylillä.
Funktionaalinen ohjelmointi on ohjelmointiparadigma, jossa laskenta käsitetään matemaattisten funktioiden arviointina ja jossa vältetään tilan sekä muokattavien tietojen muuttamista. Groovyn sulkeumat ja laajennetut kokoelmametodit tekevät siitä erinomaisen kielen näiden mallien käyttöönottoon.
Miksi funktionaalista ohjelmointia?
Funktionaalisen tyylin käyttöönotto tarjoaa useita hyötyjä:
- Selkeämpi koodi: Usein tiiviimpää ja helpommin luettavaa.
- Helpompi testaaminen: Funktiot, joilla ei ole ”sivuvaikutuksia”, ovat ennakoitavia.
- Vähemmän virheitä: Muokattavan tilan vähäisempi määrä tarkoittaa vähemmän odottamattomia muutoksia.
- Samanaikaisuus: Toimintojen suorittaminen rinnakkain on helpompaa.
Keskitymme malleihin, jotka muuntavat tietoja muuttamatta alkuperäisiä kokoelmia.
Iterointi vai muunnos
Ennen funktionaalisiin muunnoksiin perehtymistä tarkastellaan yleistä imperatiivista tapaa käsitellä listaa each-metodilla. Vaikka se sopii hyvin sivuvaikutuksiin, kuten tulostamiseen, se ei luo uusia muunnettuja kokoelmia.
Funktionaalisissa malleissa taas keskitytään uusien kokoelmien tuottamiseen olemassa olevista ja alkuperäisten jättämiseen ennalleen.
class Main {
static void main(String[] args) {
List numbers = [1, 2, 3]
print("Original: ")
numbers.each { num ->
print("$num ")
}
println("\nThis doesn't create a new list.")
}
}`collect`: tietojen kuvaaminen
collect-metodi vastaa Groovyssa map-operaatiota. Se ottaa sulkeuman ja soveltaa sitä kokoelman jokaiseen alkioon palauttaen uuden listan, joka sisältää muunnetut alkiot.
Tämä on keskeinen funktionaalinen malli tietojen muuntamiseen.
class Main {
static void main(String[] args) {
List numbers = [1, 2, 3, 4]
List doubledNumbers = numbers.collect { it * 2 }
println("Original: $numbers")
println("Doubled: $doubledNumbers")
}
}`findAll`: tietojen suodattaminen
findAll-metodi (samankaltainen kuin filter) valitsee kokoelmasta alkiot, jotka täyttävät annetun ehdon. Annetun sulkeuman tulee palauttaa jokaiselle alkiolle arvo true tai false.
Se palauttaa myös uuden listan, joka sisältää vain suodatuksen läpäisseet alkiot.
class Main {
static void main(String[] args) {
List numbers = [1, 2, 3, 4, 5, 6]
List evenNumbers = numbers.findAll { it % 2 == 0 }
println("Original: $numbers")
println("Evens: $evenNumbers")
}
}`inject`: kokoelmien pelkistäminen
inject-metodilla (joka tunnetaan myös nimillä reduce ja fold) yhdistetään kokoelman kaikki alkiot yhdeksi tulokseksi. Annetaan alkuarvo ja sulkeuma, joka ottaa kaksi argumenttia: kerryttäjän ja nykyisen alkion.
Se sopii erinomaisesti yhteenlaskuihin, ketjutuksiin ja monimutkaisiin koonteihin.
class Main {
static void main(String[] args) {
List numbers = [1, 2, 3, 4]
// Calculate sum starting with 0
def sum = numbers.inject(0) { total, num -> total + num }
println("Numbers: $numbers")
println("Sum: $sum")
}
}Funktionaalisten kutsujen ketjuttaminen
Yksi funktionaalisten mallien suurista eduista on toimintojen ketjuttaminen. Koska esimerkiksi collect ja findAll palauttavat uusia kokoelmia, tulokseen voi kutsua suoraan toista kokoelmametodia.
Näin muodostuu helposti luettavia tietojenkäsittelyputkia.
class Main {
static void main(String[] args) {
List products = [
[name: "Laptop", price: 1200, stock: 5],
[name: "Mouse", price: 25, stock: 20],
[name: "Keyboard", price: 75, stock: 0]
]
def expensiveAvailableProductNames = products
.findAll { it.stock > 0 && it.price > 50 }
.collect { it.name.toUpperCase() }
println("Products: $products")
println("Expensive Available: $expensiveAvailableProductNames")
}
}Mukautettu lajittelu komennolla `sort`
Groovyn sort-metodi on erittäin joustava. Kun sille annetaan sulkeuma, se käyttää sulkeumaa lajittelujärjestyksen määrittämiseen. Sulkeuman tulee ottaa kaksi argumenttia (a ja b) ja palauttaa negatiivinen, nolla tai positiivinen kokonaisluku sen mukaan, onko a vastaavasti pienempi kuin, yhtä suuri kuin tai suurempi kuin b.
class Main {
static void main(String[] args) {
List words = ["apple", "banana", "cat", "dog"]
// Sort by length, then alphabetically if lengths are equal
List sortedWords = words.sort { a, b ->
def lengthComparison = a.length() <=> b.length()
return lengthComparison != 0 ? lengthComparison : a <=> b
}
println("Original: $words")
println("Sorted: $sortedWords")
}
}`groupBy`: tietojen luokittelu
groupBy-metodi sopii erinomaisesti tietojen järjestämiseen luokkiin. Se ottaa sulkeuman, joka määrittää kunkin alkion avaimen. Tuloksena on Map, jossa avaimina ovat sulkeuman palauttamat arvot ja arvoina kyseiseen luokkaan kuuluvien alkioiden listat.
class Main {
static void main(String[] args) {
List people = [
[name: "Alice", age: 30, city: "NY"],
[name: "Bob", age: 25, city: "LA"],
[name: "Charlie", age: 30, city: "NY"],
[name: "David", age: 35, city: "LA"]
]
def peopleByCity = people.groupBy { it.city }
println("People: $people")
println("Grouped by City: $peopleByCity")
}
}Funktionaalisen työnkulun haaste
Testatkaa, miten hyvin ymmärrätte funktionaalisten toimintojen ketjuttamisen!
Kertaus: funktionaalinen Groovy
Hienoa työtä! Olette tutustuneet funktionaalisen ohjelmoinnin mallien soveltamiseen Groovyssa:
collect: Muuntaa alkiot uudeksi listaksi.findAll: Suodattaa alkiot ehdon perusteella.inject: Pelkistää kokoelman yhdeksi arvoksi.sort: Mukauttaa lajittelua sulkeumien avulla.groupBy: Luokittelee alkiot kartaksi.
Ketjuttamalla näitä metodeja voitte rakentaa tehokkaita, helposti luettavia ja ylläpidettäviä tietojenkäsittelyputkia. Harjoitelkaa ahkerasti tämän elegantin tyylin hallitsemiseksi!
Opi Groovy tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Funktionaaliset mallit Groovylla” ilmainen?
Kyllä – oppitunnin ”Funktionaaliset mallit Groovylla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-kurssin, päivitä CoddyKit PROhon. Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Funktionaaliset mallit Groovylla”?
Soveltakaa closureja ja kokoelmametodeja funktionaalisen ohjelmoinnin mallien toteuttamiseen Groovy-koodissanne. Harjoittelet Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Funktionaaliset mallit Groovylla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-oppitunnilla?
Kyllä. Jokainen Groovy ja Gradle: JVM-automaatiota ja koontien hallintaa-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Groovy-kokoelmien laajennukset
- Groovy-closuret
- Funktionaaliset mallit Groovylla
- Currying ja sulkeumien yhdistäminen