Funksjoner kan brukes til flere ting:
- Lage underprogrammer (prosedyrer), som samler instruksjoner som utføres mange steder i programmet på et sted.
Da kan vi bare kalle funksjonen hver gang disse instruksjonene skal gjørs.- Lage funksjoner, det vil si egne regneoperasjoner og andre operasjoner som gir et enkelt resultat, som returnerer resultatet.
- Funksjoner kan også legges inn i klasser, og kalles da metoder.
Hvis vi skal utføre en samling med instruksjoner mange forskjellige steder i et program, er det lurt å samle disse i et underprogram eller en prosedyre ved å deklarere:
function underprogram():void { // void (=intet) betyr at ingenting skal returneres instruksjon1; instruksjon2; ... }//underprogram()Hver gang vi ellers i programme skal ha utført denne samlingen av instruksjoner, kan vi utføre underprogrammet med en instruktjson:
underprogram();
Hvis vi skal lage en utregning eller gjøre operasjoner som skal gi et resultat, deklarerer vi en funksjon:
Eksempel:
Regneoperasjon som regner om fra Fahrenheitgrader til Celcius grader, formel: c = (f-32)*5/9
f -->
f2c --> c
function f2c( f:Number): Number { return (f-32)*5/9; }//f2c()Her deklarerer vi datatypen Number for det som skal returneres, og vi må også angi hva som skal returneres med return.Etter å ha deklarert denne funksjonen, kan vi bruke den eksempelvis slik:trace( "80 grader Fahrenheit er " + f2c(80) + "grader Celcius.");Eksempel:
Beregning av BMI (Body Mass Index) etter formelen: BMI = vekt/høyde2, der der vekt regnes i kg. og høyde i meter:
hoyde --->
vekt --->
beregnBMI ---> bmi
function beregnBMI(hoyde: Number, vekt: Number): Number { return vekt/(hoyde*hoyde); }//beregnBMI()Etter å ha deklarert denne funksjonen, med parameterene hoyde og vekt, kan vi bruke den eksempelvis slik:
trace( "En person som veier 120 kg og er 1.7 m høy har BMI " + beregnBMI(1.7,120) +".");
La oss lage funksjoner for noen av tabell-operasjonene vi har snakket om i forbindelse med Array og Assosiative Array:
- Finne summen og gjennomsnittet av tallene i en tabell med tall.
- Finne største og minste verdi i en tabell med tall.
- Søke etter verdier i en tabell, dvs. finne indeksen til cellen som inneholder en oppgitt søkeverdi.
Sum, gjennomsnitt, maksimum og minimum i en-dimensjonale tall-tabeller:
tabell --->
sum ---> Number
function sum(tabell: Array): Number { var s: Number = 0.0; for(var i: int = 0; i < tabell.length; i++) { if( !isNaN(tabell[i]) ) { //Sjekker om vi har et tall s += Number(tabell[i]); //Number() for å takle tall som String }//if }//for return s; }//sum()
function gjennomsnitt(tabell:Array): Number { return sum(tabell)/tabell.length; //Bruker sum-funksjonen over! }//gjennomnsitt()
function maksimum(tabell: Array): Number { var maks: Number = Number.MIN_VALUE; for(var i: int = 0; i < tabell.length; i++) { if( !isNaN(tabell[i]) ) { if( tabell[i]>maks) { maks = tabell[i]; }//if ny maks }//if tall }//for return maks; }//maksimum()
function minimum(tabell: Array): Number { var min: Number = Number.MAX_VALUE; for(var i: int = 0; i < tabell.length; i++) { if( !isNaN(tabell[i]) ) { if( tabell[i]<min) { min = tabell[i]; }//if ny min }//if tall }//for return min; }//minimum()
Eksempler på bruk av funksjonene sum, gjennomsnitt, maksimum og minimum på en tall- og en tekst-tabell:
var tall: Array = [5,4,33,22,57,89,44,99]; var tekst: Array = ["Olsen", "Hansen","22", "Ferkenberg","33", "Jensen"];
Instruksjonene:
trace("sum av tall: "+sum(tall));
trace("gj.snitt av tall: "+gjennomsnitt(tall));
trace("sum av tekst: "+sum(tekst));
trace("gj.snitt av tekst: "+gjennomsnitt(tekst));
trace("maks av tall: "+maksimum(tall));
trace("maks av tekst: "+maksimum(tekst));
trace("min av tall: "+minimum(tall));
trace("min av tekst: "+minimum(tekst));gir resultatet:
sum av tall: 353 gj.snitt av tall: 44.125 sum av tekst: 55 gj.snitt av tekst: 9.166666666666666 maks av tall: 99 maks av tekst: 33 min av tall: 4 min av tekst: 22
(Egentlig skal disse funksjonene bare brukes på tabeller med tall, men greit at funksjonene er laget slik at programmet
ikke krasjer når funksjonene blir brukt på tekst-tabeller, og at de i så fall også gir tolkbare resultater.)
Volvo Blå 110
Fiat Rød 150
Lada Rustrød 68
Renault Hvit 100 var bruktbiler: Array = [ { merke: "Volvo", farve: "Blå", pris: 110}, { merke: "Fiat" , farve: "Rød", pris: 160}, { merke: "Lada" , farve: "Rustrød", pris: 68 }, { merke: "Renault", farve: "Hvit", pris: 100} ];
Eksempel fra boken side 101 (utvidet med alder fra eksemplet side 100):
Bø Lege 37
Hansen Politi 51
Lia Ingeniør 62
Jensen Flyger 44 var personer: Array = [ { etternavn: "Bø", yrke: "Lege", alder: 37}, { etternavn: "Hansen", yrke: "Politi", alder: 51}, { etternavn: "Lia", yrke: "Ingeniør", alder: 62}, { etternavn: "Jensen", yrke: "Flyger", alder: 44} ];Traversering av tabellene:
tabell --->
tabell2String ---> String
function tabell2String(tabell: Array): String { var resultat: String = ""; for(var i: int = 0; i < tabell.length; i++) { for(var egenskap: String in tabell[i]) { resultat += tabell[i][egenskap]+"\t"; }//for objekt resultat += "\n"; }//for tabell return resultat; }//tabell2String()Instruksjonene:
trace( tabell2String( bruktbiler ) ); trace( tabell2String( personer ) );vil gi output lik:
Volvo 110 Blå Fiat 160 Rød Lada 68 Rustrød Renault 100 Hvit37 Lege Bø 51 Politi Hansen 62 Ingeniør Lia 44 Flyger JensenFinne sum for en av egenskapene i objektene:
tabell --->
egenskap --->
sum ---> Number
function sum(tabell: Array, egenskap: String): Number{ var resultat: Number = 0.0; for(var i: int = 0; i < tabell.length; i++) { if( !isNaN(tabell[i][egenskap]) ) { resultat += Number(tabell[i][egenskap]); }//if }//for return resultat; }//sum()Instruksjonene:
trace("Verdi av bilene: "+sum(bruktbiler,"pris")); trace("Verdi av merkene: "+sum(bruktbiler,"merke")); trace("Total alder: "+sum(personer,"alder"));vil gi output lik:
Verdi av bilene: 438 Verdi av merkene: 0 Total alder: 194
Søke opp verdier:
tabell --->
egenskap --->
sokeord --->
finn ---> int
function finn(tabell: Array, egenskap: String, sokeord: String): int { var resultat: int = -1; for (var i: int = 0; i < tabell.length; i++) { if(tabell[i][egenskap]==sokeord) { resultat = i; }//if }//for return resultat; }//finn()Instruksjonene:
trace("Fant Lada med indeks: " + finn(bruktbiler,"merke","Lada")); trace("Fant Lia med indeks: " + finn(personer,"etternavn","Lia")); trace("Fant Voxholt med indeks: " + finn(personer,"etternavn","Voxholt"));vil gi output lik:
Fant Lada med indeks: 2 Fant Lia med indeks: 2 Fant Voxholt med indeks: -1
frasted --->
tilsted --->
beregnAvstand ---> int
var avstander: Array =[ [ 0, 22, 41, 71,113], [ 22, 0, 21, 51, 93], [ 41, 21, 0, 30, 72], [ 71, 51, 30, 0, 43], [113, 93, 72, 43, 0] ]; var sted: Array = ["arendal", "grimstad", "lillesand", "kristiansand", "mandal"];function beregnAvstand(frasted:String,tilsted:String):int { var fra: int = sted.indexOf( frasted.toLowerCase() ); var til: int = sted.indexOf( tilsted.toLowerCase() ); if( fra >= 0 && fra < avstander.length && til >= 0 && til < avstander.length ) { return avstander[fra][til]; }else{ return -1; //Feilkode }//if }//beregnAvstand()
Funksjoner som deklareres inne i en klasse, kalles metoder. (Klasser, egenskaper og metoder er objektorientert programmering.)
Eksempel:
En klasse med metodene over (sum, gjennomsnitt, maksimum og minimum), kan lages slik:
package { /* Klasse med interface: maximum(tabell:Array):Number minimum(tabell:Array):Number um(tabell:Array):Number gjennomsnitt(tabell:Array):Number */ public class Tabelloperasjoner { private var n:int = 0; private var i:int = 0; public function sum(tabell: Array): Number { var s: Number = 0.0; for(var i: int = 0; i < tabell.length; i++) { if( !isNaN(tabell[i]) ) { //Sjekker om vi har et tall s += Number(tabell[i]); //Number() for å takle String }//if }//for return s; }//sum()... tilsvarende deklarasjoner med gjennomsnitt(), maksimum() og minimum()...}//class }//packageMed denne klassen deklarert og lagt i egen fil med navnet Tabelloperasjoner.as), kan vi i et program gjøre eksempelvis slik:
var temperaturer: array = [13,13,14,14,14,15,15,16,16,17,16,15];var tabop: tabelloperasjoner = new Tabelloperasjoner();trace( "summen ble: "+tabop.sum(temperaturer) );trace( "makstemperaturen var: "+tabop.maksimum(temperaturer)