Java

【Javaサンプル】自動販売機(Level2) メソッドに小さく分割する

投稿日:2019年12月11日 更新日:

前回の自動販売機(Level1)では、まず動くものを作りました。

そこでは1つのメソッド(Main)にすべてをコーディングしていましたが、
これを機能ごとに分割していきます。

実際の仕事では、1つの大きなメソッドにすべてを書くこともありますが、
非常に修正が困難です。

自分にも他人にも優しいプログラミング技術として、「メソッドに小さくわける」
というスキルは身に着けるように意識しておきましょう。

 

元々のコード

 

小さいメソッドに分割したコード

 

説明

①商品の初期化

商品のリストは、Mapで保持しています。
キー:商品名(コーラなど)
値:金額

これをそのまま切り出してメソッド化しました。
これによって、将来商品リストの中身が変わった場合、initItemsメソッドのみを修正すればいいことになります。

②入金

入金した金額を加算する処理の部分だけを切り出しました。
入金額が商品リストの最低金額に達したらという部分は入金処理ではないため、
含まれていません。

③金額チェック(最低購入金額)

ここは入金額が商品リストの最低金額に達したらという判定結果のみを切り出しています。
最低金額商品の取得と、入金額が最低金額商品の金額未満かの判定の2つが機能としてあります。
これはさらに分けてもよさそうな部分です。

④商品選択

入金額以下(つまり、購入可能な商品)のリストを作成している部分を切り出しました。
リストの作成と同時に、System.out.printでも表示を行っているので、機能的には2つあることになります。
ここのさらに分けてよさそうな部分です。

⑤販売

入力された商品名の判定と表示を行う部分を切り出しました。
ここでも、判定と表示はさらに分けてもよい部分ですね。

⑥課金

入金額から商品金額を引いたおつりを算出して表示しています。
よくあるのが、以下のような記述です。

次を見て下さい。

こちらの方が「入金額から商品金額を引いたらおつりになる」と、直感的に理解できます。

これは、説明用の変数の導入といいます。
ぜひ使えるように意識してください。

参考:現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法

 

最後に

今回はメソッドに分割することを学びました。
メソッドに分解するメリットは、以下の3つです。
・修正箇所が局所化できる。
・処理を共通化して、再利用できるようになる。
・修正の影響範囲を閉じ込めやすい。

修正が面倒だと感じたり、長いプログラムを書くことに違和感を感じたらメソッド化するタイミングです。
ぜひより良いプログラムを書けるようになってください。

 

Level3

Level3ではクラス分けを行います。
Mainクラスだけではなく、機能を持った別のクラスに分割していきます。
【Javaサンプル】自動販売機(Level3) クラス分け

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【SpringBoot入門】#7~ 検索画面の作成

概要 書籍情報を検索するフォーム(検索フォーム)と検索結果を表示する画面(検索結果一覧)を作成します。 検索フォームと検索結果一覧はHTMLファイルを分けて作成しています。 分けることは必須ではなく、 …

オブジェクト指向でじゃんけんを作ってみる

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 何を作ったか? テーマ:じゃんけん(1対1) 言語:Java OOPで考慮したこと ・ゲームを管理するコント …

【SpringBoot入門】#6~ 登録機能の実装

概要 画面から送信されたデータをDBに登録する機能を実装します。 入力データはバリデーションによってチェックされることとします。 サーバサイドは以下のように各層で処理分けされます。 <Contorol …

【JdbcTemplate】Queryの書き方(SELECT文)

JdbcTemplateでQueryを書く方法です! (SELECT文で、1件・複数件を取得するケース)   前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で …

【Java】ArrayListの最長文字列を取得する簡単な方法

(追記)2020/08/19 1. Listが空の場合(NoSuchElementException)に対応しました。 2. Nullが含まれていた場合、空文字として扱うように修正しました。 Arra …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。