【C#】expression-bodied function member について【.NET】

C#機能バージョン対応表作成しました。
こちらの記事も合わせてご覧ください。
expression-bodied function memberについて説明します。(良い感じの日本語訳がわかりませんでした。。。泣)
内容を簡単に説明すると1つの式だけで構成されているメソッドの場合
rerurn を記述せずに少しだけ短く記述できるよ!
ってやつです。
タイトルは良い感じの日本語訳がわかり次第更新します。
では、本題に入ります。
まずは、データクラスに今回の機能を利用していないメソッドを記述します
サンプルコード1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Monster { /// <summary> 名前</summary> public string MonsterName { set; get; } /// <summary>身長(m)</summary> public double height { set; get; } /// <summary>体重(kg)</summary> public double weight { set; get; } //BMI=体重(kg) ÷ {身長(m) X 身長(m)} public double GetBMI() { return weight / (height * height); } public string GetBMIMessage() { return $"{MonsterName}さんのBMIは【{GetBMI().ToString("F2")}】です"; } } |
そして呼びだし元の処理が以下になります
サンプルコード2
1 2 3 4 5 6 7 8 9 10 11 |
void Sample1() { Monster monster = new Monster() { MonsterName = "スライム", weight = 50f, height = 1.2f, }; Debug.Log(monster.GetBMIMessage()); } |
Debug.Logログで出力した結果は以下になります。
1 2 |
スライムさんのBMIは【34.72】です |
インスタンスの生成方法はオブジェクトの初期化子を利用しており、
文字列挿入機能で文字列を組み立てています。
なにそれ?な方は以下の記事をどうぞ
オブジェクトの初期化子 について
文字列挿入機能 について
今回紹介する機能を使うとデータクラスで定義しているメソッドのソースが変わります。
以下、expression-bodied function member を利用した場合です。
サンプルコード3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Monster { /// <summary> 名前</summary> public string MonsterName { set; get; } /// <summary>身長(m)</summary> public double height { set; get; } /// <summary>体重(kg)</summary> public double weight { set; get; } public double GetBMI() => weight / (height * height); public string GetBMIMessage() => $"{MonsterName}さんのBMIは【{GetBMI().ToString("F2")}】です"; } |
サンプル1に出てくるメソッドと比べると { ,return ,} が使われていないことに気づくと思います。
気持ちStep数が減るので使用できる場合はこちらで記述することをおすすめします。
ラムダ式に慣れてくるとこの記述方法にも違和感がなくなってくるはず!
ディスカッション
コメント一覧
まだ、コメントがありません