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: