Lær datavitenskap med JavaScript Del 4, Funksjoner

Introduksjon

Anta at du har en fil som er 82 linjer lang og består bare av en rekke uttalelser. (Jeg håper dette er ikke sant, men alt er mulig.) Hvordan ville du forstå hva programmet gjør? Hvordan ville du endre den eller bruke den? Det ville være vanskelig å gjøre noe med denne koden fordi det ikke er noen struktur for det.  

For å løse dette problemet kan du bruke funksjoner. En funksjon er en gruppe uttalelser som utfører en bestemt oppgave. Funksjoner tillater oss å bryte opp et program i mindre programmer, slik at koden vår blir mer lesbar, gjenbrukbar og testbar.

innhold

  • Ugyldige funksjoner
  • Verdi returfunksjon
  • omfang
  • parametere
  • moduler

Ugyldige funksjoner

Denne typen funksjon lister opp trinn for programmet som skal utføres. Tenk på at vi skriver et program for å logge en bruker inn på et nettsted. Programmet kan bestå av følgende oppgaver:

  • Få brukernavnet
  • Få passordet
  • Sjekk om brukernavnet og passordet eksisterer
  • Omdirigere brukeren til oversikten

Hver av disse trinnene kan være inneholdt i en påloggingsfunksjon. Dette er et eksempelfunksjon:

funksjonshilsen () console.log ("Hei, Verden");  

Dette er den generelle formen for en funksjon:

funksjonsfunksjonName () statement; uttalelse; etc. 

For å utføre funksjonen (også kjent som å ringe funksjonen, eller påkalle funksjonen), skriver du en uttalelse som kaller den.

hilse på(); 

De () er hvor vi sender inn innspill til funksjonen. Når vi definerer funksjonen, kalles inngangen en parameter. Når vi kaller funksjonen, vil inngangen være den faktiske verdien og kalles argumentet. Eksempel:

funksjon hilse (navn) console.log ("Hei," + navn);  hilse på ("Alberta"); // Hello Alberta 

Med JavaScript ES6 kan du definere funksjoner ved hjelp av pilsyntaxen. Her er vår hilsen-funksjon definert ved hjelp av pilsyntaxen:

la greet = () => console.log ("Hei, Verden");

En funksjon med en parameter:

la greet = name => console.log ("Hei," + navn);

En funksjon med mer enn én parameter:

la greet = (fname, lname) => console.log ("Hei," + fname + "" + navn); 

En funksjon med flere setninger:

la greet = (fname, lname) => la navn = fname + "" + navn; console.log ("Hei," + navn); 

Fordi en pilfunksjon er en anonym funksjon, gir vi vår funksjon et navn ved å tildele det til en variabel. Pilfunksjoner kan være nyttige når funksjonsdelen din bare har en setning.

Verdi tilbakeføringsfunksjon

Denne typen funksjon returnerer en verdi. Funksjonen må avsluttes med returavtale. Dette eksemplet returnerer summen av to tall.

funksjon legg til (x, y) return x + y; 

Dette er den generelle form som definerer en verdi returfunksjon:

funksjonsfunksjonName () statement; uttalelse; etc. returuttrykk;  

Verdien av uttrykk er det som får resultat av funksjonen. Denne typen funksjon er nyttig når den lagres i en variabel. 

la variableName = funksjonnavn (); 

omfang

En variabel er omfanget av den delen av programmet hvor en variabel kan nås. En variabel kan være lokal eller global. En lokal variables omfang er inne i funksjonen den ble opprettet. Ingen kode utenfor funksjonen kan få tilgang til de lokale variablene. 

Også, når du bruker la eller konst å erklære en variabel, de har blokkomfang. En blokk er et sett med uttalelser som tilhører sammen som en gruppe. En blokk kan være så enkelt som å pakke inn koden i krøllete braces:

la a = 2; 

Variabelen en er lokal til blokken den er i. En blokk kan også være en loop eller en if-setning. Eksempel:  

la a = 1; hvis (5> 4) la a = 2;  console.log (a); //1 

Fordi konsollerklæringen er i samme omfang som vår første variabel en, den viser den verdien, som er 1. Den har ikke tilgang til variablene i if-blokk. Nå, sett på dette eksemplet:

la a = 1; hvis (5> 4) la a = 2; console.log (a); // 2

Nå vil 2 bli vist fordi omfanget av variabler som konsollerklæringen har tilgang til, ligger innenfor If-blokk. En funksjons parametere er også lokale variabler og kan bare nås med kode inne i funksjonen. Globale variabler, derimot, kan nås av alle uttalelsene i et programs fil. Eksempel:

