C#のLinqのメソッド一覧 オブジェクト指向

【C# sharp Linq】Func、Actionメソッドを使用し、If文を削減しよう!

ChatGPTのAPIを使わずに自動化することが可能です。
下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。

今回のテーマ

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

こちらもCHECK

【C# sharp】ポリモーフィズムと抽象クラスの使い方

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...

続きを見る

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

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

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

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

こちらもCHECK

【C# sharp Linq】Action、Funcの使い方を徹底解説!

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 Action ...

続きを見る

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

-C#の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