// if / else var result = 0; if(true) result = 1; assert(result == 1); if(false) result = 2; else result = 3; assert(result == 3); if(0) { result = 4; } else if(1) { result = 5; } else { result = 6; } assert(result == 5); if(null) { result = 7; } else if("") { result = 8; } else { result = 9; } assert(result == 9); if(1) { if(0) { result = 10; } else { result = 11; } } assert(result == 11); // while var i = 0; var sum = 0; while(i < 5) { sum += i; i++; } assert(sum == 10); assert(i == 5); while(false) { assert(false); } // for sum = 0; for(var j = 0; j < 10; j++) sum += j; assert(sum == 45); sum = 0; for(var k = 10; k > 0; k -= 3) sum += k; assert(sum == 10 + 7 + 4 + 1); var count = 0; for(;;) { count++; if(count == 5) break; } assert(count == 5); var outer = 0; var inner = 0; for(var a = 0; a < 3; a++) { outer++; for(var b = 0; b < 4; b++) inner++; } assert(outer == 3 && inner == 12); // break and continue sum = 0; for(var m = 0; m < 10; m++) { if(m % 2 == 0) continue; if(m > 7) break; sum += m; } assert(sum == 1 + 3 + 5 + 7); i = 0; sum = 0; while(true) { i++; if(i < 3) continue; sum += i; if(i >= 5) break; } assert(sum == 3 + 4 + 5); // break only leaves the loop it is in var pairs = 0; for(var p = 0; p < 3; p++) { for(var q = 0; q < 10; q++) { if(q == 2) break; pairs++; } } assert(pairs == 6); // foreach sum = 0; foreach(var v : [1, 2, 3, 4]) sum += v; assert(sum == 10); var seen = []; foreach(var item : ["a", 2, true, null, [1]]) push(seen, item); assert(len(seen) == 5); assert(seen[0] == "a" && seen[1] == 2 && seen[2] == true && isnull(seen[3])); foreach(var nothing : []) assert(false); sum = 0; foreach(var w : [1, 2, 3, 4, 5, 6]) { if(w == 2) continue; if(w == 5) break; sum += w; } assert(sum == 1 + 3 + 4); var letters = ""; foreach(var ch : "xyz") letters += ch; assert(letters == "xyz"); sum = 0; foreach(var row : [[1, 2], [3, 4]]) { foreach(var cell : row) sum += cell; } assert(sum == 10); // Block scope: a variable of a block is gone after it var shadow = "outer"; { var inside = 1; assert(inside == 1); } assert(shadow == "outer"); // switch function kind(value) { var out = ""; switch(value) { case 1: out = "one"; break; case 2: out = "two"; break; case "s": out = "string"; break; case true: out = "bool"; break; default: out = "other"; } return out; } assert(kind(1) == "one"); assert(kind(2) == "two"); assert(kind("s") == "string"); assert(kind(true) == "bool"); assert(kind(99) == "other"); assert(kind(null) == "other"); assert(kind("1") == "other"); // switch falls through without a break function fall(value) { var trace = ""; switch(value) { case 1: trace += "a"; case 2: trace += "b"; break; case 3: trace += "c"; } return trace; } assert(fall(1) == "ab"); assert(fall(2) == "b"); assert(fall(3) == "c"); assert(fall(4) == ""); // switch in a loop: break leaves the switch, not the loop var hits = 0; for(var s = 0; s < 4; s++) { switch(s) { case 1: break; default: hits++; } } assert(hits == 3); // continue inside a switch continues the loop hits = 0; for(var t = 0; t < 4; t++) { switch(t) { case 0: continue; } hits++; } assert(hits == 3); // switch with a default in the middle function middle(value) { switch(value) { case 1: return "one"; default: return "default"; case 2: return "two"; } } assert(middle(1) == "one"); assert(middle(2) == "two"); assert(middle(3) == "default");