1. TOPTOP
  2. Web学習法

世界のナベアツ問題からみる要件定義の大切さ

|

nabeatsu

以前、

という記事を書きましたが、今回はそのギャグをバージョンUPさせました。

「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなります」

実は、世界のナベアツさんのギャグは、「3の倍数と3の付く数字のときだけアホ」になっているわけではありません。

以前YoutubeにUPされていた動画をよく見ると、ナベアツさんは、「5の倍数のとき犬っぽくなる」とおっしゃってました。

これはプログラミングのネタ的においしそうです。というわけで、「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなります」を忠実に再現してみました。

まず最初に要件定義をしよう!

最初、自分でもいろいろとコードを書いてみました。しかし、どうも上手く動かない…。プログラミング掲示板で質問を投稿して、教えていただいた回答の1つに、「最初に要件定義をしっかりしましょう」という回答をいただきました。

そういや要件定義なんて決めてなかったな~。もっとも要件定義と言うより、もっとかる~く「条件」と言う具合に考えてたものはあります。

  • 3の倍数と3のつく数字のときだけ「アホ」になる。
  • 5の倍数のときは「ワン」と吠える。
  • 3と5の公倍数のときは「アホワン」と吠える。

でも、この要件定義だと仮に40までカウントしたときに、「35」なんて数字が来たときは、ど~すんの?と言うツッコミがきそう。

「35」は3で割り切れないけど3が含まれる数字ですが、その動画を見ると、世界のナベアツさんは「アホっぽい犬のように吠える」というギャグになっています。

ということは、要件定義は3つでは足りません。4つの要件定義にする必要があります。

  • 3の倍数と3のつく数字のときだけ「アホ」になる。
  • 5の倍数のときは「ワン」と吠える。
  • 3と5の公倍数のときは「アホワン」と吠える。
  • 3で割り切れないけど3が含まれる数字は「アホワン」と吠える。

プログラミングをする前には要件定義を

ということはプログラムがどうこういう以前に、最初に要件未定義の部分があるから、つまずいていたんやね…(汗
各言語の初心者用の本にはそんなこと書いてへんかったなぁ。(ひょっとしたら私が見落としてだけかもしれませんが)

ただ「3の倍数と3の付く数字のときだけアホになります」というギャグに、「5の倍数のときは犬っぽくなる」というギャグを付け足せれば、ええわ~と思っていたんですが、そういうわけではないんですね。

プログラムを組む仕事は、定義/未定義を見分けるということも必要なんか~。

「3の倍数と3の付く数字のときだけアホになり、5の倍数のときは犬っぽくなる」コード

最後に出来上がった一応、JavaScriptによるコードを紹介しておきます。リンク(新しいタブで開く)を貼っておきます。

for (var i = 1; i <= 40; i++) {

var c3f = /[3]/.test(i.toString());
	var d3f = i % 3 == 0 ? true : false;
	var d5f = i % 5 == 0 ? true : false;

	document.write('世界のナベアツ→');

	if(d3f && d5f) {
		document.write(i + ' : アホワン
');
	} else if(d5f && c3f){
		document.write(i + ' : アホワン
');
	} else if(d5f){
		document.write(i + ' : ワン
');
	} else if(d3f || c3f){
		document.write(i + ' : アホ
');
	} else document.write(i+' :
');

}

別解としては、こんな書き方もあるようです。

for (var i = 1; i <= 50; i++) {

	var text = i.toString();
 	var target = /[3]/.test(text);

 	if (i % 3 === 0 || target) {
  		text = text + 'アホ';
 	}
 	if (i % 5 === 0) {
  		text = text + 'ワン!'
 	}

 	document.write('世界のナベアツ:' + text + '
');
}