Scala for forståelse

Scala for forståelse
For å iterere på tvers av samlingene på programmeringsspråk, bruker vi løkkene som for-loop og while-loop. En unik type sløyfe som kalles en forfølgelse blir introdusert av Scala-programmeringsspråket. Konstruksjonen, som mange andre i Scala, er en direkte etterkommer av Haskell. Det kan brukes til mye mer enn bare sløyfe gjennom samlinger. Når vi bruker en funksjonell måte å programmere, hjelper det oss å takle syntaksens kompleksitet.

Hva er forståelse i Scala i Ubuntu 20.04

Formatet for (tellerne) gir "e" i forståelser der tellerne er en liste over tellere som er atskilt av semikoloner. En generator som legger til nye variabler er en teller, mens et filter er en teller. Hver binding opprettet av tellerne blir evaluert av en forståelse, som deretter sender ut en verdsekvens for hver verdi.

Syntaks av forkontroll i Scala
Vi er regissert av disse definisjonene til konseptene definisjoner, filtre og generatorer for forståelse. En scala-overgrep inkluderer følgende tre uttrykk:

for
e <- elements // generator
n = d.Navn // Definisjon
if (uttrykk) // filter
utbytte

Generatorer
Generatorer er som iteratorer som itererer over alle elementene. Her er to andre fakta angående generatorer: (1) En generator er det første trinnet i enhver forståelse, (2) Flere generatorer brukes til forståelse.

Filtre
Filtre har form av boolske forhold inne i en konkurranse. Et filter fungerer som en vakt, og forhindrer at alle verdiene blir brukt som krenker den boolske tilstanden. Hver variabel som er tilgjengelig innenfor omfanget av forfølgelsen, kan brukes til å bygge en tilpasset boolsk tilstand inne i et filter.

Definisjoner
Definisjonen er noe vi bruker for å forklare nøyaktig hva det er som vi ønsker å oppnå eller gjøre. For eksempel kan vi inkludere alle operasjonene som vi ønsker å utføre i den definerende delen.

Eksempel 1: Bruke overgrep med avkastning

For å bygge en ny samling av en eksisterende samling, kombiner du for -loopen, algoritmen og en avkastningsuttalelse. En forfølgelse er anvendelsen av en for sløyfe med en avkastningserklæring. Sett arbeidet i en blokkering etter avkastningsnøkkelordet hvis din tilnærming nødvendiggjør mange kodelinjer:

Vi opprettet objektet som "demo1" der vi har en definisjon av hovedfunksjonen. Inne i det konstruerte vi saksklassen "emne". Klassen har to attributter: "Navnet" satt til strengtype og "artikkelen" tildelt "int" -typen. Etter dette erklærte vi en variabel "emnebase" som har listrepresentasjonen. Listen initialiseres med henholdsvis navnet på henholdsvis de tre fagene og artikkelnumrene.

Deretter definerte vi generatoren, definisjonen og filtreringene inne i forfølgelsen som er satt i variabelen “Morethanten”. Innenfor overføringen syklet "emnet" over hvert element inne i "emnebase". Deretter har vi en "hvis" -uttalelse som indikerer filteret her. "Hvis" -uttalelsen som har "emnet.artikkel> = 10 && emne.artikkel< 20 ” condition means that the article that doesn't seem to be between 10 and 20 is filtered away.

Under forfølgelsen benyttet vi oss av "avkastning" nøkkelord som legger til emnet.Navn. Siden emnet.Navnet er en streng, avkastningsoperatøren samler resultatet som en liste [streng].

I utdataene kan du visualisere listen over fagnavn generert som større enn artikkelen nummer 10 og mindre enn artikkelen nummer 20.

Eksempel 2: Bruke forfølgelse uten utbytte i Scala

Vi kan utelate utbyttet i forståelse. Når det skjer, gir forståelsen tilbake en enhet. Hvis vi ønsker å utføre bivirkningene, kan dette være nyttig. Her er et lignende program som ikke bruker avkastning:

Vi startet programobjektet som "Demo2". I det har vi hovedmetodedefinisjonen. Innenfor hovedmetoden har vi en annen funksjonsdefinisjon. Funksjonen er definert som "verifiser" som tar variabelen "x" som en inngang og setter den med typen int. Vi tildelte forfølgelsen til denne funksjonen. Forfølgelsen har generatoren og filteret. Generatoren har iterasjonen av I og J.

Deretter blir "i*j> = x" -tilstanden utført her hvis tilstanden er beskyttet som et filter. Da vi tildelte verdien av variabel “x” som “5”. I den første iterasjonen er jeg og j begge null. Derfor er jeg ikke større enn x, og ingenting blir dermed gitt. Før jeg blir hevet til 1, økes J med tre ganger til. Begge verdiene til I og J på hver iterasjon til tilstanden er tilfreds og skrives ut av Println -metoden.

Scala -kompilatoren etter samling gir følgende resultater:

Eksempel 3: Bruke overgrep med to generatorer i Scala

Her er en annen forekomst der vi bruker to generatorer i "forfølgelse", men med utbytte nøkkelordet.

I dette eksemplet har vi en funksjonsdefinisjon "produkt" som er utviklet for å beregne alle par av tall fra 0 og X-1 hvis produkt samsvarer med en spesifisert verdi y. Vi har to generatorer, I og J, som øker med 1 til X som angitt i forfølgelsen. Vi bruker deretter filteret etter behov. Vi itererer gjennom listen med for hver sløyfe og ødeleggelse hvert medlem som (i, j). Utgår deretter sammenkoblingene.

Vi opprettet også listen som metoden kom tilbake uten filtre for å vise stadiene som generatorene jeg og j tar. Resultatene viser at mens en av generatorene øker med N-1, holder den andre seg fast. Den andre generatoren øker med 1 når den første når N-1.

Du kan se utdataene fra listen generert med og uten filteret i forfølgelsen som følger:

Konklusjon

De forskjellige mulighetene og funksjonaliteten til Scala -forståelser ble dermed gjort oppmerksom på oss via den nevnte artikkelen. Ved hjelp av flere eksempler demonstrerte vi de forskjellige fordelene ved å bruke Scala -forståelse i Scala -programmeringsmodellen. Etter det lærte vi om de mange mulighetene og hvordan utbytte fungerer. Som et resultat vil vi nå kunne lage koden mens vi også bruker Scala -forståelsen.