私は2019年に入社した新人エンジニアです。研修中は主にJavaを使って開発を行っており、現在のチームに配属されてから初めてC#を使い始めました。今回は、C#を学習していく中で行き詰った「デリゲート」について、どこの理解が困難だったか、それをどのようにして理解したかをまとめてみようと思います。デリゲートって何に使うの?何が便利なの?私はデリゲートを学習した際に、文献で見たサンプルコードは次のようなものでした。}}このコードを見て、私は「これ、デリゲートを使う意味ある?」「何がしたいの?」といったことを思いました。今見ても、この例ではデリゲートの良さはわからないなと思います(笑)この時点で、デリゲートは「関数を何かのオブジェクトにする」というところまではわかっていました。それを何に使うのか、何のために行っているのかが全く理解できませんでした。トレーナーからヒントをもらった文献のソースコードを見ても、書き方はわかったもののやはり目的がわからなく、何が便利なのかさっぱりだったので、後日トレーナーに相談しました。すると、次のようなコードを考えてみようと、例を提示してくれました。}}これを見て私が一番最初に書いたコードは次のように、ID、名前、住所それぞれでソートする関数を別々に作成してしまいました。personList;}これをトレーナーに見せたところ、「この3つの関数は共通化できるね。1つ「ソートをする」という関数を作って、何でソートするかをメインメソッドで指定するような関数を作れば、ソートの処理を1つの関数で共通化できるのです。「共通化」を目標にコードを書いてみた3つのソート関数で、「比較する対象と比較の方法」以外は全く同じ処理を書いていることには気が付いたので、比較の部分のみをメソッドに切り出すところまではできました。デリゲートを使わなかったら詰んだ今までの私の知識で、共通化したソート関数は次のようにif文で分岐したコードになりました。0;}この書き方はまず条件分岐が多く、長くて見にくい。最大の問題は、もし新たな順序のソートを追加する場合、さらに条件分岐を追記していかなくてはなりません。関数内のソースコードが長くなります。今までの知識だと、ここで「詰み」なのです。デリゲートを使ったら書けたそこで、「デリゲートを使って書いてみよう。」というトレーナーのヒントから、コードを書いてみました。}}これなら、もし新たな順序のソートを追加する場合、デリゲートに格納する比較関数を変えるだけで対応でき、ソート関数の中身は一切いじらずに対応できます。デリゲートを使うことによって、うまくソート関数を共通化することができました!ここまでわかってようやくデリゲートを使う意味、その価値がわかりました。まとめ私がデリゲートとは何なのか、何のために使うものなのかを理解できたきっかけは、「共通化」という言葉でした。デリゲートの目的の一つが共通化なので当然ですね(笑)今後ソースコードを書く上で、「共通化」は非常に大切であることを実感することができました。16日目は、higo_yayoiさんです。アーカイブはてなブログをはじめよう!yayoiTechさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。