tisdag 14 juni 2011

Typkoll i Javaskript




Javaskript är ett dynamiskt typat språk. Det finns ingen kompilator som garanterar att funktionen:

 function add( x, y) {  
   return x + y;  
 }  

...alltid kommer att anropas med nummer. Alla sådana kontroller måste göras när programmet körs. Sådana kontroller utförs alltför sällan. Men javaskript har ändå fungerande sätt som man kan använda.

typeof


Det finns en unär operator som heter typeof. Den returnerar en sträng som berättar vilket sorts värde en variabel är:

   if (typeof a == "number"){  
     //... om a är ett tal så...  
   }  

Övriga värden som "typeof" returnerar kan vara: undefined, object, boolean, number, string, function, eller xml.

Så på det sättet skulle man kunna kasta ett undantag om x och y inte var tal:

 function add( x, y) {  
   if (typeof x != "number") throw "X must be a number!";  
   if (typeof y != "number") throw "Y must be a number!";  
   //...  
 }  

Number() och isNaN()


Nackdelen med att kasta ett undantag är att det är användaren som oftast får ta smällen då, inte programmeraren. Bättre att försöka konvertera inparametrarna:

 function add( x, y) {  
   x = new Number(x);  
   y = new Number(y);  
   //...  
 }  

Då skulle många värden bli konverterade till tal innan de användes vidare i funktionen. I de fall konverteringen misslyckats så kommer värdet att bli not-a-value-number ("NaN"), och då skulle man kanske kunna överväga att kasta ett undantag:

    if (isNaN(x)) throw "Argument must be number!";
    if (isNaN(y)) throw "Argument must be number!";

Försök lösa situationen åt användaren! Så skulle man kunna sammanfatta en bra felhanteringsstrategi i javaskript. Och typkolla om det går.

(Bilden av pareeerica)

2 kommentarer:

  1. För att vara petig är det väl bara null som är not-a-value :) NaN brukar uttydas som not-a-number

    SvaraRadera
  2. Ja! Och petig ska man ju vara. Tack! *Rättar*

    SvaraRadera