新人エンジニアがプログラミングのスキルを向上させるためには、プログラミングの経験を積むしかありません。しかしながら、新人は保守や運用からスタートすることが多く、業務でプログラミングする経験をなかなか積むことが出来ないです。研修がある会社ではプログラミングを研修で行いますが、正解が用意されているものが多く、なかなか練習にはならないと思います。そこで、筆者が何回かに渡ってプログラミングネタを紹介しようと思います。OJTで教育係になった先輩もネタに困っている方が多いと思いますので、是非、活用頂ければと思います。
福引アプリを作ろう
福引アプリとは?
プログラミング初心者にピッタリなネタで、「福引」があります。商店街でガラガラ回して当たりが出たらハワイ旅行!みたいな感じのやつです。それをアプリケーションとして再現してみようというネタです。
福引にする目的
この項はOJT教育担当の方向けの説明です。後で仕様を詳細に記載しますが、福引はガラガラを回して、球を1回出すと玉が減っていきます。アタリの玉とハズレの玉を用意します。アタリの玉は1~3等の様に複数種類用意します。ということは、ランダムで玉を用意し、1回ごとにストックされた玉を引き算するロジックを考慮する必要があります。また、出てきた玉の種類によって結果メッセージを分岐させるロジックも考慮する必要があるので、プログラミング初心者が最低限知っている必要のあるコーディング知識を使って作る必要があります。仕様はOJT教育担当の方がアレンジしても良いと思いますので、出来るだけ色々なテクニックを使うようにしてあげて下さい。
福引アプリの仕様
リアルな福引を考える
商店街にあるガラガラを考えて見て下さい。100回分ガラガラを回せることにしましょう。1等はハワイ旅行です。当たれば嬉しいですが、商店街の予算の都合上、アタリの玉は1個だけです。2等は家電製品で、アタリの玉は3個入っています。3等は商品券1,000円分で当たりの玉は10個入っています。そしてハズレは合計100個からアタリ玉を引いた86個ですね。これはポケットティッシュにしましょう。というわけで以下の様にまとめられます。
- ガラガラ回す上限:100回
- 玉の合計数:100個
- 1等:1個
- 2等:3個
- 3等:10個
- ハズレ:86個
さて、ガラガラなので、1回まわしてどの玉が出てくるかわかりません。なので、ランダムで出てくる様にする必要があります。また、1回まわして出てきた玉はガラガラに戻せないので玉の合計数は減らしていく必要があります。そのため、連続してまわすと以下のように変化していきます。
- 1回目に出てくる玉:100個中1個ランダム
- 2回目に出てくる玉:99個中1個ランダム
- 3回目に出てくる玉:98個中1個ランダム
上記の様に1回まわすごとに合計値が減っていくことを抽象化すると以下になりますね。
- n回目に出てくる玉:100-(n-1)個中1個ランダム
福引自体の仕様はこんな感じです。さて、ここまでの記述で実装出来そうな人は実装してみて下さい。次は作りこみ方について解説をします。
プログラミングの条件
ここで使ってほしいのはコレクションとランダム関数(もしくはシャッフル)です。まず、配列かリストを用意して、要素数上限を100とします。ここからコレクションの中に入っている要素を取り出しますが、ガラガラに出る玉がランダムに出てくる様にする必要があります。ヒントとしては以下の2つが考えられます。
- コレクションにセットする際にランダムにセットして順番に取り出す
- 整列された状態でコレクションにセットして、取り出す時にランダムにする
結果としてはどちらも同じです。1の場合は玉は順番に取り出すだけなので、最初の1回だけランダム関数を使用すればおしまいです。ゲーム性を重視するのであれば、2のコーディングをしたほうがリアルです。ただ、結果的にはどちらも同じくランダムに玉が出てくるので、どちらかの方法でコーディングしてみて下さい。よりリアリティを追求するのであれば、1と2を両方実装することになります。
もちろん、基本的な条件分岐(IF文)や繰り返し処理(LOOPなど)のコーディングも必要です。また、玉が出てきたときにメッセージを出して、玉の種類によってメッセージ内容を変える分岐を入れる実装もしましょう。100回まわして玉が無くなった場合は、福引が終了するメッセージを出す処理も必要です。アプリの流れをまとめると以下になりますね。
- スタートボタンを押す
- 要素数100のコレクションを用意する
- 玉がランダムで出る
- 当たりの場合→当たりメッセージを出す
- ハズレの場合→ハズレメッセージを出す
- 無くなるまで繰り返す
- 無くなったらおしまい
テスト要件
テストですが、100回まわしてアタリ玉が指定した数だけ出てくるかが分かれば大丈夫です。例えば、1等を1個用意したのに、2回1等が出てきたり、そもそも出てこなかったりするとバグです。あくまでもこれは練習なので、テスト仕様書をガリガリと書く練習をさせたいOJT担当の先輩は、このタイミングで練習させてあげて下さい。
まとめ
福引アプリというプログラミングネタを紹介させて頂きました。基本的なテクニックを複数使用して作る必要があると思いますが、プログラミング初心者でもとっかかりやすい内容になっていると思います。簡単だと思った人はグレードアップして改修してみて下さい。