こんにちは!ばーんです。
今回は有名な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までなので、比較演算子か数値変えないと…でえいっ
いけましたね!(画面では切れてますが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を見て、とりあえず動くものを作りたいから…
いけた!あとはこれを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入れてた経験があったので理解が早かったです)
よし!おk!
※0が表示されてるせいで最初がfizzなので、i=1にここで変更します
###③②より優先させて3かつ5の倍数の時はfizzbuzzを表記させる
これはつまり、
・3かつ5の倍数を求める
・②より優先的に処理させる
が必要で、
####・3かつ5の倍数を求める
→数学やってて良かったぁ…最小公倍数分かればいいので、この場合は「15」でおkですね
ごめんなさい。なんかこれは感覚的に15だなって分かりました。
####・②より優先的に処理させる
→エクセルやってて良かったぁ…この場合最初の条件のチェックで15の倍数か?チェックすればいいので、「5」を追加した時と同じ容量でやればおk!(のはず)
これを組み合わせると…ドンっ!
できた!勝った!第三部(完)!
##「ちょっと待って」
ここでメンターから神の啓示が。要約すると
「動いたものを作れたのはOKなんだけど、改善点がある」
といって作ってくれたコードと比較しながら説明してもらいました…
今のコードだと他人が見た時にどう動くか分かりにくい
fizzbuzzは有名すぎるので分かるけど、業務に落とし込んで考えるとコード量も増えるし
数値が変わった時に応用が効かない
fizzbuzzとして成立しているけど…
なるほどなるほど…
(本当は作ってもらったやつを元に説明したかったんですが、無くしてしまったので…)
というわけで最後に言われた記憶を元に、直していきます!断片的に思い出していくと…
・3とか5が何を示しているのか?
・あとからこの3とか5の数値を変えるのがこの状態だと煩わしい
みたいな感じだったはず…つまり変数(定数)宣言して、分かる名前にして…
こんな感じかな?
こうすれば上の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で確認する
環境構築で躓いて途方に暮れるのは勿体無いので、最悪2でもいいのかなーとは思います。以上です。