CodeCamp(コードキャンプ)のJavaマスターコースレビュー・感想|7日目

こんにちは。コードキャンプ株式会社が運営するプログラミングスクール「CodeCamp(コードキャンプ)」でプログラミングを学習している高橋です。

高橋吾郎
プログラミング初心者の高橋吾郎です!

現在は全く別の業界で働いていますが、今後はシステムエンジニアとしてのキャリアに進もうと思っています。その準備として、JavaマスターOLコースでJava開発の基礎を学んでいきます!

私が受けているコースは「Javaマスターコース」。Javaは、数あるプログラミング言語の中でも、日本国内において、特に求人案件数が多い言語です。CodeCamp(コードキャンプ)の「Javaマスターコース」では、Javaエンジニアには必須の「オブジェクト指向」から、「JSP/サーブレット」「データベース連携」まで、Javaを用いてWebアプリケーションを開発するために必要な知識を基礎から実践まで学びます。

受講回数は2ヶ月(20回)、4ヶ月(40回)、6ヶ月(60回)の3つから選べます(今回は2ヶ月間受講します)。

それでは、2018年11月12日に受講した、Codecamp(コードキャンプ)「Javaマスターコース」第7回目の学習内容をレビューします

Javaマスターコース7日目|CodeCamp(コードキャンプ)

本日の講師:勝田郁郎先生

普段はSOHOにてWEB系、ソーシャルゲーム関連の開発を行っております。
実務に基づいた使えるスキルを丁寧に解りやすくお伝えいたします。

現在学んでいる箇所では無い箇所の質問も、是非して下さい。
どんな質問を何度して頂いても構いません。
理解し、使いこなせるようになるまで、お手伝いさせて頂きます。
いっしょに頑張りましょう。

引用:CodeCamp(コードキャンプ)

第7回目のレッスンで学んだことは以下の内容です。

CodeCamp(コードキャンプ)Javaマスターコース第7回目のレッスン内容

  1. 第16章課題の添削

今回は、受講までにJavaマスターコース第16章の課題である「Big or Small」ゲームの制作に取り組みます。基礎編のレッスンは今回で最後になります。

1.第16章課題の添削

Java基礎OL最終課題 「Big or Small」ゲーム作成(抜粋)

高橋吾郎
それでは今回は基礎編の最終課題である「Big or Small」を作ってみました。

一応動作はするのですが、キレイなコーディングになっているか見ていただけますでしょうか。

勝田郁郎先生
はい。よろしくお願いします。
高橋吾郎
まずメインクラスから見てください。

Gameクラスでチップの枚数とカードを管理しており、初期化したのち、ゲームの処理に入ります。

Mainクラス

勝田郁郎先生
現在9行目が「game.exit == 0」というようにフィールドに直接アクセスする格好になっていますね。
高橋吾郎
Mainクラスでは参照するのみで、想定外の値が入ることはないので、これで十分かと思いました。
勝田郁郎先生
今回は自分で書いているので確かに大丈夫かもしれません。

ただ、例えば高橋さんが後輩に「Mainクラス書いといて~!」って作らせたときに、後輩が「game.exit = 0」と書いて、条件式でなく、代入にしてしまったりしたらどうでしょう。

高橋吾郎
確かに、ほかのクラスにまでコーディングのミスが波及してしまいますね……。
勝田郁郎先生
人間は必ずミスを犯します。プログラムを作る人を信用しない、人間不信に陥ったような考え方をすることが必要です(笑)
高橋吾郎
ヒューマンエラーがほかの場所に波及しないような設計が必要ということですね。
それではここはgetterに変えておきましょう。

getterに変えた

勝田郁郎先生
次にですが、drawCardA()とはどういうメソッドでしょうか。
高橋吾郎
このプログラムでは先に引いたほうのカードをcardA、後に引いたカードをcardBとしてGameクラスのフィールドで管理しています。

メソッドの中身はこんな感じです。

カードを引くメソッドが二つある

勝田郁郎先生
メソッドが二つに分かれていますが、できれば1つにできればうれしいですね。

引数を使って、どっちのカードに代入するかを書けばそういうプログラムが書けそうですね。

高橋吾郎
引数から場合分けすればよいですね。こういった感じでしょうか。

引数によりカードを識別する

高橋吾郎
確かに、わざわざ分けなくても、この書き方ならMainクラスを1文字変えればいいだけなのですっきりしますね。
勝田郁郎先生
この処理のいいところは、仮にカードを引くときに前処理が必要になったとしたら、一つのメソッドに書けばいいだけになる、ということです。

同じような処理が2つに分かれていると、後でメンテナンスが必要になったときに大変になってしまいます。

さて、次に進みましょう。大小の回答を入力する部分を見てみましょうか。

0か1を入力するメソッド

高橋吾郎
はい。

0か1を入力するだけなのですが、例外処理のため、結構長い行数になっていますね。同じようにYES/NOを入力させるようなメソッドはほかにも何回かでてきました。

勝田郁郎先生
そういった場合には入力用のクラスを別に作るという手もあります。
試しに作ってみましょう。

入力用の新しいクラス

高橋吾郎
中身はさっきのプログラムをコピペしただけですね。

フィールドにアクセスしないため、インスタンス化しなくてもよい、staticなメソッドにできています。

勝田郁郎先生
このメソッドを使うことで、ほかのクラスで何度もこの記述をしなくてもよくなりましたね。answer()メソッドも大分短くなりました。

すっきりしました

高橋吾郎
ほかにもダブルアップやゲーム継続の意思を聞く処理があるのでそっちも短くなりますね。

別のところでも使うものはクラス化しておけば便利に使うことができますね!メンテナンスの際にも便利そうです。

