Administreres af:

Løkkestrukturer Tilbage til oversigtstabel
Tilbage


Af: novicen.dk


Løkker

Løkker kan anvendes hvor der skal foretages gentagne gennemløb af et specifikt hændelsesforløb. Eksempelvis, hvor en E-mail skal testes for gyldige/ugyldige tegn. I dette tilfælde skal hver eneste karakter hentes ud fra E-mail strengen og undersøges separat i forhold til deres aktuelle gyldighed. Denne proces foretages med et automatisk gennemløb, der gennemskanner E-mail strengen fra første karakter og indtil strengen ikke er længere.

Der findes to forskelligt anvendte løkkestrukturer indenfor JavaScript. Den nok hyppigst anvendte er for løkken. Den har den egenskab/fordel, at alle driftparametre skal defineres i forbindelse med erklæringen af løkken - altså også stop- og stepkriterier.

for (startværdi; driftkriterie; stepkriterie) {
  // udfør dette så længe driftkriteriet opfyldes ;
  // start ved startværdien og step jvf. stepkriteriet ;
  }

Med udgangspunkt i ovennævnte test af E-mail kan et sådant gennemløb opsættes:

Email = inputFraFormularfelt.value;
for (var x=0; x<Email.length; x++) {
  // udtag karakteren på x positionen i Email ;
  // test for gyldighed af tegn ;
  // foretag evt. advarsel ;
  // stop når Email ikke er længere ;
  }

Vi skal for at kunne opbygge den komplette struktur kende opsætningen af en E-mail og hvilke karakterer, som er gyldige. Alle bogstaver - store som små - indenfor a..Z er Ok og det samme gør sig gældende for alle tal 0..9. Derudover er @ en selvfølge og punktum, bundstreg og bindestreg er også Ok.

Det bliver deraf muligt at opstille en teksstreng op mod hvilken det er muligt at teste den enkelte karakter. Hvis ikke den aktuelle karakter findes i strengen af gyldige tegn, skal der advares og testen skal/kan stoppe, da E-mail'en nu ikke er fundet Ok.

Anvendelse af for løkken kan derfor foregå som følger:

gyldigeTegn = "abcdefghijklmnopqrstuvwxyz0123456789_.-@";
function checkMail( inputMail) {
  for (var x=0; x<inputMail.length; x++) {
    var ch = inputMail.charAt(x);
    if (gyldigeTegn.indexOf(ch.toLowerCase())<0) {
      alert('Din E-mail indeholder ugyldige tegn.');
      return;
      }
    }
  }

Konstruktoinen af for løkken er sat op med en detektion af, hvor lang den anvendte E-mail er. Uanset længde vil den altid gennemskanne alle karakterer. Sammenligningen af den enkelte karakter foregår ved at holde hver karakter op mod en streng af gyldige tegn og detektere, hvorvidt karakteren er indeholdt i strengen. Hvis ikke, vil der fremkomme en advarsel og gennemskanning vil stoppe. Det er nødvendigt at detektere for både store og små bogstaver men da vi kan konvertere alle store bogstaver til små, vil det være tilstrækkeligt at foretage test af den konverterede karakter i forhold til en streng med kun små bogstaver.

Et - farligere - alterativ til for løkken er while strukturen. Her skal startbetingelser være sat forud for indgangen i løkken og stepbetingelserne skal ændres undervejs i løkkens egen gennemskanning.

opsæt driftparameter;
while (driftkriterie opfyldt) {
  // udfør dette så længe driftkriteriet opfyldes ;
  // sørg for, at driftparameter ændres ;
  }

Som løkke er konstruktionen i sig selv ikke farlig. Problemet ligger i at huske, at der indenfor strukturen skal være en bearbejdning/ændring af den driftparameter, som styrer, hvorvidt løkken skal standse sine beregninger. Hvis du ikke gennem løkkens gennemløb får ændret på driftparametrene, således at driftkriteriet - før eller siden - kan blive falsk og løkken dermed standser, så vil while løkken arbejde i meget, meget, meget, meget laaaaaaaaang tid...!

Ovenstående test af E-mail kunne med while løkken se således ud:

gyldigeTegn = "abcdefghijklmnopqrstuvwxyz0123456789_.-@";
function checkMail( inputMail) {
 var x=0;
 while (x<inputMail.length) {
  var ch = inputMail.charAt(x);
  if (gyldigeTegn.indexOf(ch.toLowerCase())<0) {
   alert('Din E-mail indeholder ugyldige tegn.')
   return;
   }
  x++;
  }
}

Funktionen bliver udadtil ikke anderledes uanset om det er for eller while løkken vi anvender. Forskellen ligge alene i den indre opbygning af løkken. Alle nødvendige parametre i for løkken sættes allerede når løkken startes, hvorimod der til while løkken fordres tre linier - heraf en udenfor og en indenfor løkkestrukturen.

En anden forskel på de to løkkestrukturer er, at for løkken alene arbejder med talmæssige betingelser, hvorimod while løkken vil kunne stilles til at detektere en hvilken som helst betingelse, der kan opstilles som sand eller falsk (true/false).

Til top


© Copyright 1999- , novicen.dk - All Rights Reserved
Drift og vedligehold: KS Centret ApS, Vejle
Redaktionel E-mail: kaj.linaa@ksc.dk
Grafisk design: Per Rahbek