er "bokser" vi setter navn på og som kan inneholde forskjellige typer data. (Tall, tekst, logisk sann/usann, tabell, objekt, ...)
Egentlig er disse navnene en referanse til en adresse i hukommelsen (RAM).
Navngivingen, eller deklarasjonen av variablene, sparer oss for å holde orden på adresser i RAM.
Variabler deklareres på denne måten i ActionScript:
var navn: Datatype;var i: int; // Variabelen får navnet i og inneholder datatypen heltall. (Integer)var n: Number; // Variabelen får navnet n og og inneholder datatypen flyttall. (Number)var hilsen: String; // Variabelen får navnet hilsen og inneholder datatypen tekststreng. (String)var bletruffet: Boolean;// Variabelen får navnet bletrufffet og inneholder datatypen logisk variabel, // (boolean,) som kan inneholde true eller false.var tabell: Array=new Array(); //Tabell, det vil si en samling med variabler //av samme datatype lagret i en tabell hvor variabelnavnet viser //til hele tabellen. deklareres som objekt med new!
Variabler kan når som helst få tilordnet nytt innhold med tilordningsoperatoren = :
i = 10; // Variabelen i får verdien 10.n = 3.2; // Variabelen n får verdien 3.2.hilsen = "Vær hilset!"; // Variabelen hilsen får verdien "Vær hilset!"bletruffet = false; // Variabelen bletruffet får verdien false (=usant).tabell = ["Hansen","Olsen","Jensen","Karlsen"]; //Tabellen får innholdet:
"Hansen" "Olsen" "Jensen" "Karlsen"
Obs: Legge merke til at vi kan gjøre deklarasjon og tilordning i en operasjon, eksempelvis:
var i: int = 10;var n: Number = 3.2;...var tabell:Array = ["Hansen","Olsen","Jensen","Karlsen"];Faktisk bør man gjøre dette for å være sikker på at variablene har fornuftige verdier fra starten av.
Tenk på tilordningsoperatoren =, som "blir lik" eller "blir satt til", ikke som matematikksymbolet "er lik" i en ligning.
Istedenfor å få en verdi direkte, kan tilordning først regne ut et uttrykk med andre variabler og operasjoner og deretter legge resultatet i variabelen.
i = i+1; // Variabelen får sin gamle verdi pluss 1i++; // Kortform for i=i+1;i = i+okning; // Variableen får sin gamle verdi pluss verdien i variabelen okningi += okning; // Samme som linjen over! Kortversjon!f = (c-32)*5/9; // Variabelen f får resultatet av utregningen i uttrykket. // (Omregning fra Celcius grader til Fahrenheit grader.)x1 = (-b+Math.sqrt(b*b-4*a*c))/(2*a); // Utregning av en løsning på en andregradsligninghilsen = "Vær hilset "+navn; // Variabelen hilsen får innholdet:// "Vær hilset ole" hvis variabelen navn allerede inneholder "ole".hilsen = "Vær hilset nummer "+tall; //hilsen blir: "Vær hilset nummer 3", hvis tall// inneholder tallet 3. (Blir automatisk konvertert til teksten "3"!)bletruffet = riktigsiktet && ladet; // bletruffet får verdien true, hvis riktigsiktet og// ladet begge var true. && er logisk AND. (Både-og)
Bruk av tabeller i uttrykk og beregninger:
Vi kan referere til hele tabellen, eksempelvis slik:
var ny_tabell: Array = tabell; // Vi lager en ny variabel som peker // til tabelen tabell.Her skjøter vi sammen innholdet i alle boksene i tabellen til en ny streng tekst,
som får innholdet "HansenOlsenJensenKarlsen" ved å bruke en indeks for å få tak i innholdet i hver enkelt boks:var tekst: String = tabell[0] + tabell[1] + tabell[2] + tabell[4];Mer realistisk hadde kanskje vært å lage teksten "Hansen, Olsen, Jensen og Karlsen":
var tekst: String = tabell[0] + ", " + tabell[1] + ", " + tabell[2] + " og " + tabell[4];
Eksemplene over viser at det er en del operasjoner som kan brukes i uttrykk, her er en oversikt over de viktigste:
Regneoperasjoner:
+, -, *, / De fire regningsarter ^ I de fleste programmeringsspråk er dette potens, men ikke i ActionScript!
Må bruke Math.pow(2,3) for å få 23, så kvadreringen x2 er best å skrive x*x (raskere)
I tillegg ligger det mange flere mer avanserte operasjoner som metoder i klassen Math, eksempelvis:
Math.lg(n) Logaritmen til n Math.sqrt(n) Kvadratroten av n Math.sin(n) Sinus til n Math.exp(n) Eksponentialfunksjonen en ...
Operasjonen + på String:
"Pluss" på strenger skjøter dem sammen, eksempelvis blir
tekst = "Dette er starten,\n " + "og dette er fortsettelsen"
satt sammen til strengen
"Dette er starten,\n og dette er fortsettelsen" som havner i variabelen tekst.
Hvis vi kjører trace(tekst) vil dette bli skrevet ut over to linjer, da vi har lagt inn den spesielle koden \n for linjeskift. (Newline)
(+ kalles konkateneringsoperatoren; fra engelsk: concat, som betyr å skjøte sammen.)
Operasjoner på Boolean:
(Se også side 87 i kapittel 4 - Kontrollstrukturer.)
Logiske operasjoner:
a og b Boolean
a && b AND BÅDE a OG b må være sanne for å få sann i resultatet a || b OR ENTEN a ELLER b må være sann for å få sann i resultatet ! a NOT Gir motsatt resultat av innholdet i variabelen a
Relasjonsoperatorer:
m og n int eller Number, men resultatet av operatoren er Boolean!
m == n Like m > n Større enn m >= n Større enn eller lik m < n Mindre enn m <= n Mindre enn eller lik m != n Forskjellig fra
int, Number, String og Boolean er de grunnleggende og mest brukte datatypene.
I moderne programmeringsspråk har man i tillegg sammensatte datastrukturer, som tabeller (Array), lister, trestrukturer, osv.
Egentlig er også Number, String og Boolean også sammensatte datastrukturer, nemlig Klasser, som inneholder både verdien vi tilordner og metoder (funksjoner) vi kan utføre på variabelen.
I tillegg kan vi selv definere sammensatte variabler ved hjelp av klasser og objekter, eksempelvis slik:
class Person { // Må lage i egen fil, bare en del av koden her navn: String; fodselsar: int; inntekt: Number; }definerer en klasse som er en egendefinert, ny, sammensatt datatype.
Når klassen/datatypen er definert, kan vi deklarere og tilordne:
var p: Person = new Person(); // Objekter laget av klasser bruker operatoren "new".Da har vi fått et objekt med default verdiene navn lik "" (tom streng) alder lik 0 og inntekt lik 0.
Men vi kan selv tilordne hva vi vil etterhvert:
p.navn="ole"; p.fodselsar=1982; p.inntekt=420000;
Klassen over kunne vært utvidet med metoder/funksjoner i tillegg, eksempelvis:
class Person { // Må lage i egen fil, bare del av koden hernavn: String; fodselsar: int; inntekt: Number;function Person() {... } //Funksjon med samme navn er konstruktør // og kjøres når vi bruker p= new Person()!function alder(nu: int) { return nu-fodselsar; // alder er forskjell på parameteren nå og fødselsår }//alder()}//class PersonKlassen er altså en slags definisjon eller fabrikk, som vi kan lage objekter med:var p: Person = new Person(); //Vi lager en variabel som inneholder et objekt av datatype Person (klasse).p.navn = "Ole Olsen"; //Vi referer til deler av objektet med punktum notasjon. p.fodselsar = 1970; p.inntekt = 340000; var a: int = p.alder(2012) ); // Vil legge alderen, 2012-1970 = 42, i variabelen a.
Et poeng:
I moderne språk har man beholdt syntaksen fra den gangen int, Number, String og Boolean var enkle/primitive datatyper.
Nå er også disse datatypene klasser, men vi slipper å bruke operasjonen new, da dette blir gjort automatisk av kompilatoren.
Når vi skriver:
var navn: String = "Ole Olsen"; var tall: Number = 666;så blir dette egentlig utført som om vi hadde skrevet:
var navn: String = new String("Ole Olsen"); var tall: Number = new Number(666);
var a: Number = 3.2; var b: Number = 1.3; var c: Number = a + b; // c vil nå inneholde tallet 4.5Merk forskjellen fra:
var a: String = "3.2"; var b: String = "1.3"; var c: String = a + b; // c vil nå inneholde Strengen "3.21.3"Bruk av objekt-variabler i Flash:
var mc: MovieClip = new MovieClip(); //Opprette et objekt utfra en klasse i Flash mc.x = 100; //Bruke egenskap i objektet mc.addEventListener(MouseEvent.CLICK,musKlikket); //Bruke metode i objektettxtMelding.text = "Noe har gått galt!" // Tekstmelding med instancenavn (variablenavn) txtMelding, // bruker egenskapen text. txtMelding.x = 200; // Vi bruker punktumnotasjon for å sette egenskaper. txtMelding.y = 250; // (Egenskaper er variabler innenfor objektvariabelen.)Kontroll av brukerinput av tall i et TextField:
txtTall.text.replace(",","."); // Erstatt desimalkomma (Norge) med desimalpunktum (utlandet) // med metoden replace i String.txtTall.restrict = "0-9.,"; // Begrens input til 0,1,2,3,4,5,6,7,8,9,punktum og komma med // egenskapen restrict i TextField.txtResultat.text = tall.toPrecision(3); // Bruk metoden toPrecision i Number til å returnere en String // formatert med 3 gjeldende siffer.
.I alle treningsoppgavene bruker vi kommandoen trace(String), eksempelvis:
trace("Verdien av tallet er: "+2); //Skriver ut en tekst og et tall (som konverteres til tekst automatisk)
Noen av disse øvelsene er lite virkelighetsnære og totalt unyttige, men er ment å gi trening i å behandle variabler, tilordninger, utregninger med tall og manipuleringer med tekst.
Deklarer tre variabler setning1 og setning2 og setning3 med tekst. Skriv alle setningene med en trace() kommando!
For å få linjeskift kan vi legge inn den spesielle koden "\n". (Huskeregel: n for newline.)
Dekalrer tre tall b, l og h som er bredde, lengde og høyde på en kasse. Regn ut volumet som legges i variabelen v og skriv ut følgende:
Vi har en kasse med bredde 15, lengde 27 og høyde 20. Kassen har volumet ....
Vi har en rettvinklet trekant hvor katetene er 5 og 7 cm lange. Lag et program som skriver ut litt informasjon og regner ut lengden på hypotenusen.
Før vi fikk grafiske brukergrensesnitt lagde man ofte
"grafikk" med forskjellige tegn.
Lag et program som skriver ut "grafikken":
---------------------- | | | * * * * * * * | | | ----------------------
Lag et program som finner
ut om det er sant at et tall ligger
mellom 3 og 8 eller ikke.
(Bruk de logiske operasjonene, <, >, >=, <=, ==)
Finn ut om et tall enten er større enn 10 eller mindre enn 5.
Datatypen String er egentlig en Klasse som har mange interessante metoder for manipulasjon av tekststrenger, eksempelvis:
var s:String = "Dette er en tekststreng"; var start:int = s.indexOf("er",0); //start får verdien 6. var l:int = s.length; //l får verdien 22. length er en egenskap alle String og Array har.
charAt(pos) | Returnerer bokstaven i posisjon pos |
indexOf(streng) | Returnerer posisjonen til streng i hovedstrengen. Negativ posisjon betyr at streng ikke ble funnet! |
lastIndexOf(streng) | Søker bakfra |
substr(startindeks, lengde), substring(startindeks, sluttindeks),slice(startindeks,sluttindeks) |
Tar ut en del av en streng. |
toLowerCase(), toUpperCase() | Gjør om til små eller store bokstaver. |
split(skilletegn) | Splitter opp på skilletegn og legger delene i en tabell |
search(streng): int | Omtrent som indexOf(), men mer avansert og kan bruke såkalte regulære uttrykk. (RegExp) |
replace(fra, til) | Bytter ut forekomster av strengen fra med strengen
til. Kan også bruke regulære uttrykk. (RegExp) |
Se litt på dokumentasjonen av String og lag en litt lengre tekststreng.
Prøv de forskjellige kommandoene og lag kode som for eksempel skriver ut::
-hvor mange tegn strengen består av
-hvilken bokstav som er nummer 11
-hvilke bokstaver som er fra nummer 5 til 8
-gjør om alle tegnene til store bokstaver og omvendt
-undersøker om et svaralternativ finnes i en tabell (som kan fungere som fasit i quiz-programmer ol.)
-fjerner blanke i starten og slutten av en streng. (Kandidat for en egen funksjon, når vi kommer til funksjoner.)
Se på BMI-kalkulator-eksemplet side 65.
Fin mal for å lage andre kalkulator-programmer man kan bruke i andre realfag, eksempelvis:
- Løse andregradsligning.
- Omforme frem og tilbake mellom Celcius og Fahrenheit grader. (Eller inch, feet, meter, cm, ...)
- Areal og volum av forskjellige plan- og rom-legemer.
- Pythagoras-beregninger på trekanter.
- Regne ut skalarprodukt og vektorprodukt. (For R2 elever.)
- Regne ut summer av geometriske og aritmetiske rekker. (For S2 og R2 elever.)
- Diverse avstander med avstandsformlene i vektorregningen i R2.
- Terminbeløp i annuitetslån i en bank. (S2, R2)