AS3 101: Funksjoner - Basix

AS3 101: Funksjoner - Basix
en
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter AS3 101.AS3 101: Variabler - BasixAS3 101:. Forgrening - Basix

Dette er del 2 av innledningen til Actionscript 3.0 serien. Vi skal snakke om funksjoner. Akkurat som forrige gang, når vi fokuserer på variabler, vil vi være primært rettet mot neophyte programmerer, som har liten eller ingen erfaring med funksjoner. Men selv om du er relativt komfortabel med funksjoner, kan det være lurt å skumme gjennom denne opplæringen dersom visse aspekter av dem - som datatyper og standardverdier -. Er ikke helt sitter godt med deg

Vi tilbringe første halvdel av opplæringen dekker ting på et mer teoretisk nivå, og deretter sette noen av disse ideene til å bruke i andre halvår. Vi kommer til å bygge et veldig enkelt brikke med en rekke knapper som bytte ut innholdet på en annen del av siden. Det vil være noen få funksjoner i bruk for å oppnå dette, først og fremst en som håndterer innstillingen av innholdet. Føl deg komfortabel, gå og ta en titt på demoen, deretter sette seg fast i tut ..



Trinn 1: Hva er en funksjon

Hvis du leser AS3 101 tutorial på variabler, så du vet at programmering variabler har sin rot i matematikk. Funksjoner faktisk har samme avstamning, som er passende, som variabler og funksjoner er de to mest grunnleggende byggesteiner i alle programmeringsspråk.

I matematikk, tar en funksjon en enkelt verdi og produserer et beslektet enkelt verdi. Det vil si, funksjonen til x
er verdien y
. Fôring x
inn i funksjonen gir en ny verdi y
. Samme verdi for x
bør alltid produsere den samme verdien av y
.

I programmering, en funksjon kan utføre nøyaktig samme oppgave som i matte, men er langt mindre avhengig av inngangs- og utgangsverdier. Ideen er imidlertid den samme: en mer kompleks oppgave er innkapslet i en slags wrapper, som vi deretter kan utføre ved å ringe funksjonen

Det er, sier vi har en liten bit med kode for å tegne. en stjerne, og vi trenger mange stjerner trukket i vårt program. Kanskje tar det 10 linjer med kode for å faktisk tegne stjernen. Snarere enn å skrive de 10 linjer (eller varianter av dem) om og om igjen, kan vi sette dem inn i en funksjon. Hvis vi gjør det, hver gang vi trenger å tegne en stjerne vi bare ringe vår funksjon ved navn, i stedet for å kopiere og lime inn i de 10 linjer hver gang.

Sagt på en annen måte, på samme måte som variabler kan gi et navn til en verdi, funksjoner gi navn til oppgaver. Når definert, kan oppgaven gjentas enkelt ved å kalle den ved navn.

For de av dere som har kommet til Action fra andre programmeringsbakgrunn, eller de av dere som kanskje begynner her, men vil prøve seg på andre språk , kan du være interessert i å vite følgende. Hva Action kaller en "funksjon" er en svært grunnlegg konsept i all programmering, men kan gå med andre navn på andre språk. For eksempel i objektorientert programmering (OOP) vil du hører begrepet "metode" mye mer enn funksjon, selv gjennom de er i hovedsak de samme. Også begrepene "subroutine", "delprogramanrop" og "prosedyre" er alle bare synonymer for den samme ideen.

For mer informasjon (eller en oppfriskning!) På matematiske funksjoner, vennligst besøk Wikipedia inntreden på emnet . Å leke seg med matematiske funksjoner litt mer, har Wolfram en utmerket samling av funksjoner og effekter. For mer grunnleggende informasjon om programma funksjon, igjen, se Wikipedia

Trinn 2:.! Lag en funksjon Allerede

OK, la oss se hva det tar å skrive en funksjon i Actionscript 3.0.

Åpne opp en ny Flash-dokument (Actionscript 3, naturligvis), klikk på det første bildet av det første laget (det bør være den eneste rammen tilgjengelig), og trykk F9 (Windows) eller Opt-F9 (Macintosh) for å få opp Handlinger panelet. Gå videre og feste manuset, slik at vi ikke mister vår plass hvis du trenger å klikke rundt andre steder i dokumentet

La oss skrive det minimum vi kan muligens komme unna med og fremdeles kalle det en gyldig funksjon.:
funksjon doSomething () {trace ("Gjør noe.");}

Nå la oss bryte det ned. Først er det et søkeord funksjon
. Dette er et reservert ord i Actionscript og det er typen som Var
søkeord. Når du bruker det, du sier at den neste tingen å følge vil være navnet på funksjonen (mye som neste ting etter Var er navnet på variabelen).

I dette tilfellet "doSomething "er navn
av funksjonen. Reglene for å navngi en funksjon er de samme som reglene for navngiving variabler: alfanumeriske tegn, understrekings og dollaren skiltet er de eneste tegnene som er tillatt og navnet kan ikke starte med et tall. Hvis du husker diskusjonen om å navngi variabler, samme slags konvensjoner og anbefalinger gjelder: Feile på siden av beskrivende navn i stedet for korte navn, bruker kamel tilfelle (og starte med en liten bokstav), etc.

Etter at navnet kommer et sett med tom parentes
. Vi skal snakke mer om disse senere, men for nå, bare være klar over at de er en nødvendig del av funksjonen erklæring (og blir ofte betraktet som en del av navnet, men egentlig ikke er).

Så vi har en åpning klammeparentes. Helt på slutten av vår biten har vi en avsluttende klammeparentes. Disse tannregulering sette av kroppen
av funksjonen. Noe inne i kroppen er kode som kan kjøres. Denne koden kjøres når funksjonen er utført (eller kalt
). I vårt tilfelle, er det bare spor av funksjonen ut en bestemt melding. I vår stjerne-tegning scenario, ville vi ha flere linjer med tegning kode i mellom tannregulering

For å oppsummere, viser følgende bilde anatomi av en (minimal) -funksjonen.

Trinn 3 : Forstå når kroppen Utfører

Legg merke til at mens koden i funksjonen utfører når det blir kalt, har koden ikke kjøre når funksjonen blir definert. Gå videre og prøve det ved å teste filmen akkurat nå. For øyeblikket skriptet bare definerer funksjon, men ikke kalle det. Når du tester filmen, skal du se ... ingenting! Det betyr at alt fungerer og er å forvente. Mind du, er en funksjon av ingen nytte hvis vi ikke kalle det, så la oss gjøre det neste

Trinn 4:. Ring Funksjon

Hvis du vil ringe vår funksjon vi bare skrive følgende inn i manuset:
doSomething ();

Hvis du tester filmen, og legger denne linjen resultater i et spor som blir sendt til utdatapanelet:

Et par ting å forstå om syntaksen: First , for å referere til funksjon, vi bare bruker navnet sitt. Husk at en funksjon kan betraktes som en navngitt oppgave. Hvis vi endret navnet på funksjonen til, si, "doSomethingElse", vi vil kalle det ved å skrive "doSomethingElse ()". Dette er svært lik hvor variablene er navngitt og brukt.

Dernest parentes i enden er nødvendig. De er kjent som henrettelsen operatør. Uten dem, vi har bare referert til funksjonen selv, uten å spørre om at det blir utført. Dette er faktisk en veldig nyttig teknikk, noe som er grunnen til at du må gå til det ekstra steget å faktisk kalle funksjonen. Dette er imidlertid ikke-kall teknikk utenfor omfanget av denne opplæringen, og vi må finne en annen mulighet til å diskutere det. Hvis du ønsker å prøve det, bare fjerne parente, forlater funksjonsnavnet av seg selv og kjøre filmen. Du vil se at spor forsvinner, fordi du ikke lenger er faktisk å ringe (utførende) funksjonen.

Ofte er poenget med en funksjon for å kapsle en bestemt oppgave, så det kan kalles ikke en gang, men noen antall ganger, med samme resultat hver gang. La oss prøve dette: gå videre og kopiere og lime inn doSomething (); linjen så mange ganger du vil og kjøre filmen. Du skal se det tilsvarende antall spor i utdatapanelet.

Vær også oppmerksom på at rekkefølgen av funksjonsdefinisjonen og funksjonen samtalen ikke saken. Hele manuset kunne se slik ut:
funksjonen doSomething () {trace ("Gjør noe.");} DoSomething ();

