10日目(2025.02.09)enum 列挙型

今日も早起き!!
すごく良い気分で勉強開始!!!

ブログタイトルに「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つ終わったし、明日からは復習していこう!!

明日からも楽しもう!!!













コメントを残す