Administreres af: ![]() |
| Operatorer og betingelser | Tilbage til oversigtstabel Tilbage |
Af: novicen.dk
En operator er et tegn eller en sammensætning af tegn, som udfører en bestemt handling. Eksempelvis er lighedstegnet (=) og tegnene for de fire kendte regningsarter (+, -, *, /) operatorer. Der findes i alle programmeringssprog sådanne operatorer, der anvendes til vidt forskellige ting og indenfor mange forskellige områder. Her skal kun nævnes nogle af de mest almindelige.
Når du arbejder med operator er deres orden ikke ligegyldig. Du skal eksempelvis altid stille den variabel, som skal have den nye værdi, til venstre for lighedstegnet. Det er altså gyldigt at skrive A = B + C, hvis du iøvrigt har angivet, hvad B og C har af værdi (A skal have værdi efter de to andre og skal af naturlige årsager så ikke være tildelt tidligere) men det er ikke gyldigt at skrive B + C = A.
Dataflow går i denne henseende altid fra højre mod venstre. Det gør det altid, når vi anvender lighedstegnet og det er uanset, hvad vi vil arbejde med.
Der findes operatorer til at sammenligne med: > og <, som er større end og mindre end. A > B betyder A større end B og tilsvarende A mindre end B for < tegnet. >= og <= betyder større end eller lig med hhv. mindre end eller lig med. == og != er lig med hhv. ikke lig med (forskellig fra).
Skematisk kan operatorer opstilles efter virkeområde:
| A == B | Er A lig med B? |
| A != B | Er A forskellig fra B? |
| A < B | Er A mindre end B? |
| A > B | Er A større end B? |
| A <= B | Er A mindre end eller lig med B? |
| A >= B | Er A større end eller lig med B? |
| A = B | Sæt A lig med B |
| A -= B | Sæt A lig med (A - B) |
| A += B | Sæt A lig med (A + B) |
| A *= B | Sæt A lig med (A * B) |
| A /= B | Sæt A lig med (A / B) |
| A++ | Sæt A lig med A + 1 |
| A-- | Sæt A lig med A - 1 |
| A && B | Er både A og B logisk sand? |
| A || B | Er enten A eller B logisk sand? |
| !A | Er A ikke sand (= falsk)? |
Operatorerne bruges i udstrakt grad i forbindelse med opsætning af betingelser af alle slags og anvendes derfor også i løkkestrukturer, hvor der skal angives start- og slutbetingelser.
| Til top |
Som betingelse bruger JavaScript en if...else opsætning efter følgende model
if (betingelse) {
// udfør dette, hvis betingelse er sand (true);
}
else {
// udfør dette, hvis betingelse er usand (false);
}
Andelen i linierne else {...} er ikke obligatorisk, da kodeafviklingen blot fortsætter, hvis ikke betingelsen opfyldes.
Den betingelse som angives i parantesen i if-delens første linie har kun to tilstande. Den kan enten være sand eller også kan den være usand. Der gives altså ikke nogen mellemveje på dette punkt. En betingelse kunne være beregnet ud fra: A=5 og B=3 således at if (A<B) {... medfører at det bliver strukturens sidste del som afvikles, da udsagnet er falsk. 5 er ikke mindre end 3.
Lad os opbygge en funktion, hvor vi kan teste lidt:
function sammenlignTal( a, b) {
if (a==b) {
// bemærk det dobbelte lighedstegn i sammenligningen;
alert('Tallene er lige store!');
return;
// return; stopper afviklingen her, hvis tal er ens, for ikke;
// at få yderligere en pop-up i nedenstående sammenligning;
}
if (a<b) {
alert('Det andet tal er større end det første!');
// udføres hvis a er mindre end b;
}
else {
alert('Det første tal er større end det andet!');
// udføres hvis a ikke er mindre end b;
// altså også hvis a er lig med b..!;
}
}
"sammenlignTal()" er funktionsnavnet og angivelsen "a, b" indenfor parantesen er inputvariable, som vi kan angive til funktionen og som funktionen kan arbejde med. Hvis de to tal vi giver som input er ens, vil funktionen stoppe afviklingen i den linie, hvor der står return; - funktionen vil altså ikke arbejde videre, medmindre tallene er forskellige. Er tallene forskellige vil også den sidste del af funktionen blive afviklet og i dette tilfælde stopper afviklingen automatisk, når funktionen ikke er længere. Vi behøver altså ikke, at have en return; linie til slut i funktionen.
Det er ikke altid at vi kan undlade at indsætte en return; i slutningen af en funktion. Funktioner kan bringes til at returnere en faktisk værdi, enten som en variabel, der er resultatet af funktionens beregninger eller som en tilstand af enten sand eller falsk (true | false). Hvis vi returnerer en true | false tilstand inden funktionen naturligt ville være færdigafviklet, så skal vi til slut i funktionen indsætte en return af enten true eller false, afhængigt af, hvad der vil være naturligt.
Eksempelvis kunne vi have en funktion, som hedder testMail( inputMail) {...}, hvor vi tester på, om en E-mail er korrekt opsat. Ved de enkelte deltest, kunne vi returnere false og til slut, hvis E-mail er korrekt opsat skal vi derfor returnere true:
function testMail( inputMail) {
// if test af @ ikke er Ok:;
return false;
// if test af gyldige tegn ikke er Ok:;
return false;
// if test af sidste punktums placering ikke er Ok:;
return false;
// hvis ikke der har været fejl indtil nu...:;
return true;
}
Det vil være muligt fra en funktion at foretage kald til andre funktioner og dermed opbygge et mere kompleks beregningsgennemløb, såfremt der skulle være behov for dette. Skematisk kunne dette flow se således ud, når den i formularen anvendte submit knap konverteres til en type="button" og der indsættes en onClick="sendForm( this.form)":
function sendForm( inputForm) {
if (!testFunktionAfEmail( inputForm.afsendersEmail.value)) {
alert('Email er ikke korrekt');
return;
}
if (!testFunktionAfNavn( inputForm.afsendersNavn.value)) {
alert('Navn er ikke korrekt');
return;
}
inputForm.submit();
}
Udråbstegnet foran de to funktionskald i paranteserne konverterer værdien af det efterfølgende svar fra funktionen. Hvis altså afsendersEmail ikke godkendes returnerer testFunktionAfEmail() værdien "false" og for at det samlede udtryk inden i parantesen kan blive "true" - og dermed at funktionens første sektion kan afvikles - skal vi have konverteret svaret til "true". Dette foretages som vist, ved at indsætte et ! foran funktionskaldet.
afsendersNavn og afsendersEmail er NAME's på de respektive felter, hvorfra data trækkes. inputForm.submit() er den JavaScript-mæssige metode til at få formularen sendt.
<FORM> <P> Din E-mail:<BR> <INPUT TYPE="text" SIZE="34" NAME="afsendersEmail"> <P> Dir navn:<BR> <INPUT TYPE="text" SIZE="34" NAME="afsendersNavn"> <P> <INPUT TYPE="button" value="Send data" onClick="sendForm( this.form)"> </FORM>
Et hurtigt men praktisk eksempel kunne blot teste på, om der var @ i den angivne E-mail, om E-mail adressen var af gyldig længde (mindst 6 karakterer: a@b.dk) og om der var indtastet noget i navnefeltet (længde større end 0):
Den anvendte formular ser ud som ovenfor angivne kildekode men felterne er navngivet Email hhv. Navn.
Skal der vælges en af flere tilstande, findes der en mulighed for at opsætte valget ved at bruge switch til at udvælge den aktuelle værdi. Anvendelsen af switch er på konkrete betingelser og denne metode til udvælgelse ses ikke anvendt særligt ofte.
switch (variabelNavn) {
case mulighed_1 :
//udfør disse;
//linier;
break;
case mulighed_2 :
//udfør disse;
//linier;
break;
default :
//udfør disse
//linier;
}
Et kort illustrativt eksempel:
var email = 'info@novicen.dk';
var chkAt = email.indexOf('@'); // tester om @ er i E-mail;
switch (chkAt) {
case -1 :
alert('@ eksisterer ikke i den indtastede E-mail');
break;
case 0 :
alert('@ er placeret for tidligt i den angivne E-mail');
break;
default :
alert('@ er tilsyneladende placeret korrekt');
}
| Til top |
Tildeling ved brug af betingelse
Et særligt tilfælde for tildeling af variables værdier kunne være bestemt efter andre paramtre. Lad os tage eksemplet med en variabel, som vi kalder vareGebyr og som sættes til true, hvis indkøb af varer ikke overskrider en hvis værdi. Det aktuelle indkøbs værdi lagres i en variabel vi kalder vareTotal og grænsen for om der skal tillægges gebyr holdes i en variabel vi kalder for gebyrNiveau.
Et strikt flow kunne se sådan ud:
if ( vareTotal < gebyrNiveau ) {
vareGebyr = true;
}
else {
vareGebyr = false;
}
Dette kan skrives mere kompakt og på kun en linie idet vi kan udnytte opsætningen:
variabel = (betingelse) ? værdi_hvis_betingelse_er_sand : værdi_hvis_falsk;
Parametren variabel bliver altså tildelt en værdi, der afhænger af, hvorvidt udtrykket i parantesen er sand eller den ikke er. Såfremt betingelsen er sand tildeles den værdi, der er angivet mellem ? og :. I modsat fald tildeles værdien efter :.
Ovenstående udtryk får derfor følgende udseende:
vareGebyr = ( vareTotal < gebyrNiveau ) ? true : false;
| Til top |