Eller denne
doSomething (); funksjon log () {trace (" Gjør noe. ");}

Sammenlign dette til variabler. Hvis du prøvde å bruke en variabel før den ble erklært, ville det føre til problemer og sannsynligvis feil som ville bringe hele programmet ned. Action faktisk analyserer gjennom manus og sørger for at funksjonene er definert og tilgjengelig før faktisk kjører resten av skriptet. Det er ingen reell konsensus om hvilken av de ovennevnte skript er "riktig". Stol på dine følelser på denne ene

Trinn 5:. Forståelse Execution Bestill

La oss se litt mer på hvordan og når en funksjon utfører. Liket av den funksjonen utfører når det blir kalt; vi vet det allerede. Men det er viktig å forstå at manuset i utgangspunktet behandler et funksjonskall som om kroppen av funksjonen ble kopiert og limt inn på linjen der samtalen skjer. For å illustrere dette, la oss skrive et lite script som bruker vår doSomething funksjon
funksjon doSomething () {trace ("Gjør noe.");}. Trace ("Dette skjer først."); DoSomething (); trace (" Dette skjer siste ");

Når du kjører denne, vil du se følgende i utdatapanelet.

Legg merke til at selv om det første i manuset er funksjonsdefinisjonen, er det første å faktisk skje i programmet er det spor uttalelse som skjer etter
funksjonsdefinisjonen. Så, fordi vi kaller funksjonen etter at spor, ser vi spor fra funksjonen andre og til slutt andre spor som vi gjør følger det. Igjen: en funksjon utføres ikke når det blir definert; det er behov for å bli kalt for å kjøre koden

Trinn 6:. Forstå Parametere

Noen ganger funksjoner kan eksistere i sin egen isolerte verden, kjøre noen få linjer med kode og aldri gjøre noe annerledes. For eksempel kan du ha noen funksjoner for å starte og stoppe avspilling av en video, logikk som egentlig aldri endres fra bruk til bruk.

Men mesteparten av tiden du vil ha en funksjon gjør en oppgave og varierer det noe fra samtalen til å ringe. For eksempel kan laste inn en video involverer de samme trinnene hver gang, med unntak av som
videofil å laste. Med hjelp av parametere, kan vi lage en funksjon mer fleksibel ved å la oss sette visse verdier forskjellig for hver funksjon samtale.

For å bruke en innebygd funksjon som et eksempel, bør du vurdere en av de matematiske funksjoner, slik som Math.max (). max tar to tall, sammen dem og returnerer den med høyere verdi. For å bruke max, må du levere den med to tall i form av parametere. Ellers ville det ikke være en svært nyttig funksjon.

Det er viktig å merke seg at parametrene er egentlig bare variabler. De er spesielle ved at de bare vare så lenge funksjonen og neste gang funksjonen blir kalt de vil bli gjenskapt med (potensielt) nye verdier. Når funksjonen avkjørsler
(ferdig), er parametrene feid bort. Mens inne funksjonen de brukes akkurat på samme måte som du bruker variabler. Hvis du trenger en oppfriskning på ins og outs av variabler, kan jeg foreslå at du sjekke ut min forrige AS3 101 tutorial på variabler.

For å ta en tangent til esoterica, vil du ofte hører ordet "argument" brukt synonymt med begrepet "parameter". Men det er en subtil forskjell mellom de to begrepene. Teknisk sett er en parameter variabelen at funksjonen definerer og et argument er verdien sendes til parameter når funksjonen kalles. Med andre ord, er parameteren variabelnavnet og argumentet er verdien satt til den variabelen. Imidlertid er dette skillet i stor grad ignorert og de fleste noen programmerer vil vite hva du snakker om, uavhengig av begrepet du bruker.

Igjen, for videre lesning, anbefaler jeg Wikipedia eller Google.

Trinn 7: Legg til Parameter

Hva om vår doSomething funksjon ikke bare spore opp "gjøre noe", men i stedet la oss tilpasse meldingen som ble sporet? La oss gjøre det slik (og mens vi er i gang, la oss slå funksjonsnavnet til noe litt mer pragmatisk):
funksjonen log (melding) {trace ("Log:" + melding);}

