見出し画像

ハジメの一歩会⑥ クラス編

こんばんは、かーでぃです。
ハジメの一歩会も勉強会として最終話のクラス編になりました。
クラス編は当初、含めるか含めないかで悩みました。というのも、複雑な話になりそうで「超」初心者向けに行っている会に合わないかな、と思いました。でも、会の前身にあたる「今夜はかーでぃNight」の中で、開発の壁としてフレームワークやライブラリを覚えないといけない。という声もあり、フレームワークやライブラリを使う上で、クラスの基礎は抑えておいた方が良いのでは…と思いまして、含めることと致しました。

先日、とあるイベント資料で、資料の最初の方に「今日のゴール」とあったのを思い出してまして、ハジメの一歩会でもゴールを提示するようにしました!(最終話ですが…笑)
さーて今回のゴールは…
・クラス使っていたんだ!
・クラスって便利かも?
・「あ、この言葉聞いた覚えがある」
の3本ですw
将来、実際に開発を進めている時に、ここで勉強した内容を思い出してもらえると嬉しいな、と思っています。

本題であるクラスに入る前に、構造体の話をします。
構造体ってなに?って方も多いかと思います。クラスの前身なんですが言葉としてはマイナーですよね。。
自分が構造体を知ったのはC言語の勉強を始めた時でした。BASIC時代には無かった便利機能の1つですね。
何をするものか、と言えば…変数を1つにまとめることが出来るモノです。配列も1つの変数名+添え字でまとめることは出来るのですが、配列はすべて同じ型になってしまいます。
文字列型の配列は、すべてが文字列型。数値型の配列はすべてが数値型。
一方、構造体は1つの構造体の中に複数の変数型を定義することができます。
下にある「人」構造体。
身長、体重、名前、誕生日、現在地等の情報を持っております。身長や体重は数値型だし、名前は文字列型、誕生日は日付型になります。
このように複数の変数型を1つの変数にまとめることができるのが構造体です。

その構造体は下記のように使います。
まず「人 kerdy」で、「人」構造体型の変数kerdyを宣言します。
そのあと、kerdy.身長やkedy.体重等で各変数(構造体内の変数をメンバと呼びます)を設定していきます。
このように、変数から各メンバを参照する際には「.」(ドット)を使います。


人 kerdy;
kerdy.身長=160;
kerdy.体重=65;
kerdy.名前="かーでぃ";

この「.」、コードを組んでいるとよく出てきますよね。統合環境だと、.を打つと次の候補がリストアップされるやつ。あそこでリストアップされるのがメンバです。
ということで、知らず知らずの内に、この「.」でつながる世界にどっぷりと足をつっこんでいますよね(笑)

さて、ちょっと前回出した問題を思い出してみましょう。
下記の問題②ですね。
社員番号を引数に渡すと、社員名、メールアドレス、内線番号を返す関数を作りましょう、という問題でした。
答えとしては、配列で返す、という話をしたのですが…そうです、配列でなくても構造体で戻すことも可能です。
ここでは正解は示しませんが、少し勉強がてら試してみるといいかと思います。

さて、やっと本題のクラスです。
クラス≒構造+動き と書きました。
構造体は、複数の変数を1つにまとめることができる機能でした。例えば人構造体で考えると、身長や体重、名前などのメンバがありました。でも、それだけでは人の動きは表せないですよね。人であるならば、例えば「食べる」「移動する」「寝る」などの動きも必要です。
じゃ、その動きも構造体にやらせてしまえ!!!となったのがクラスです(ざっくり笑)
下記にあるように、身長・体重等の水色のところはクラスの属性値になります。一方で食べる・移動するの緑色のところが動き(メソッド)になります。右下のコードでは、体重65kgに対して3000キロカロリー分を食べたら、体重を2kg増やす、というメソッドです。

いくつは新しい言葉を使いながら説明してきました。
ここではクラスに関する言葉を少し説明しましょう。

プロパティ
クラスに紐づく値を参照したり、設定したりします。

メソッド
クラスに対して、なんらの処理をします。

メンバ
プロパティやメソッド等を指します。

インスタンス
クラス(や構造体)は設計書に該当します。よって、クラスや構造体だけを作っても利用できません。実体化させることで初めて利用できるようになります。この実体化させることをインスタンス化と言います。

コンストラクタ
インスタンス化された際のみに動くメソッドです。クラスの初期化等を行います。

継承
既存のクラスを使って、新しいクラスを作ることができます。
例えば、人クラスを使って「デジタル人材」クラスを作ってみます。デジタル人材クラスとして宣言されているのは、「業務をデジタル化」メソッドだけです。それ以外は継承した人クラスのメンバを、デジタル人材クラスも流用します。

ということで、知らず知らずに使っているクラスの事例ですね。
 Systemクラス→Consoleクラス→WriteLineメソッド
 FSOクラス→GetFolderメソッド
このように、知らず知らずの内にクラスはすでに使っていると思いるのではないでしょうか?
今回クラスを取り上げた理由の1つがここです(特に下段)。
FSOが何かわかんないけど、FSO.GetFolderとフォルダー内のファイルの一覧が取得できるから、こうしてる。って方、多くないでしょうか?
フレームワークやライブラリを活用するのが当たり前の時代。だからこそ、フレームワークやライブラリがどのように構成されているのか、ロジック自体はわからなくても(前回やったブラックボックスですね!)、「.」で繋ぐ理由ぐらいは知っておいてほしいな、と思い、クラス回を開催いたしました。

さて、これが最後の宿題です!
哺乳類クラスを定義し、それを継承させて自分クラスを作ろう!!
※魚類クラス、軟体動物クラスも可です!

最後までnoteをご覧頂きまして、ありがとうございました。
ハジメの一歩会、次回開催に向けてアンケートを募集しております。
一度も参加されていない方でも、次回どんなことを開催してほしいか、もしご意見ご要望があればこちらからお願いします。

宿題の回答

勉強会資料はこちら


この記事が気に入ったらサポートをしてみませんか?