【第六回Go言語学習備忘録】FIZZBUZZ!を駆使してif,for,switch文をまるごとマスターしたい!

2月 12, 2022

どもども。最近ジャケットとパーカーばかり買ってしまう、saisaiです。


みなさん、FIZZBUZZ!をご存知でしょうか。


“1~100までの数値を出力し、その中で3で割り切れるものはFIZZ!,5で割り切れるものはBUZZ!,3でも5でも割り切れるならFIZZBUZZ!と出力するコードを書きなさい。"というエンジニア界隈ではあまりにも有名なコーディングテストです。


今回はFIZZBUZZ!を利用してタイトルにある3つの項目について学習しようと思います。


プログラミング素人がやるにはあまりに大変そうですが、頑張りたいと思います!

まずはif文とfor文でFIZZBUZZ!を作成

それではif文とfor文を使用してFIZZBUZZ!を作成していきます。
今回僕が作成してみたコードはこちら。

package main

import "fmt"

func main() {
	for i := 1; i <= 100; i++ {
		if i%15 == 0 {
			fmt.Println("FIZZBUZZ!")
		} else if i%3 == 0 {
			fmt.Println("FIZZ!")
		} else if i%5 == 0 {
			fmt.Println("BUZZ!")
		} else {
			fmt.Println(i)
		}
	}
}

まずはfor文で1~100までの数字を連続指定し、変数"i"に次々代入するようにします。変数iに初期値(今回は1)を代入し、iの範囲を指定します。"i++" とすることで変数iの値を1ずつ追加していくという処理が可能となります。

for i := 0; i <= 100; i++

そして"i"に代入された値によって条件分岐するようif文を作成します。演算時%は割り算した時の余りを出力することができますので、余りが0の場合を割り切れる場合と定義しました。

		if i%15 == 0 {            //3でも5でも割り切れる場合
			fmt.Println("FIZZBUZZ!")
		} else if i%3 == 0 {    //3で割り切れる場合(else if)
			fmt.Println("FIZZ!")
		} else if i%5 == 0 {    //5で割り切れる場合(else if)
			fmt.Println("BUZZ!")
		} else {
			fmt.Println(i)      //その他の場合(else)
		}
	}

と言った具合です。

ちなみに、条件は上から順番に参照されるため3でも5でも割り切れるという条件は"必ず一番最初に指定"しておく必要があります。2番目以降に指定すると、他の条件が先に参照されてしまい、期待する数値で"FIZZBUZZ!"と出力することができなくなってしまいます。(ちょっとここでハマったのは秘密)

ちなみにif文には"continue"と"break"というものがあるようです。例えば、

package main

import "fmt"

func main() {
	for i := 1; i <= 100; i++ {
		if i%3 == 0 {
			continue
		} else if i == 50 {
			break
		}
		fmt.Println(i)
	}
}
//1~49の内、3の倍数を除いて表示


上記のコードは"1~100まで数字を変数"i"に代入し、3で割り切れるものは表示されず、50の段階で強制終了"という処理になります。continueを指定すると、処理をスキップしてfor文に戻ることができます。一方breakを指定した場合は処理をスキップし、さらにfor文自体を抜け出します。


FIZZBUZZ!から少し脱線していますが、for文の挙動に柔軟性を持たせることができそうなので、是非ともマスターしておきたいです。

switch文を使用してみる

switch文を使用して条件分岐処理を定義することもできます。では、FIZZBUZZ!のコードをswitch文で作成するとどうなるのでしょうか。早速コードを書いてみます。

package main

import "fmt"

func main() {
	for i := 1; i <= 100; i++ {
		switch {
		case i%15 == 0:
			fmt.Println("FIZZBUZZ!")
		case i%3 == 0:
			fmt.Println("FIZZ!")
		case i%5 == 0:
			fmt.Println("BUZZ!")
		default:
			fmt.Println(i)
		}
	}
}

個人的にはswitch文の方がシンプルで分かりやすい気がします。基本構造は以下のような感じでしょうか。

switch {
		case 条件1:
			処理
		case 条件2:
			処理
     ・
     ・
     ・
		default: //その他の処理
			処理 
		}

基本構造さえ理解しておけば、使用しやすそうな感じがしますね!

ひとこと

以上、今回はFIZZBUZZを使用してfor,if,switch文をまるごとマスターしてみようという記事でした。どのサンプルコードでも大体見かける3要素になりますので、しっかり抑えておきたいところです。


ここまで読んでいただきありがとうございました。


-saisai-


↓本日のオススメ

Golang

Posted by CY