Se hva som skjedde? Vi snek en parameter i mellom parentes. Det er der parametre gå (minst i Actionscript). Du bare skriver inn navnet du vil at parameter (variabel) for å ha og så bruker du det navnet hvor du vil at verdien. Det vil si, det er akkurat som en variabel, bare uten den "var" søkeord.

Å kalle denne funksjonen og passerer langs et argument (husk, argumenter er de verdiene som blir sendt til parametere ... men det er splitting hår), trekker vi en lignende stunt og sette verdien vi ønsker å passere
i mellom parentes (samtalen operatør) når vi kaller funksjonen: Innlogging ("Dette er ikke bare et spor er det en log ");

Når ovennevnte funksjon og funksjon samtale blir drevet, får vi følgende i utdatapanelet.

Hva mer vi kan kalle logge igjen, men pass i en annen verds til meldingen parameter og få lignende, men varierte resultater. Følgende fulle skript:
funksjonen log (melding) {trace ("Log:" + melding);} log (". Dette er ikke bare et spor, det er en log"); log ("Here we go again . ");

Resultatene i to spor til utdatapanelet, både forvalgt med" Log: ", men etter at det er en egen melding. Vi har begynnelsen på en tilpasset loggeverktøy som kunne gi rikere og mer fleksible spor

Trinn 8:. Legg til en Parameter

Hvis vi ønsket å inkludere mer enn én parameter, kunne vi rett og slett sette komma mellom dem, slik at de alle gå mellom parenteser. For eksempel, la oss legge til et nivå parameter:
funksjonen log (melding, nivå) {if (nivå > = 1) {trace ("Log:" + melding); }}

Nå har vi to parametere. Den første er akkurat det samme som før, og vi har lagt til et nivå parameter. Dette vil være et tall som, dersom den er større enn 1, kan sporingen til å skje. I teorien kan vi holde loggmeldinger aktiv, men undertrykke dem ved å sette deres nivå for å 0.

Å kalle funksjonen, vi igjen bruke et komma for å skille argumentlisten: Innlogging ("Dette isn ' t bare et spor, det er en logg. ", 2); log (" Here we go again ", 0);.

Hvis du kjører film med disse endringene, vil du bare se den første loggmeldingen. Du kan deretter spille rundt med tanken på å loggnivået ved å endre antallet involverte, både når du ringer funksjonen og i selve funksjonen. Det vil si at ved å endre linje
if (nivå > = 1)

for bedriften hvis (nivå > = 3)

Du ender opp med ingen spor. Endre det for bedriften hvis (nivå > = 0)

gir deg to spor. Tenk om du hadde flere dusin loggmeldinger pepret hele søknaden din; du kan slå opp eller ned på detaljnivå på utskriftene ved å endre et enkelt tall i funksjonen. Dette er bare et eksempel på hvorfor funksjoner er nyttige ved deres evne til å innkapsle kode og bruke den på nytt. En endring på ett sted kan endre oppførselen til flere andre ting

Trinn 9:. Datatyping Parametere

Som du lærte i variabler opplæringen, kan en variabel (og burde) ha en datatype. Hvis du trenger en børste opp på datatyper, vil jeg henvise deg tilbake til variabler opplæringen, men 10 prosent sammendraget er dette: En variabel uten en datatype er rett og slett et navn henviser til noen verdi. Ved å legge til en datatype, kan vi garantere at verdien holdt av variabelen er av en bestemt type, for eksempel String, Number, MovieClip, eller XML. I Actionscript, ser det ut som dette:
Var totalPigeons: Antall;

kolon angir at variabelen på venstre vil ha den typen som er deklarert på høyre

I funksjoner, er det en. god idé å datatype parametere, for nøyaktig de samme grunnene til at det er en god idé å skrive inn variabler. Og det ser fryktelig like. Vi vet at vårt budskap parameter bør være av typen String. Vi vet også at nivået parameter er numerisk, men ikke bare det, det ville ideelt sett være et ikke-negative heltall, som betyr en uint er en god kandidat for en datatype. Vi vil endre funksjonen til å se slik ut:
funksjonen log (message: String, nivå: uint) {if (nivå > = 1) {trace ("Log:" + melding); }}

