【Go言語】昔スウィーティーってちょっと流行ってたよね – Switch

【Go言語】昔スウィーティーってちょっと流行ってたよね - Switch - サムネイル IT

なんとなく響きが似てたのでこんなタイトルにしていますが、なんの意味もございません。_(:3」∠)_キニシナイデネ

それでは「A Tour of Go」を進めてみます。

前回は演習ってことで、やや難しい数式とかも出てきましたが、今回は if のすごい版的な switch という制御文が学習のお題となります。

- PR -

該当ページはこちら

今回のお題になるページはこちら、いつもどおりURLをおいておきますね。

「Switch」ハコチラ>(´・ω・)つ https://go-tour-jp.appspot.com/flowcontrol/9

「Switch evaluation order」ハコチラ>(´・ω・)つ https://go-tour-jp.appspot.com/flowcontrol/10

「Switch with no condition」ハコチラ>(´・ω・)つ https://go-tour-jp.appspot.com/flowcontrol/11

お題のページ - switch
お題のページ – switch

というわけで、今回は3ページ分進めます

お題は switch

他の言語では if に似た制御文になる switch ですが、Go でも概ね同じ動きのようです。

ただ、細かい部分では少し異なるようなので、改めて仕様を確認しながら進めてみます。

ポイントを抜き出す

ザックリとポイントを抜き出しました。

  • switch の書き方と働き
  • 評価順序
  • 評価値なしの switch

順番に詳細を見ていきます。

switch の書き方と働き

だいたいこんな感じです。

switch の書き方と働き
switch の書き方と働き

評価(条件)に応じた処理が複数分岐するときに使用すると便利です。

if でも同様の事ができますが、switch のがスマートに掛ける場合が多いです。

また、case に書く <値> についてですが、数値の定数(リテラル値)に限らず文字列やファンクションなども評価できるようです。

実際にプログラミングしてみますと…

Go
package main

import (
	"fmt"
)

func main() {

	// あなたの行き先
	destination := "ネザー"

	// 行き先に応じた結果を出力
	switch destination {

	case "オーバーワールド":
		fmt.Println("あなたはスケルトンから逃れようと溶岩遊泳を試みた")

	case "ネザー":
		fmt.Println("あなたはガストに火だるまにされた")

	case "ジ・エンド":
		fmt.Println("あなたは奈落の底へ落ちてしまった")

	default:
		fmt.Println("あなたは落下してきtた金床に押しつぶされた")

	}
	
}
Expand

Go Playground

こんな雰囲気になります。

正確な文法については、言語仕様(Switch statements)に記載があります。

評価順序

switch の評価順です。

上から順に case の値と比較していくようです。

評価順序
評価順序

他の言語(C言語とか)では、case句に書く処理の最後で break を書き、以降の case に書いた処理をしないよう、明示的に switch を終了させるんですが、Go の場合は暗黙的(自動的)に break されるようです。

評価値なしの switch

Go の switch は評価値を省略できるようです。

例えば、先程のプログラムを評価値なしにしてみますと…

Go
// 青いたぬきのスペックを定義してみる
type Doraemon struct {
  Height float32  // 身長
  Weight float32  // 体重
  Power float32   // ちから
} 
Expand

Go Playground

と、こんな感じになります。

case 部分で条件を完結させてしまっているので、本来の switch 的な使い方じゃない気がしますが…、一応、if の代用としてシンプルな表現ができると説明にあります。

今回のまとめ

今回は以上ですね。

それではポイントを纏めてみます。

  • switch の文法は
    switch <評価値> {
    case <A値>:
    <処理>
    case <B値>:
    <処理>
    default:
    <処理>
    }
    と書くんです
  • case部分は上から順に評価されるんです
  • switchの評価値は省略できるんです

switch case も if や for と同様によく使う制御分なので、しっかり頭に入れておきたいですね。

それじゃ~また次回~。٩(๑´3`๑)۶

コメント

タイトルとURLをコピーしました