LoginSignup
1
0

More than 3 years have passed since last update.

FizzBuzz(通常 / 再帰 / クラス)

Posted at

はじめに

なんか書き殴りたくなったので書きます。

プログラム始めたばかりの時は、

「オブジェクト指向…??」

「再帰???」

みたいな印象だったのですが、気付いたら書けるようになってました。嬉しい。

備忘録的に残しておきます。
壮大なもの書こうかと思ったんですが、初心に帰ってFizzBuzzで

補足

①この記事では「これがFizzBuzzだ」みたいな話はしません
定義は下記に記しますがその定義があっているかどうかは議論しません。

②再帰的な書き方だったりクラスの書き方はもっと良い方法あると思います。
そんな時は是非マサカリが欲しいです。

定義
・1~100を順番に表示する
・3と5の倍数の場合[FizzBuzz]と表示する
・3の倍数の場合[Fizz]と表示する
・5の倍数の場合[Buzz]と表示する

通常ver

for (let i = 1; i <= 100; i++) {
  const Fizz = 3;
  const Buzz = 5;
  if (i % (Fizz * Buzz) === 0) {
    console.log(i, "FizzBuzz");
  } else if (i % Fizz === 0) {
    console.log(i, "Fizz");
  } else if (i % Buzz === 0) {
    console.log(i, "Buzz");
  } else {
    console.log(i);
  }
}

まぁ他にも書き方あると思いますがとりあえず次。

再帰ver

const FizzBuzz = (i, lastNum) => {
  const Fizz = 3;
  const Buzz = 5;
  if (i % (Fizz * Buzz) === 0) console.log(i, "FizzBuzz");
  if (i % Fizz === 0) console.log(i, "Fizz");
  if (i % Buzz === 0) console.log(i, "Buzz");
  if (i === lastNum) return;
  console.log(i);
  return FizzBuzz((i += 1), lastNum);
};

FizzBuzz(1, 100);

書いてから気付いたんですがFizzBuzzが再帰に向いてない気がする。
なんか書いてて再帰の良さみたいなものを表現できなかった…

クラスver

class CheckNumbers {
  constructor(i, Fizz, Buzz) {
    this.i = i;
    this.Fizz = Fizz;
    this.Buzz = Buzz;
  }

  main() {
    this.checkFizzBuzz();
    if (this.i === 100) return;
    return this.main((this.i += 1));
  }

  checkFizzBuzz() {
    if (this.i % (this.Fizz * this.Buzz) === 0) console.log(this.i, "FizzBuzz");
    if (this.i % this.Fizz === 0) console.log(this.i, "Fizz");
    if (this.i % this.Buzz === 0) console.log(this.i, "Buzz");
    if (this.i !== 100) console.log(this.i);
  }
}

new CheckNumbers(1, 3, 5).main();

なんかもっとよく書こうと書いてるうちに飽きてしまった…

もっとええ書き方あるで!っていう場合は是非教えてくださいm_ _m

1
0
9

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
1
0