datatyping parametere har stort sett samme effekt som datatyping normale variabler. Det mest bemerkelsesverdige er det hindrer misbruk av funksjon. La oss si at vi fikk pålegg av parametrene blandet opp og prøvde å kalle det slik: (". Dette er ikke bare et spor, det er en logg" 2) Innlogging;

Fordi vi har prøvd å passere en numerisk verdi til en parameter skrevet som en streng og en streng til en parameter skrevet som en uint, får vi følgende kompilatoren feil når vi går for å teste filmen:
1 067: Implisitt tvang av en verdi av typen int til en urelatert typen String.1067. Implisitt tvang av en verdi av typen String til en urelatert typen uint

"Tvang" er en noe luguber begrep for det handler om å prøve å endre typen en verdi. "Implisitt tvang" er når vi prøver å gjøre det uten eksplisitt avstøpning verdien. Dette er mulig på beslektede typer, som for eksempel Antall, int og uint, men på urelaterte typer, som Strings og uints, unnlater dette, og vi får feilen. Kompilatoren er ikke smart nok til å foreslå at kanskje du fikk argumentene i feil rekkefølge, men du får en melding om at noe
er galt og du blir tvunget til å rette opp feil.

Trinn 10: Valgfritt Parametere

Noen ganger trenger du en parameter, og noen ganger du ikke. I et slikt tilfelle, kan du gjøre det parameter valgfritt. For å gjøre ting enklere, Actionscript 3.0 gir en metode for å gi standardverdiene til parametere som ikke får gått en verdi. Faktisk er det denne standardverdien mekanisme som er det som gjør en parameter valgfritt.

