# JavaScript で、if 文 や switch 文 の結果を変数に代入

したかったのですが、できませんでした。

# case 文、switch 文

# Ruby

# case 文

# Ruby

fruit = 'みかん'

case fruit
when "りんご"
  p 'apple'
when "みかん"
  p 'orange'
when "もも"
  p 'peach'
else
  p 'ないよ'
end

=> "orange"

# case 文の結果を result に入れる

# Ruby

fruit = 'みかん'

result = case fruit
         when "りんご"
           'apple'
         when "みかん"
           'orange'
         when "もも"
           'peach'
         else
           'ないよ'
         end

p result
=> "orange"

# JavaScript

# switch 文

// JavaScript

fruit = "みかん";

switch (fruit) {
  case "りんご":
    console.log("apple");
    break;
  case "みかん":
    console.log("orange");
    break;
  case "もも":
    console.log("peach");
    break;
  default:
    console.log("ないよ");
}

> orange

# case 文の結果を result に入れたかった

Ruby と同じようなことができると思っていたができなかった。

// JavaScript

fruit = "みかん";

result = switch (fruit) {
         case "りんご":
           "apple";
           break;
         case "みかん":
           "orange"
           break;
         case "もも":
           "peach";
           break;
         default:
           "ないよ";
         }

console.log(result);
# SyntaxError

上を実行すると、下のようになる。

result = switch (fruit) {
         ^^^^^^

SyntaxError: Unexpected token switch

# これなら動く

// JavaScript

fruit = "みかん";
result = "果物"

switch (fruit) {
  case "りんご":
    result = "apple";
    break;
  case "みかん":
    result = "orange"
    break;
  case "もも":
    result = "peach";
    break;
  default:
    result = "ないよ";
}

console.log(result);
> orange

# break; 消すと

true になったところから、 break; があれば break; が実行されるまで、 なければ最後まで実行される。

// JavaScript

fruit = "みかん";
result = "果物"

switch (fruit) {
  case "りんご":
    result = "apple";
  case "みかん":
    result = "orange"
  case "もも":
    result = "peach";
  default:
    result = "ないよ";
}

console.log(result);
> ないよ

case "みかん":true になるが、下の result = "ないよ"; まで実行されるので、 console.log(result) で、ないよ が表示される。

  case "みかん":
    result = "orange"
  case "もも":
    result = "peach";
  default:
    result = "ないよ";

# if 文

if 文も switch 文と同じで、JavaScript では、代入はできなかった。

# Ruby

# if 文

# Ruby

fruit = 'みかん';

if fruit == 'みかん'
  p 'orange'
else
  p 'ないよ'
end

=> "orange"

# 代入

もちろんいける。

# Ruby

fruit = 'みかん';

result = if fruit == 'みかん'
           'orange'
         else
           'ないよ'
        end

p result
=> "orange"

# 自己代入

こんな事もできる。

# Ruby

fruit = 'みかん'
result = '果物: '

result += if fruit == 'みかん'
           'orange'
         else
           'ないよ'
        end

p result
=> "果物: orange"

# JavaScript

# if 文

// JavaScript

const fruit = "みかん";

if (fruit == "みかん") {
    console.log("orange");
} else {
    console.log("ないよ");
}

> orange

# 代入はだめ

// JavaScript

const fruit = "みかん";

const result = if (fruit == "みかん") {
  "orange";
} else {
  "ないよ";
}

console.log(result);
# SyntaxError

になる。

const result = if (fruit == "みかん") {
               ^^

SyntaxError: Unexpected token if

# これなら大丈夫

// JavaScript

const fruit = "みかん";
let result = "果物";

if (fruit == 'みかん') {
  result = "orange";
} else {
  result = "ないよ";
}

console.log(result);
> orange

# 参考