6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初学者実践録】Fizzbuzzゲームについて

Last updated at Posted at 2020-01-29

こんにちは!ばーんです。

今回は有名なfizzbuzzゲームをjavascriptでやっていきます。

#はじめに

今回はQiitaをメモ形式で使用してみます。
本当に考えた順序に、何を考えたか?記載しながら書き綴ります。
(僕のレベルはJSとjQueryをprogateでやった程度です^^)

ですので、対象は

・初学者がどんなルートで考えているのか知りたい
・JSはprogate終わったところで正直不安…

という方が対象となっていますのでご理解下さい。

※流石に多少の編集はしますが、基本は書き殴っていくだけです

##目標確認
一般的なルールはこちら

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

基本的にどの言語でも表現できそうですが、今回はJSで書いていきます。
ここで、ルールから読み取る必要なものは、
###①1〜100まで表示するプログラム
###②3と5の倍数の場合はそれぞれfizz,buzzと表記させる
###③②より優先させて3かつ5の倍数の時はfizzbuzzを表記させる
ですかね。それでは行ってみましょー!
今回はfizzbuzzでは検索せずにその他の検索で解いていきます。

###①1〜100まで表示するプログラム
はい。これ何か見たことありますね…とりあえずそのまま検索してみます
「JS 1〜100まで表示」と…

あ、for文ね!やった気がする… 参考サイト

for (var i = 0; i < 10; i++) {
document.write (i);
}

で、100まで表示なので、100に変える。でえぃっ

だとdocument.writeがよく分からん…表示でいいはずなのでお馴染みのconsole.logに変えると

おし!ただし99までなので、比較演算子か数値変えないと…でえいっ

Screen Shot 2020-01-28 at 22.48.35.png いけましたね!(画面では切れてますが100まで表記されてます)

###②3と5の倍数の場合はfizz,buzzと表記させる
これは、恐らくif文ですね^^これぐらいであれば自分でもわかります(そんな気がする^^)

if文の作り方ってどうだったっけ…「JS if」で検索と… 参考サイト

if (条件式) {
    条件式が成り立った場合処理を実行
}else{
    条件式が成り立たなければ処理を実行
}

あーこんなんだった。これをいじってまずは3の時を出してみると…

for (var i = 0; i < 101; i++) {
    if ( i=3) {
        console.log("fizz");
    } else {
        console.log(i);
    }
}

あれ。ちょっとまって全部fizzになってるwしかも処理終わってなくない?
あれ?esc押しても消えない。macが唸ってる。ふぁあああって唸ってる

焦る焦る。一旦VS(テキストエディタ)閉じます。心をしずめる。

他の例文を見ると…あー条件式がおかしいのね。演算子の問題か。
MDNを見て、とりあえず動くものを作りたいから…
Screen Shot 2020-01-29 at 17.28.14.png
いけた!あとはこれを3の倍数にしたらいいので。えーっと…「nの倍数」で調べるとなんか数学的なことが出てくる…
違う違う。「nの倍数 JS」で調べると、TOPに良さげなサイトが。

なるほど。3で割り切って0になれば3の倍数ね。確かに。

for (var i = 0; i < 101; i++) {
    if ( i % 3 === 0) {
        console.log("fizz");
    } else {
        console.log(i);
    }
}

をいけたいけた。あとは5の条件も追加して…(この辺りはエクセルでIFの分岐にIF入れてた経験があったので理解が早かったです)
Screen Shot 2020-01-29 at 17.40.05.png

よし!おk!
※0が表示されてるせいで最初がfizzなので、i=1にここで変更します

###③②より優先させて3かつ5の倍数の時はfizzbuzzを表記させる
これはつまり、
・3かつ5の倍数を求める
・②より優先的に処理させる
が必要で、

####・3かつ5の倍数を求める
→数学やってて良かったぁ…最小公倍数分かればいいので、この場合は「15」でおkですね
ごめんなさい。なんかこれは感覚的に15だなって分かりました。

####・②より優先的に処理させる
→エクセルやってて良かったぁ…この場合最初の条件のチェックで15の倍数か?チェックすればいいので、「5」を追加した時と同じ容量でやればおk!(のはず)

これを組み合わせると…ドンっ!
Screen Shot 2020-01-29 at 17.57.06.png
できた!勝った!第三部(完)!

##「ちょっと待って」
ここでメンターから神の啓示が。要約すると
「動いたものを作れたのはOKなんだけど、改善点がある」
といって作ってくれたコードと比較しながら説明してもらいました…

今のコードだと他人が見た時にどう動くか分かりにくい
fizzbuzzは有名すぎるので分かるけど、業務に落とし込んで考えるとコード量も増えるし
数値が変わった時に応用が効かない
fizzbuzzとして成立しているけど…

なるほどなるほど…
(本当は作ってもらったやつを元に説明したかったんですが、無くしてしまったので…)

というわけで最後に言われた記憶を元に、直していきます!断片的に思い出していくと…

・3とか5が何を示しているのか?
・あとからこの3とか5の数値を変えるのがこの状態だと煩わしい

みたいな感じだったはず…つまり変数(定数)宣言して、分かる名前にして…

こんな感じかな?
Screen Shot 2020-01-29 at 20.24.32.png
こうすれば上のconst部分を修正するだけで、出力や計算数値が変えれるはず。

##答え合わせ
ここで「fizzbuzz JS」で検索します(参考記事)。

あーなるほど。&&でかつを表現するのね。
最大公倍数の出し方調べてて、素因数分解とか連除法しかでてこなくて諦めてました;;

そして、else ifを使うのね…(自分のだとネスト深いし、というかインデント間違えてる気もするし)

const fizzNumber = 3;
const buzzNumber = 5;
const fizz = "fizz";
const buzz = "buzz";
const fizzbuzz = fizz + buzz;

for (var i = 1; i < 101; i++) {
    if ( i % fizzNumber === 0 && i % buzzNumber === 0) {
        console.log(fizzbuzz);
    } else if ( i % fizzNumber === 0) {
        console.log(fizz);
    } else if ( i % buzzNumber === 0) {
        console.log(buzz);
    } else {
        console.log(i);
        }
    }

↑最終的に修正した形です。記事では無駄な処理と書かれていましたが、直感的にはこちらの方が処理を理解されやすいと思っているので、この形で置いています。

##さいごに
いかがでしたでしょうか?
今回は自分のメモ書きがメインだったので、最後まで見て頂いた方はありがとうございましたToT
もしよろしければ感想などを聞かせて頂けると嬉しいです。
それではまた!

###補足
今回はnode.jsを使用しました。自分はたまたまnode.jsを環境構築していたので使用できましたが、初学者の方で「そもそもJSってどこに表記するの?」ってなる方もいらっしゃるかと思います(実際に自分が最初した時なりました)
JS自体はWeb上で動くものなので2つ方法があります。
1、node.jsを入れる 少ししんどいですが、後々を考えるならこちらがおすすめです
2、htmlと紐づけてクロームのデベロッパーツール→consoleで確認する
Screen Shot 2020-01-29 at 20.36.40.png

環境構築で躓いて途方に暮れるのは勿体無いので、最悪2でもいいのかなーとは思います。以上です。

6
1
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?