Wartości logiczne w Ruby, JavaScript i ActionScript

Naukę języka programowania zaczynamy przeważnie od poznania podstawowych konstrukcji:  sposobu deklarowania zmiennych, pętli, instrukcji warunkowych. Wtedy często pojawia się pytanie, które wartości są w wyrażeniach logicznych traktowane jako true, a które jako false? O ile w językach typu Java/C# sprawa jest dość prosta, bo większość wartości nie konwertuje się do typów boolean, to w przypadku języków skryptowych każdy z nich rządzi się innymi prawami.

Poniżej przedstawiam porównanie kilku z nich: JavaScript, ActionScript, Ruby. Linearne przełożenie niektórych wartości nie jest w 100% możliwe, np. zmienne niezdefiniowane – w JavaScript istnieje słowo kluczowe  „undefinied”, natomiast w Ruby nie ma możliwości ustanowienia zmiennych niezdefiniowanych.

Argument JavaScript Ruby ActionScript
0 false true false
-1 true true true
5 true true true
„” false true false
„string” true true true
” „ true true true
null false false false
undefinied exception exception false
var x (uninitialized) false exception false
new Object (initialized) true true true
NaN false true false

Kod testujący dla języka Ruby:

def chck(arg)
  if(arg)
    puts "true"
  else
    puts "false"
  end
end
chck(0)
chck(-1)
chck(1)
chck(nil)
chck(0)
chck(-1)
chck(5)
chck("")
chck("str")
chck(undefinied)
chck("")
chck(" ")
chck(Array.new)
chck(Float::NAN)
chck(0.0)

Kod testujący dla języka JavaScript:

function check(argument) {
  if(argument)
    return true;
  else
    return false;
}

function main() {
  var zmienna = "";
  var x;
  zmienna = check(0);//false
  zmienna = check(-1);//true
  zmienna = check(5);//true
  zmienna = check("");//false
  zmienna = check("string");//true
  zmienna = check(null);// false
  //zmienna = check(undefinied)//exception
  zmienna = check(x);//bez przypisania mu wartości. false
  zmienna = check(Number.NaN);//false
  zmienna = check(new Object());//true
}

Źródła dodatkowe:

Przydatny wpis? Postaw mi kawę :)

0 0 votes
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments