2020年10月30日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 301 count

【入門級】計算方法を引数にできるか?

Written By: 川俣 晶連絡先

足し算、引き算を引数にできるか? §

 値ではなく計算方法を引数にできるでしょうか?

 つまり、123や45を引数にするのではなく、足し算や引き算を引数にできるでしょうか?

 できます。

 それにはラムダ式という機能を使うと便利です。

 ラムダ式は、名前のないメソッドのようなもので、変数に代入したり、引数で渡したりすることができます。

 サンプルソースの(x, y) => x + yなどがラムダ式です。

 これには数式だけでなく、波括弧で囲って複雑なコードも書くことができます。 

 ラムダ式を入れることができる変数や引数の型は、デリゲート型ですが、通常はAction型またはFunc型を使います。戻り値がないときはAction型、あるときはFunc型です。ですから、整数を2つ受け取って整数を返す型はFunc<int,int,int>と型引数に3つのintが並びます。

罠の数々 §

  • Action型、Func型の変数/引数に代入できるのはラムダ式に限らない。引数や戻り値が一致すれば通常のメソッドも入る
  • ラムダ式が使われる前には匿名メソッドというものがあって、希にそれが残ったままのソースがある。注意しよう

参考リンク §

Func<T1,T2,TResult> デリゲート

=> 演算子 (C# リファレンス)

ラムダ式 (C# リファレンス)

 ラムダ式の書き方はいろいろある。知らない書き方でビックリしないように、様々なパターンを上記のリンクから把握しておこう。

リポジトリ §

https://github.com/autumn009/cshowto

Lambda §

using System;

class Program

{

    private static void sub(string label, Func<int, int, int> calc)

    {

        Console.WriteLine($"123と45の{label}の結果は{calc(123, 45)}です。");

    }

    static void Main()

    {

        sub("足し算", (x, y) => x + y);

        sub("引き算", (x, y) => x - y);

        sub("特殊条件計算", (x, y) =>

        {

            for (int i = 0; i < y; i++)

            {

                x += (int)(Math.Sin((double)i / (double)y) * 100);

            }

            return x;

        });

    }

}

実行結果

123と45の足し算の結果は168です。

123と45の引き算の結果は78です。

123と45の特殊条件計算の結果は2124です。

(最後の一つは意味のない計算を行っています)

Facebook

COOL C# CREW

キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
01日
【入門級】2つのメソッドで変数を共有する方法
3days 4 count
total 311 count
【C# コーディング How To】の前のコンテンツ
2020年
10月
29日
【入門級】switchステートメントの短い書き方・breakなしのcase
3days 2 count
total 291 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201030102359
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.