ほかのメソッドも同様に短くなった

勝田郁郎先生
次に、トランプの大小を比較するメソッドを見てみましょうか。

judgeクラス。画面下もスートの比較について場合分けが続いている

高橋吾郎
はい。

Gameクラスにあるこのjudge()メソッドでは、まず先に引いておいた二枚のカードの数値を比較します。次に、数値が同じだった場合には比較したcompareNum(Card)メソッドから9が返されるため、その後switch文により、再度compareSuit(Card)による大小比較を行います。

勝田郁郎先生
judge()クラスでは勝敗の判定と、その後処理のみを残して、カードの比較はカードのクラスの中で行いましょう。

スートの比較も含めて、カードを比較するcompareCard()メソッドを使って以下のように書き換えてみましょう。

書き換えたコード

高橋吾郎
私が書いたコードより、何をやっているのかわかりやすくなりましたね。

でも、どのクラスにどのメソッドを書くのかという判断は結構迷いますね。

勝田郁郎先生
誰が握っていて、誰の責任でやるのっていうことですね。
高橋吾郎
「それはそっちの仕事でしょう」ってなんだか会社みたいですね(笑)
勝田郁郎先生
そのとおりなんです。「そこまでやられると俺それ責任持てへんで!」っていうパターンがあります。

前の書き方ですと、カードのクラスでは数値の比較とスートの比較でしかメソッドをもっていませんでしたが、このように改修したことで、より大きなくくりまでカードのクラスで把握できるようになりました。

高橋吾郎
前の書き方ではGameクラスではお世話を焼きすぎでしたね。確かに、のちのちメンテナンスする際にもこっちのほうが便利そうです!

そのほかは大丈夫そうでしょうか。

勝田郁郎先生
山札のクラスを見てみましょう。

山札をつくるコンストラクタ

勝田郁郎先生
この、loop1,loop2っていうのはできればやめたいですね。

この変数が何をしているのかわからなくなってしまいます。

書き換えたコンストラクタ

勝田郁郎先生
このような変数名を用いることで瞬間的に何を回しているのかわかりますね。

私の師匠の受け売りですが、「一番良いのはコメントを書くこと。次に良いのがコメントを書かなくてもコードがコメントの役割をしているソースコード。」というのがあります。ソースコードが日本語のように読めるような形にしておくのが良いですね。

こういった細かいところがプログラムを難読化させるかどうかということに関わってきます。

高橋吾郎
なるほど。

確かに、4や13という数値の持つ意味がこれならぱっとわかりますね。ほかの人が見ても分かりやすいコーディングを心がけていきたいと思います!

勝田郁郎先生
ほかの部分は大体大丈夫そうですね。

ところで、例えばこのカードクラスと山札クラスがあると、どんなトランプゲームでもできそうですね。

先ほど作成したInputManagerクラスもメソッドを足していけば入力に関することは何でもできそうですね。そうやって機能を足していった便利なクラスをどれだけ今まで作ってきたかということが大事です。

高橋吾郎
そうなんですか?
勝田郁郎先生
例えば、新しいプログラムを書くときに、同じような処理をすることはたくさん出てきます。

そういったときに、前の仕事で作ったプログラムを利用すれば、作る時間を短縮することができて、仕事の効率を上げることができます。

とはいえ、最初からそれをやると思うので、やっていくうちによく使ったり、「このあたりはまとめておくと便利そうだな」と思ったときにクラスとしてまとめたりして、試行錯誤してみてください!

Javaマスターコース7日目の成果と課題|CodeCamp(コードキャンプ)

第7回を受講して学んだことと、次回に向けた課題について整理します。

  • プログラムの設計について
  • 読みやすいコーディングについて

今回は最終課題の制作を通じて、プログラムの中でどうクラスを設計していくかということと、ほかの人が読んでも分かりやすいコーディングについて学びました。

授業では基礎編の最後の課題を終えることができたので、次回からは応用編に取り組むこととなります!

Javaマスターコース7日目の感想|CodeCamp(コードキャンプ)

基礎編の最終課題、とても難しく時間もかかりましたが、自分でどんなクラスが必要なのかを考えて組み上げました。最後に動いたときの達成感はたまりません(笑)

今回は簡単なトランプゲームでしたが、今まで習ったことを応用すればもっと複雑なゲームも作ることができるかなと思います。今回一つ完成品を作ったことで、これからの創作活動にモチベーションが上がりました!

CodeCamp(コードキャンプ)の「Javaマスターコース」とは

CodeCamp(コードキャンプ)の「Javaマスターコース」は、Javaエンジニアになるために必要な知識を基礎から実践まで学べるコースです。

>>無料体験レッスン受講で10,000円OFFクーポンプレゼントキャンペーン実施中

CodeCamp(コードキャンプ)「Javaマスターコース」の料金

2ヶ月
  • 料金:148,000円(税抜)
  • レッスン回数:20回
  • 受講期間:60日間
  • 週の学習時間目安:20〜25時間
4ヶ月
  • 料金:248,000円(税抜)
  • レッスン回数:40回
  • 受講期間:120日間
  • 週の学習時間目安:10〜15時間
6ヶ月
  • 料金:298,000円(税抜)
  • レッスン回数:60回
  • 受講期間:180日間
  • 週の学習時間目安:5〜10時間

LINE@無料相談

無料で相談する

編集部がプログラミングスクール選びのアドバイスをさせて頂きます。「スクールがたくさんあり過ぎてどれを選べば良いのか分からない」「どの言語を勉強すれば良い?」「転職に有利なスクールはどこ?」など、どんな質問でもOKです!気軽にご連絡ください★