La oss gjøre det nivået parameter valgfritt, slik at hvis det ikke er vedtatt i, funksjonen kan fortsatt fungere, men antar at vi ønsket en nivå 0. Vi må rett og slett endre funksjonen signaturen slik:
funksjonen log (message: String, level: uint = 0) {

Legg merke til = 0 etter erklæringen og datatype av andre parameter. Ved å skrive inn et likhetstegn og deretter noen verdi, erklærer vi at parameteren er valgfri og gi standardverdien hvis argumentet er utelatt

Hvis vi skulle deretter logge noen meldinger.
Log ( "Dette er en viktig melding", 1); log ("Dette er en viktig melding"); log ("Dette er en så-så-melding", 0);

Vi vil se at bare den første meldingen faktisk logger. Den andre går ut nivået agrument og derfor funksjonen forutsetter at vi ville ha en verdi på 0, noe som resulterer i ingen spor

Dette bringer opp spørsmålet. Hva som skjer når vi la ut meldingen? Meldingen parameter implisitt erklært som nødvendig, fordi det ikke er deklarert som valgfritt. Hvis du prøver å kjøre filmen med følgende log i det:
log ();

Du får denne feilmeldingen:
1 136: Feil antall argumenter. Forventet 1.

Som er ganske selvforklarende. Det er til sammen ett nødvendig parameter, men vi sendte sammen ingen argumenter. Derfor er antall argumenter ikke riktig. Dette bringer opp en mer element verdt å nevne, og det er hvis vi hadde gått sammen tre
parametere, ville vi få hovedsak den samme feilen:
1137: Feil antall argumenter. Forventet ikke mer enn 2.

Bare husk at parametrene du satt ned for en funksjon er skrevet i stein, og det er antatt at en funksjon skal fungere, må alle nødvendige parametre sendes sammen.

Det er selvfølgelig noen regler når det gjelder valgfrie parametere. Den enkleste å glemme er at valgfrie parametere
komme etter nødvendige parameterne. For eksempel er dette ingen god:
funksjonen log (nivå: uint = 0, melding: String): void {

Til slutt, standardverdiene må være kompilere-tidskonstanter
, som er en fancy uttrykk som du bare kan tenke på som betyr ingenting for kompleks
. Den numeriske verdien 0 er fine. Den matematiske uttrykket 1 + 3 er også greit. Men tak i Math.sin (0) må beregnes under kjøring (fordi tak i Math.sin er en funksjon), er for komplisert og vil kaste en feil. Jeg vil ikke legge ned regelbok for hva som fungerer og hva som ikke virker. Bare prøv det og hvis Flash ikke liker det du vil høre om det gjennom Iler Feil panel

Trinn 11:. Returnere verdier

Vår log-funksjonen er en slags knapp eller bryter . Som et dørhåndtak som åpner en dør, har det en funksjon som fører til en handling som skal utføres. Dette er greit, normal og forventet. Noen funksjoner vil rett og slett gjøre ting
. Men det er godt å vite at en funksjon kan ikke bare gjøre noe, men kan også gi deg noe tilbake. Dette kalles returnerer en verdi
. Hvis vi trenger noen matematikk utført, for eksempel å kalle en funksjon som returnerer en verdi er en god måte å gå om det.

Action gir oss trigonometriske funksjoner, som for eksempel tak i Math.sin og Math.cos, som er gode eksempler på funksjoner som returnerer en verdi (som er alle de matematiske funksjoner). En ting om trigonometriske funksjoner som har en tendens til å kaste folk av er at vinkelen parameter er et nummer som er ment å være i radianer. De fleste tenker i form av grader, så en konvertering er vanligvis nødvendig. Vi kan skrive en funksjon som gjør det mulig for oss å passere i en verdi i grader og komme tilbake sinus verdi som en retur
funksjon degSin (grader: Number). Number {var radianer: Number = grader * Math.PI /180; returnere tak i Math.sin (radianer);}

Et par ting som skjedde her. Først merker vi har en ": Number" helt på slutten av funksjonen signatur, etter parentes. Dette er Action måte å si at denne funksjonen returnerer en verdi, og at det vil være av typen Number (eller hva du angir). Ved å angi en returtype, ikke bare er vi si at denne funksjonen vil returnere en verdi, er vi sikre på at vi faktisk gjør returnere en verdi. Unnlate å returnere en verdi vil føre til en feil, så vil returnere en feil på feil type.

Den andre tingen som skjedde var i siste linje, introduserte vi tilbake
søkeord. Dette gjør det du kan allerede være å tenke det gjør. Det returnerer ting til sin rett. I dette tilfellet, vi finne ut sinus av vinkelen etter grader har blitt konvertert til radianer og da er vi tilbake som valuta. Vi har faktisk fått noen lagdeling skjer; når vi kaller degSin, kaller det tak i Math.sin, som returnerer en verdi til degSin, som deretter returnerer en verdi tilbake til den opprinnelige kall sted

Ved hjelp av returverdier er enkel.; bare kaller funksjonen der du vil at verdien skal vurderes. For eksempel:
trace ("The sinus til 45 grader er" + degSin (45));

Hva om vi ikke returnerer en verdi, som i vår log funksjon? Vel, antyder beste praksis at vi fortsatt erklære disse intensjoner. Vi kan gjøre det ved datatyping vår funksjon, akkurat som vi gjorde med den siste, bare vi bruker en spesiell type som kalles "tomrommet", som dette;
funksjonen log (message: String, level: uint = 0): void {

Dette slår fast at den gitte funksjonen ikke vil returnere noen verdi og forsøker å gjøre dette vil føre til en feil. Det kan virke som en triviell ting, men å sikre at alle dine funksjoner er riktig skrevet, inkludert de ikke-returner seg, faktisk kan fremskynde utviklingen ved å varsle deg til problemer som oppstår når reglene ikke følges.
< p> Til slutt, en tredje ting som skjedde i dette trinnet, som jeg liksom smuglet inn i koden, men det bærer nevne. Vet du hva det er? Selvfølgelig gjør du, du har et skarpt øye! Det er riktig, jeg opprettet en lokal
variabel i degSin funksjonen. Dette har ikke mye å gjøre med å returnere verdier direkte, men det er et viktig begrep, og nå er et godt tidspunkt å nevne det. Når en variabel er opprettet i kroppen til en funksjon, kalles det en lokal variabel. Det betyr at det er "lokal" til funksjonen selv og ingenting annet har tilgang til den. Med andre ord, de er kast-variabler. Dette er et viktig skille å gjøre, fordi noen ganger du ønsker en variabel utelukkende i forbindelse med funksjonen (som i dette tilfellet: vi trenger bare en midlertidig konvertering fra grader til radianer). Så igjen, noen ganger du vil at variabelen skal vedvare, i hvilket tilfelle du lurer kanskje på hvorfor verdien du setter i en funksjon ikke er tilgjengelig utenfor funksjonen

Det koker ned til en grunnleggende regel.: en variabel definert utenfor en funksjon er tilgjengelig fra i funksjon; en variabel definert innenfor en funksjon ikke er tilgjengelig utenfor funksjonen. Å avklare; en variabel definert innen en funksjon ikke er tilgjengelig i en annen funksjon. Dette begynner å komme inn i temaet omfang, noe som kan være vanskelig å forstå, så vi vil slutte å snakke om dette her.

For videre lesning, jeg igjen henvise deg til Wikipedia. To ganger, faktisk. Pluss en bonus omtale for lokale variabler

Trinn 12:.. En utvidet funksjon Signatur

La oss oppsummere anatomi av en funksjon, så det er utvidet ganske mye fra der vi startet
< h2> Trinn 13: Å vite når du skal skrive en funksjon

I teorien kan du bygge et komplett program der alt i det er en funksjon (faktisk moderne OOP søknader tendens veldig mye mot det ekstreme). Likeledes er det i teorien mulig å bygge et komplett program som ikke en gang bruke en funksjon (selv om dette er faktisk veldig vanskelig i Actionscript, for en anvendelse av eventuell annen størrelse).

Hvis du er bare komme i gang med funksjoner, bør du huske på at du vil absolutt trenger å skrive en funksjon for å håndtere hendelser, for eksempel museklikk eller data laster (mer om dette senere). Utover det, bør du huske min gylne regel for å vite når man skal skrive funksjoner:.

Aldri skrive det samme to ganger

Det vil si, hvis du finner deg selv å skrive akkurat det samme, eller til og med noe lignende, mer enn en gang, du kan sikkert sette det inn i en funksjon og bare kaller funksjonen to ganger.

Hovedårsaken til dette er at hvis du noen gang trenger å gjøre en oppdatering til at litt av kode, du kan gjøre endringen på ett sted. Likeledes, hvis du trenger å gjøre det samme i et tredje sted, du kan mye lettere bare å kalle funksjonen en tredje gang, i stedet for å kopiere og lime inn koden til et tredje sted (som igjen, kompliserer vedlikehold av det videre mengde koder). Husk vår stjerne-tegning eksempel. Men, det gjelder mye mindre åpenbare situasjoner, så vel.

For å gjøre en analogi, gjenbruk oppførselen til en funksjon er lik ideen om gjenbruk kunstverk av et symbol i en egen filmklipp eksempel. Akkurat som to forekomster av samme symbol vil både oppdatering når symbolet blir endret, vil to henrettelser av den samme funksjonen har ulik atferd hvis oppgaven definert av funksjonen er endret.

Forresten, er dette konseptet mer formelt kjent som TØRR prinsippet. Ikke gjenta deg selv

Den eneste gangen til ikke
skrive en funksjon er for ytelseskritiske applikasjoner som spill eller lyd prosessorer. Funksjoner har en iboende overhead som påløper ved å bare kalle funksjonen. Så kan du velge å ofre vedlikehold for ytelse i enkelte situasjoner. Slike situasjoner pleier å være langt mindre vanlig

Trinn 14:. Bygg en innholdskontroll Funksjon

Vi setter vår kunnskap om funksjonene for å bruke ved å bygge en enkel side som viser en håndfull sider , hver etter en tilsvarende mal. Dette vil være en svært enkel side og i den virkelige verden ville du være å sette mye mer omsorg og detaljer i dine funksjoner, men dette vil fungere som en praktisk demonstrasjon av (en av mange) bruker av funksjoner.
< p> Når vi utvikler dette stykket, husk regelen nevnt i det siste trinnet. Tenk hvor mye mer kjedelig og unmaintainable dette ville være uten de funksjonene som vi skriver i følgende trinn.

Hvis du vil, har jeg gitt en startpakke prosjekt for deg, med den første FLA filen og bildene som vi vil være lasting. Føl deg fri til å bruke det, eller føler seg like fritt til å gå i din egen retning med skisser og bilder.

Jeg har gitt en startpakke prosjekt for deg, med den første FLA filen og bilder som vi vil være lasting. Jeg har ikke tenkt å gå inn i stor detalj om hvordan du oppretter kunstverk og sette ikke-kode ting opp. Du kan gjerne bruke denne FLA fil som er, eller bruke det som et referansepunkt for ditt eget kunstverk og bilder. Poenget er ikke å oppnå en viss stil, men å bli kjent med funksjonene i en praktisk setting

Last ned kildefilene her og bruke den filen som heter start.fla

Trinn 15:. Ta en tur til FLA

Det finnes en rekke filmklipp knapper skapt, de fleste som er på scenen i en kolonne på venstre side. Disse er satt opp til å bruke samme bakgrunn kunstverk, bare med en annen tekst etikett inne. Hver knapp er oppkalt heller unimagitively: button1_mc gjennom button5_mc

På høyre side er innholdsområdet.. På toppen av den hvite bakgrunnen er det to tekstfelt, en med en stor fet skrift for overskriften og en med en normal kropps font for beskrivelsen. Feltene er begge satt til å være dynamisk tekst, slik at vi kan arbeide med dem gjennom Actionscript. De er også gitt forekomstnavn: title_tf og body_tf. Det er en annen filmklipp knappen mot bunnen, som vil aktivere en link til hele artikkelen. Dette har en forekomst navn link_mc. Hvor er bildet, spør du? Siden vi legger bilder med Actionscript, vil vi gå videre og lage en Loader med Actionscript, også. Det eksisterer ikke i FLA hvor du kan se den. Vi skal gjøre alt i koden.

Ser forbi FLA, vil du se at det er en katalog som heter bildene i samme mappe. Innsiden av dette er noen bilder som vi vil være lasting. Enten du bruker starteren filen fra nedlasting eller lage din egen, pass på at FLA er i samme mappe som bildene mappe. For å holde ting enkelt vi vil bare publisere SWF til samme mappe, og forventer å laste inn bilder fra bildemappen

(En rask side note, før vi går videre til koden. Finner du at jo mer du bruker Actionscript for å drive prosjektene dine, jo mindre du bruker FLA filen og scenen på den måten at du sannsynligvis vant til. Dette kan være urovekkende, men som du blir flinkere til å sette opp dine eiendeler gjennom koden, jo mer fleksibilitet du vil ha, og jo lettere blir det å legge til rette for endringer nedover veien)

Trinn 16:. Sett opp Knapper

Vi trenger å sette innholdet av de viktigste brikke når knappene er klikket, så vi får begynne koding ved å sette opp en hendelse lytteren for CLICK hendelse på hver knapp. Det er en god sjanse vi vil gjøre en AS3 101 tutorial på hendelser ned linjen, så jeg skal spare i dybden diskusjon på dette for senere. Men det er verdt å merke seg at for å legge til en hendelse lytteren, trenger vi en funksjon. Funksjonen selv er kjent som lytteren
eller handler
. "http://flash.tutsplus.com/tutorials/effects/create-an-impressive-magnifying-effect-with-actionscript-30/#more-354" "http://flash.tutsplus.com/tutorials/effects/create-an-impressive-magnifying-effect-with-actionscript-30/#more-354" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-gallery-with-actionscript-30-and-php/#more-509" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-guest-book-with-xml-and-actionscript-30/#more-539" "http://flash.tutsplus.com/tutorials/games/build-a-wiimote-controlled-lightsaber-using-wiiflash-and-papervision3d/#more-634" "http://flash.tutsplus.com/tutorials/effects/create-an-impressive-magnifying-effect-with-actionscript-30/#more-354" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-gallery-with-actionscript-30-and-php/#more-509" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-guest-book-with-xml-and-actionscript-30/#more-539" "http://flash.tutsplus.com/tutorials/games/build-a-wiimote-controlled-lightsaber-using-wiiflash-and-papervision3d/#more-634" "http://flash.tutsplus.com/tutorials/effects/create-an-impressive-magnifying-effect-with-actionscript-30/#more-354");

"http://flash.tutsplus.com/tutorials/effects/create-an-impressive-magnifying-effect-with-actionscript-30/#more-354" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-gallery-with-actionscript-30-and-php/#more-509" "http://flash.tutsplus.com/tutorials/xml/build-a-dynamic-guest-book-with-xml-and-actionscript-30/#more-539" "http://flash.tutsplus.com/tutorials/games/build-a-wiimote-controlled-lightsaber-using-wiiflash-and-papervision3d/#more-634"



Next Page: