Linq オブジェクト指向

C# Linq Func、Actionメソッドなどのラムダ式を使用して、If文を削減しよう! ラムダ式を使用してポリモーフィズムを実装しよう!!

ぜひこちらの記事もご覧ください!!
転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました!

SESで働いている私の年収と働き方

今回のテーマ

今回の記事は下記のポリモーフィズムについて解説した記事の続きです。

こちらもCHECK

C# オブジェクト指向のポリモーフィズムと抽象クラスについて学ぼう ロックマンを例にしてポリモーフィズムを解説します。

ぜひこちらの記事もご覧ください!! 転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました! SESで働いている私の年収と働き方 今回のテーマ こんにちは、サルモ ...

続きを見る

前回の記事では、抽象クラスを継承したクラスを複数作成し、目的の処理を実装しました。

前回の記事のように継承した子クラスを沢山作らなければ、呼び出し元のMainクラスにif文の条件を沢山追加しなければならないと解説しましたが、

ラムダ式を使用することで、それを解消することが出来ます。

前提の知識としてAction、Funcメソッドの使い方は理解していないといけないので、下記の記事を参考にしてください。

こちらもCHECK

C# ラムダ式について解説します。Func、Actionについて

ぜひこちらの記事もご覧ください!! 転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました! SESで働いている私の年収と働き方 まえがき こんばんは、サルモリで ...

続きを見る

なので、子クラスを作成せずに1つのクラスでも可能ということです。

それでは、やり方を見ていきましょう。

サルモリ
今回はラムダ式の具体的な使い方について学んでいくよ!

ラムダ式を使用しない場合

ラムダ式を使用せずに1つのクラスのみで実装した処理は下記となります。

 出力結果
Rockman
チャージショット
Fireman
ファイヤーストーム
ストーム
Iceman
ア
イ
ス
クラッシャー

Mainクラスにif文の沢山追加してひどいことになっています。

このようにしなければならない理由としては、各ロボットでAttackメソッドの処理が違うからこのようにしなければなりませんでした。

この問題を解決するためにラムダ式を使用します。

ロボットクラスにAttackメソッドの処理を保持できるようにすることで実装することが出来ます。

サルモリ
このようなソースコードになってしまった場合はオブジェクト指向を使用するか、ラムダ式が使用できないか考えるよ!

ラムダ式を保持するクラスを作成

ラムダ式を保持するクラスを作成しました。

ロボットクラスにAction型の引数を追加し、AttackメソッドではAction型の引数を呼び出すようにします。

呼び出し元のソースコード

続けて呼び出し元のソースコードを見ていきます。

コンストラクタの引数にAction型の引数がふえたので、各ロボットごとにラムダ式を指定します。

下記のようなソースコードにすることで実装できます。

 出力結果
Rockman
チャージショット
Fireman
ファイヤー
ストーム
Iceman
ア
イ
ス
クラッシャー

目的通りの処理結果が出力できました。

このソースコードでは、各ロボットにラムダ式を作成し、ロボットクラスのAction引数に渡しています。

実際に処理を呼び出す時は全てのロボットに対し、Attackメソッドを指定するだけです。

このようにラムダ式を使用することで、ポリモーフィズムを実現することができます。

まとめ 抽象クラスとラムダ式のどちらを使うべきか

今回はラムダ式を使用し、ポリモーフィズムの処理実装しました。

今回の記事と前回の記事で一つ疑問が残ります。

抽象クラスとラムダ式どちらを使うべきなのか。

結論からいうと、どちらを使ってもいいと思います。

今回のように処理が複雑でない場合は、ラムダ式でいいかもしれません。

例えば、今回の記事のAttackメソッドに該当するメソッドが複数個ある場合は抽象クラスで定義し、実現するべきと思います。

ラムダ式を使用すると、クラスを複数個定義する必要がないので、ソースコードの行は少なく済むので、検討の余地は大いにあるでしょう。

皆さんが作る処理に合わせて、使い分けてください!

if文を無駄に作るのだけは終わりにしましょう!!

サルモリ
最後まで読んでくれてありがとう!!

 

ぜひこちらの記事もご覧ください!!
転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました!

SESで働いている私の年収と働き方

私は下記のサイトで現在の働き方、フルリモート(週5)の企業に出会うことができました。

今でもとても感謝しています!カウンセリングは無料なので、ぜひどうぞ!

 

C#のLinqをさらに学びたい方へ

C#のLinqを理解して頂くために参考書を執筆致しました!

Linqの演習問題はこちらの参考書に載せているので、問題を解いて理解を深めたい方はこちらの参考書チェックしてください!

下記の画像をクリック!!kindleunlimitedの会員であれば無料で見れます!

⇩初心者向け      ⇩中級者向け

C#でChatGPTAPIを使ってブログ作成を自動化しませんか?

-Linq, オブジェクト指向

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock