Linq オブジェクト指向

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

今回のテーマ

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

こちらもCHECK

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

今回のテーマContents1 今回のテーマ1.1 かっぱちゃんはロボットクラスを作りました。1.2 ロボットの攻撃を別の処理にしたい1.3 抽象クラスの実装1.4 抽象クラスの継承1.5 今回のよう ...

続きを見る

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

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

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

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

こちらもCHECK

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

まえがきContents1 まえがき2 デリケートの宣言について3 Func型にして、デリゲートの宣言を省略しよう4 Action型とFunc型5 Action型の使い方6 Func型の使い方7 まと ...

続きを見る

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

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

KappaChan
今回はラムダ式の具体的な使い方について学んでいくかっぱ!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

KappaChan
最後まで読んでくれてありがとうかっぱ!!

 

プログラミングを一人で独学をするならプロからオンラインで教えてもらいましょう!10倍効率いいです!!

数多くあるプログラミング教室の中で2つのオンライン教室を厳選しました!どちら共、エンジニアとしての就職までサポートしてくれる本当にオススメの教室です。個別相談は完全無料です!!

カウンセリングは完全無料!未経験でITエンジニアを目指したい方にオススメ!

Webエンジニアになりたい方にオススメ!個別相談は無料!

KappaChan
オンラインのプログラミング教室は本当にオススメかっぱ!!

新しいサイト作りました。アニメのまとめサイトです。

レインボーリアルタイムTwitter(アニメ版)

レインボーリアルタイムTwitter(映画版)

-Linq, オブジェクト指向

X