今日も早起き!!
すごく良い気分で勉強開始!!!
ブログタイトルに「enum」って書いてあるけど、、
まずは、昨日の最後にTimさんが言い放った「静的メソッド」が分からなさすぎて、もう次の話を聞く気にならない、、
ということで、まずは静的メソッドからやっつけよう!!
【静的メソッド】
(AI先生より)
まずは、基本的なところから説明してくださりました。
メソッド:特定の処理を行うための命令をまとめたもの
料理のレシピ→ 材料と手順が書かれている(メソッド)
うん、分かったと思っていることも、こうやってもう一回説明を聞くことでより深く理解できる!!
そして、主役の「静的メソッド」さんが現れました!!
静的メソッド:
通常のメソッドはクラス(設計図)から作られた「オブジェクト」実態に紐づいている。
たとえば、「犬」というクラスには、「ポチ」という名前の犬オブジェクトがあり、「吠える」というメソッドを定義する。
これに対して、静的メソッドは、オブジェクトに紐づいておらず、クラス自身に属している。
「犬」クラスで言えば、「犬」クラス全体に共通する処理を定義する。
おおー!!
なんか、分かってきた気がする!!!
これで次の敵に進める!!
ありがとうございます、AI先生!!
【Enum (列挙型)】
さぁ、次の敵は「enum」!!
まずは、AI先生に概要を聞いてみよう!!
(AI先生より)
Enum:決まった値しか取れない型を作るための仕組み
たとえば、、
曜日は、月曜日~日曜日までの7種類しかない。
ここで、文字列型で「”月曜日”」といったふうに入力すると、間違って「”月曜”」とか「”げつよう”」とか間違って入力してしまう可能性がある。
そこで登場するのが、「Enum」
Enumでは、「曜日」の専用の型が作ることができ、決められた値(月曜日~日曜日)しか代入できなくなる。
(サブクラス)
public class 曜日データ{
public enum 曜日{
月曜日、火曜日、水曜日
}
(メインクラス)
switch (today){
case 月曜日:
System.out.println(“月曜日です”);
breaks;
case 火曜日:
System.out.println(“火曜日です”);
breaks;
すごく、分かる気がするんだけど、、何個かまだ勉強していないやつをAI先生出してきましたね、、
・switch
・case
これは、後日勉強!!!
そして、AI先生は、もう1つ例を出してくれました!!
サブクラスのコーディングは一緒ですが、メインクラスで、
曜日.today = 曜日。月曜日;
if(today == 曜日.火曜日){
System.out.println(“今日は火曜日です”);
}
else{
System.out.println(“今日は火曜日じゃないです” + today + “です。”);
うん!!
こっちの方が分かりやすい!!
でも、最初の方がなんかかっこいい、、
とにかく理解できた!!!
さぁ、なんとなく理解できたところでTim先生のもとへ!!
まずAI先生の時には気付かなかったことが分かりました!!
なんと、このEnumは、クラスやインターフェースのように専用ファイルがあったとのこと!!
ということで、専用ファイルを作って、早速Timさんの真似っこ
(enum Level)
public enum Level{
HIGH,
MEDIUM,
LOW;
えっ!!
これだけでいいの??
めちゃ楽やん!!
今日はすぐに終わりそう!!
(main class)
Level.lvl = Level.LOW;
if(lvl == Level.HIGH){
System.out.println(lvl);
}
if(lvl == Level.MEDIUM){
System.out.println(lvl);
}
else{
System.out.println(lvl);
}
⇓
LOW
めっちゃ分かった!!
今日は簡単で良かったぁ、、
いや、まだ動画の時間けっこう残ってる、、
次はなんだ?
Timさんが、説明もそこそこに、涼しい顔で次の説明に移ってしまった。。
ちょっと翻訳がよく分からなかったけど、なんか
「いくつかのメソッドとインストラクターを追加できます」
と言っている。
Timさんは、困惑する僕には目もくれずコーディングを始めました。
(メインクラス)
Level lvl = Level.LOW;
Level[]arr = new Level.values();
for(Level e : arr){
System.out.println(e);
}
おいおい、いきなり「values()」とかいうようわからんのが出たよ、、
とりあえず、AI先生に聞くと、valuesは「列挙されているデータ全て」という意味らしい。
難しすぎない意味でよかった、、
そして、Timさんはこう言いました。
「みなさん、enumにもっとメソッドやインスタンスを追加できないの?って思っているでしょう」
いや、思ってません。
そんなことを思っているうちに次の説明に、、
(enum Level)
public enum Level{
HIGH(3),
MEDIUM(2),
LOW(1);
private int lvlNum;
private Level(int num){
this.lvlNum = num;
}
}
⇓
privateだから、メインクラスからアクセスできない。
⇓
(上に追加で)
public int getLv1(){
return this.lvlNum;
}
⇒取得したlvlNumを(int num)の形に変える??
なんとなく、意味は分かる!!
public void setLv1(int num){
this.lvlNum = num;
Tim先生は、enumで定義した値を変更するためにこのメソッドを書く
と言っていましたが、チンプンカンプンで、この時点で頭がショートしました。
とりあえず、進めてみることに、、
(main class)
Level lvl = Level.LOW;
System.out.println(lvl.getLv1());
⇓
1
System.out.println(Lvel.valueOf(“LOW”));
⇓
LOW
valueOfとかいう謎めいたやつが急に出てきたけど、なんとなく理解できました。
エラーなしにいけたと喜んでいたけど、1つの疑問が、、
public void setLv1(int num){
this.lvlNum = num;
これいる??
いや、わからんから言ってるんじゃなくて、これって何のためにあるの!?
試しに、消してみよう
うん、問題なく処理された。
「もう混乱するだけやし、こんなん入れんかったらいいやん!!」
そんなこと思っているとは知らないTim先生は淡々とコーディングを進めていきました。
lvl.setLv1(5);
System.out.println(lvl.getLv1());
⇓
5
ここで
public void setLv1(int num){
this.lvlNum = num;
の意味が分かりました。
値を変えるんですね、、
スッキリ!!
ということで、Tim先生の1つ目の動画(3時間40分ほど)がようやく終わりました、、
この動画終わらせるのに、10日かかりました、、
でも確実に前に進んでる!!
【今日のまとめ】
★静的メソッドについて理解した
★enumについて理解した
★後日勉強:
・switch
・case
・valueOf
動画1つ終わったし、明日からは復習していこう!!
明日からも楽しもう!!!