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

プログラミングを習得したい人にとって、プログラミングスクールは「理想の自分に一歩近づける場所」。しかし「プログラミングを学びたいけど、自分にできるか不安」「値段が高くて踏み切れない」「受講のイメージが湧かない」など、挑戦するかを悩んでいる人が多いのではないでしょうか。

どんな様子で授業が進み、どんな学びを得ることができるのか。CodeCamp(コードキャンプ)のJavaマスターコースを受講した様子をお届けします。

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

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

CodeCamp(コードキャンプ)のJavaマスターコースは、Javaを用いたWebアプリケーション開発スキルを身につけることを目的としたコースです。

ログラミング未経験者を対象としており、トランプゲームや社員情報管理システムの制作など、実務に近いプログラミングを経験することが可能です。その他に、ネットワーク通信、データベースアクセス、API、オブジェクト指向のプログラムなどを学習します。

Javaマスターコースの時間・料金プランは以下の通りです。

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

今回は2ヶ月のスケジュールで学習を進めていきます。

それでは、7日目の様子をお伝えします。

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

本日の講師:勝田 郁郎(かつたいくお)先生
普段はSOHOにてWEB系、ソーシャルゲーム関連の開発を行っております。
実務に基づいた使えるスキルを丁寧に解りやすくお伝えいたします。

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

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

全20回のコースのうち、第7回目のレッスン。今回学んだことは以下の通りです。

CodeCamp Javaマスターコース第7回目レッスンの内容

  1. 第14章課題の答え合わせ
  2. 第15章課題の答え合わせ

1. 第14章課題の答え合わせ

今回は、受講までにJavaマスターコース第14章の課題である「日付とオブジェクト」と15章の課題「例外処理」までを予習しました。

高橋吾郎
本日はよろしくお願いします。今回は14章の課題の答え合わせからお願いします。

14章課題本文

・実行すると最初に現在のリストが表示されます。
・書籍を繰り返し登録することができるようにします。
・登録しようとした書籍データで書籍名と著者名が同じものが登録済みの場合は、追加できないものとします。
・また、書籍は最大5冊まで登録できるものとします。空きスペースがなくなったらプログラムを終了します。

14章本文 補足

勝田郁郎
今日は本の課題ですね。

これはJavaではよくあるクラスの構造です。has-aの関係っていうんですけど、本棚は本を所有しているっていう構造を表現したいときに用いるものですね。

高橋吾郎
今回、コンストラクタBookShelfクラスのコンストラクタはデフォルトのものでもよいので、作るかどうか迷ったのですが、これはどういった基準で判断すればよいでしょうか。
勝田郁郎
そうですね。確かにコンストラクタを作らないと、デフォルトコンストラクタが自動で作られます。ですが、コンストラクタを作らないといということは「ないといえばない」んですね。
高橋吾郎
そうなんですか!?
勝田郁郎
そういう状態にしておくと、果たしてコンストラクタがあえて作っていないのか、作るのを忘れているのか分からなくなってしまうケースが生じます。

例えば、時間をおいて自分の書いたプログラムを見たとき。もしくは、人の書いたプログラムを見るときに、コンストラクタを省略してしまうと、省略しているのか、これから作業が必要なのかどうかわからなくなってしまいますね。

高橋吾郎
たしかに、そうですね。
勝田郁郎
よくいわれるのは、プログラムを書くときには「省略していいものは省略してしちゃダメ」といわれています。明示的にするってことですね。

「何にもしないコンストラクタをつくってあります!」ってことをほかの人や未来の自分に対して伝えることができます。コメントで「コンストラクタではなにもしない」と書いたりします。

「これで完成している」ってことを省略しないで書いてあげたほうがきれいなプログラムと言えますね。

高橋吾郎
誰がみても分かりやすく書くための工夫ですね。気を付けます!

次の質問です。今回、本棚に入る本が5冊までなので、コンストラクタ内で5冊まで入るということを定義してしまいました。あまり綺麗ではないかな、と思ったのですが、いかがでしょうか。

自分で書いたコンストラクタ

勝田郁郎
はい。これでも構わないのですが、コンストラクタ内ではfinalの変数としておいて、先頭のほうで宣言しておくと、何か所か出てきたりする場合には便利でキレイですね。

クラスの最初にfinal宣言して使う

高橋吾郎
最大回数を5という数値をMainクラスで宣言してもいいのかな、と思いましたがBookShelfクラス内で行ったほうがよいでしょうか。
勝田郁郎
本の冊数は誰が管理しているという問題になりますね。そう考えると、何冊持てるかというのは本棚が決めるべきと思います。

なぜかといいますと、例えば変数maxをMainクラス側に持たせておくと、密接な関係にあるMainクラスとしか動くことができなくなってしまいます。

高橋吾郎
確かに、Mainクラス側も、BookShelf側も互いに相手の存在を前提に書かなければいけなくなってしまいますね。
勝田郁郎
こういう状態を「結合度が密である」という言い方をします。「お前と一緒じゃないと動けない」ってことですね。これはよくない状態とされています。クラス間の結合度は素である、独立している状態のほうがよいとされています。
高橋吾郎
どちらのクラスのことなのかを考えるのが大切ですね。わかりました!
勝田郁郎
次にいきましょうか。ん、52行目でwhile文を使っているのは何か理由がありますか?

BookShelfクラスのメソッドzaikoCheck

高橋吾郎
なんでしょう(笑)。

確かにfor文でも良さそうですが、あまり意識していませんでした。

勝田郁郎
ここは何週回すかっていう回数の話ですね。できればその場合はfor文のほうがベターですね。51行目のや56行目のloop++をfor文では1行で書けるので、キレイに書くことができます。
高橋吾郎
こっちのほうが簡単に書けますね!
勝田郁郎
回数を書いているっていうことを強く表現しているのでぱっと見わかりやすいですね。それに対して、while文は「条件を満たすまで何回でも何百回でもやるぜ!」っていう時に使うイメージです。
高橋吾郎
確かに、今回はbookNumの数値はループの開始時に定まっているので、その必要はなさそうですね。
勝田郁郎
このプログラムでも価格を入力する部分がありますね。このときに「あいうえお」とか入力されたときに先に進みたくありませんね。こういったときにwhile文が使うと。「何億回であろうとお前が数字を入力するまでは先に進ませない」というようなプログラムが書けます。
高橋吾郎
そういうイメージですね(笑)これからは意識して使ってみたいと思います!

ループ部分をfor文に変えた

勝田郁郎
ほかの部分も問題なく動いてばっちりそうですね。

一点だけちょっと分かりやすいプログラムにしてみましょう。52行目のequalsというメソッドについてですが、現在これはStringクラスのメソッドとして使っておられますね。これは実はObjectクラスからオーバーライドされているものなんです。

これ、Bookクラスにオーバーライドすることで、カッコの中で名前や著者をStringクラスのものとして足さなくても書くことができます。

bookクラスにequalsメソッドを加えた

52行目がすっきりしました

高橋吾郎
大分シンプルになりましたね。繰り返し行う場合には便利に使えそうです。オーバーライドも意識して使っていこうと思います!
勝田郁郎
今回のプログラムではもう一点オーバーライドを活用してみましょう。

displayメソッドを見てみましょう。

自分で書いたBookShelfクラス内displayメソッド

勝田郁郎
System.out.println()って実はすごいメソッドで、引数が数字でも文字列でもいいものなんです。オブジェクトでもいいんですけど、実はオブジェクトを渡されたときには中でtoString()というメソッドを使っています。

このtoString()というメソッドはObjectクラスのメソッドなので、Bookクラスでもオーバーライドすることができます。ちょっとやってみましょう。

BookクラスにtoString()メソッドを追加

勝田郁郎
BookクラスでもtoString()が使えるようになりました。

そうすると、System.out.println()の中にbookクラスを入れた場合に、この形式で表示されるようになります!

書き換えたdisplayメソッド

高橋吾郎
これもまたスゴイ!よく使いそうですね。
勝田郁郎
すっきり書くことができるので、新しいクラスを作る際にはtoString()メソッドを作ることをお勧めしています。

次の課題を見てみましょうか。

15章課題

高橋吾郎
これはユーザ定義例外を作成するという問題だと思うんですけど、どういった書き方なのかわからなくて……。if文で書いてしまいました。

自分の書いたプログラム

勝田郁郎
確かに今回の課題はMainクラスだけでやるので、if文でも問題なさそうですね。ただ、複数クラスに関係するプログラムだと、呼び出し元でエラーを処理したいケースが考えられます。

実際に例外を作るときは名前だけって作るのでも大丈夫ですね。こんな感じです。

例外クラス:UnderNumberException

高橋吾郎
え、これだけでいいんですね(笑)
勝田郁郎
例外クラスは中身のないボールみたいなイメージですね。こうしておくことでUnderNumberExceptonをthrowすることができるようになります。

書き換えたプログラム

高橋吾郎
お~、確かに新しい例外として認識されていますね。こんなに簡単だと思いませんでした(笑)

次の質問なのですが、finallyの意味はなんなんでしょう。無いと何か問題があるのでしょうか。

勝田郁郎
プログラム読んでいる人にとってtry~catchの後処理なんだなって知らせるためのものです。書かなくてもいいのですが、ここまででひとくくりだよ、っていうことが分かりやすくなるのでプログラムとしてはきれいに見えますね。
高橋吾郎
そうだったんですね。よくわかりました。きれいなコーディングを心がけていきたいと思います!

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

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

・日付とObjectクラス
・例外処理

今回は「日付とObjectクラス」、「例外処理」を学びました。

授業では15章の課題を終えることができたので、第7回に向けて、下記の課題に取り組みます。

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

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

結構なハイペースで進めているので、教科書の内容に取りこぼしが少しあったりしていますが、課題を解くたびに先生にチェックしていただけるので、安心してスピードを出すことができています(笑)

次はいよいよ基礎編の最終課題を添削していただきます。モノを作るということで大変な挑戦になりそうですが、くじけぬよう頑張ります!