スタートページJavascriptCoffeeScript
CoffeeScriptの概要(1)変数の指定← 文法の基本(2)制御命令>→ (3)関数>→ (4)クラス

CoffeeScript文法の基本(2)制御命令

    if 分岐
    ? 存在演算子
    swich 分岐
    for in リスト(通常配列)を走査
    for of 連想配列(Object)を走査
    while/until

if 分岐

一般構造

  JavaScript

if (変数 演算子 値) {
    処理A;
}
else {
    処理B;
}
  
    CoffeeScript

if 変数 演算子 値
    処理A; # 字下げ
else
    処理B; # 字下げ
    CoffeeScript

if a >= 0 
    alert "#{a}は正数"
else
    alert "#{a}は負数"

if b > 0 and c > 0
    alert "二つとも正数"

if 10 < d < 30
   alert "OK"
  
  JavaScript

if (a >= 0) {
  alert(`${a}は正数`);
} else {
  alert(`${a}は負数`);
}
if (b > 0 && c > 0) {
  alert("二つとも正数");
}
if ((10 < d && d < 30)) {
  alert("OK");
}

? 存在演算子

JavaScript では、「条件 ? 真の処理 : 偽の処理」という簡素記述法がありますが、CoffeeSceipt では「条件 ? 偽の処理」が使えるだけです。
変数が undefined あるいは null のときの処理に用いられます。

ケース1

「確定していればそのままの値、未確定ならが0とする」ときの記法です。x は確定していますが、y は定義されていません。

    CoffeeScript


x = 10
a = x ? 0
alert a

x ? 0
alert x




# y は定義されていない
b = y ? 0
alert b

y ? 0 # この記法は不適切
alert y
  
  JavaScript

var a, b, x;  // y は宣言されていない
x = 10;
a = x != null ? x : 0;
alert(a);     // a=10

if (x != null) {
  x;
} else {
  0;
};
alert(x);     // x=10

b = typeof y !== "undefined" && y !== null ? y : 0;
alert(b);     // b=0

if (typeof y !== "undefined" && y !== null) {
  y;
} else {
  0;
};
alert(y);    // ★エラーになる

ケース2

上の「y ? 0」のエラーを回避するために「y = y ? 0」としました。同じことですが y が左辺に出現するので、var y が加えられ、y は「定義はされているが値は未確定」になりました。これにより、期待通りに y=0 になりました。

    CoffeeScript


b = y ? 0
alert b

y = y ? 0
alert y
  
  JavaScript

var b, y;  // y は宣言されているが値は未確定
b = typeof y !== "undefined" && y !== null ? y : 0;
alert(b);   // b=0

y = y != null ? y : 0;
alert(y);   // ★y=0

swich 分岐

    CoffeeScript


信号 = "赤"
switch 信号
    when "赤"
        alert "停止"
    when "青"
        alert "進行"
    else
        alert "注意"
  
  JavaScript

var 信号;
信号 = "赤";
switch (信号) {
  case "赤":
    alert("停止");
    break;
  case "青":
    alert("進行");
    break;
  default:
    alert("注意");
}

for ループ

for in

    CoffeeScript


for i in [0..3]
    alert i

for j in [0...8] by 2
    alert j

リストA = ["aaa", "bbb", "ccc"]
for 要素 in リストA
    alert 要素
  
  JavaScript

var i, j, k, l, len, m, リストA, 要素;
for (i = k = 0; k < 3; i = ++k) {
  alert(i);      // 0, 1, 2
}
for (j = l = 0; l <= 8; j = l += 2) {
  alert(j);      // 0, 2, 4, 6, 8
}
リストA = ["aaa", "bbb", "ccc"];
for (m = 0, len = リストA.length; m < len; m++) {
  要素 = リストA[m];
  alert(要素);   // aaa. bbb. ccc
}

for of

    CoffeeScript


学生 =
    氏名: "阿部"
    学部: "文学部"
    年齢: 20

for key, value of 学生
    キー = key
    値 = value
    alert "#{キー}: #{値}"
  
  JavaScript

var key, value, キー, 値, 学生;
学生 = {
  氏名: "阿部",
  学部: "文学部",
  年齢: 20
};
for (key in 学生) {
  value = 学生[key];
  キー = key;
  値 = value;
  alert(`${キー}: ${値}`);
}
        //    氏名: "阿部"
        //    学部: "文学部"
        //    年齢: 20

while/until

    CoffeeScript


i = 5
while i < 8
    alert i
    i++


j = 5
until j < 3
    alert j
    j--
  
  JavaScript

var i, j;
i = 5;
while (i < 8) {
  alert(i);
  i++;
}

j = 5;
while (!(j < 3)) {
  alert(j);
  j--;
}