la a = 1; funksjon foo () a = 2;  console.log (a); // 1 foo (); console.log (a); // 2

I dette eksemplet, en er en global variabel, og vi har tilgang til den i foo-funksjonen. Den første konsollerklæringen vil vise 1. Etter å ha ringt foo, verdien av en er satt til 2, noe som gjør det andre konsolloppsettet display 2. 

Globale variabler skal brukes svært lite, helst ikke i det hele tatt. Fordi globale variabler kan nås av en hvilken som helst del av et program, risikerer de å bli endret på uforutsigbare måter. I et stort program med tusenvis av kodelinjer, gjør det programmet vanskeligere å forstå, fordi du ikke lett kan se hvordan variabelen blir brukt. Det er bedre å lage og bruke lokale variabler.

Men hvis du trenger å bruke en variabel på flere steder i programmet, er det OK å bruke en global konstant. Deklarere en variabel med konst Søkeord forhindrer at det endres, noe som gjør det sikrere å bruke. Du trenger bare å bekymre deg for å oppdatere verdien av konstanten på stedet den ble erklært.

parametere

Husk at en parameter er en variabel som en funksjon bruker til å akseptere data. Parameteren tilordnes verdien av en funksjons argumenter når funksjonen kalles. Som av ES6, kan parametere også gis standardverdier med formatet parameterName = verdien. I dette tilfellet kan du ringe en funksjon uten argumenter, og den vil bruke standardverdier. Eksempel:

funksjonshilsen (navn = "verden") console.log ("Hei," + navn);  hilse på(); //Hei Verden

Sprednings- / hvileoperatøren er ny til ES6 og kan brukes til å enten utvide en matrise eller objekt i individuelle verdier eller samle parametrene til en funksjon i en matrise. Dette er et eksempel på bruk av hvileparameter:

funksjon foo (... args) console.log (args);  foo (1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]

moduler

Anta at du nå har en fil som har 1.082 linjer. (Jeg har sett dette, og du bør løpe hvis du støter på en slik ting.) Filen er organisert i funksjoner, men det er vanskelig å se hvordan de forholder seg til hverandre. 

For å gruppere sammen relatert oppførsel, bør vi sette vår kode i moduler. En modul i ES6 er en fil som inneholder relaterte funksjoner og variabler. Modulene lar oss skjule private eiendommer og avsløre offentlige eiendommer som vi vil bruke i andre filer. Filnavnet vil være navnet på modulen. Modulene har også eget omfang. For å bruke variabler utenfor modulens omfang, må de eksporteres. Variabler som ikke eksporteres, vil være private og kan bare nås i modulen.  

Individuelle egenskaper kan eksporteres slik:

eksportfunksjon foo () console.log ("Hello World");  eksporter la bar = 82; eksporter la baz = [1,2,3];

Alternativt kan alle eiendommer eksporteres med en eksportoppgave:

funksjon foo () console.log ("Hello World");  la bar = 82; la baz = [1,2,3]; eksport foo, bar, baz;

For å bruke en moduls variabler, importerer du den til filen. Du kan spesifisere hva du vil importere fra modulen som dette:

importer foo, bar, baz fra "foo"; 

Du kan også omdøpe importen din:

importer foo as Foo fra "foo"; Foo ();

Eller du kan importere alle egenskapene til modulen:

importer * som myModule fra "foo"; myModule.foo ();

Anmeldelse

Funksjoner tillater oss å dele våre programmer i mindre programmer som vi enkelt kan administrere. Denne praksisen er kjent som modularisering. Det finnes to typer funksjoner: ugyldige funksjoner og verdi returnerende funksjoner. En ugyldig funksjon utfører uttalelsene i den. En verdi returnerende funksjon gir oss tilbake en verdi.  

Omfang er delen av programmet der en variabel kan nås. Variabler deklarert i en funksjon, inkludert funksjonens parametere, er lokale. Blokker har også omfang, og lokale variabler kan opprettes innenfor dem. 

Variabler som ikke er vedlagt i en blokk eller modul, vil være globale. Hvis du trenger en global variabel, er det akseptabelt å ha en global konstant. Ellers kan du prøve å inneholde koden din til moduler fordi modulene har sitt eget omfang. Men enda bedre, moduler gir din kode struktur og organisasjon.  

ressurser

  • repl.it
  • ES6 spesifikasjon
  • Du vet ikke JS: ES6 og Beyond