【C#】Func<>とAction<>の違いとは?―初心者のためのシンプル解説
C#では、関数を「変数のように扱う」ことができます。
その代表的な仕組みがデリゲート(delegate)であり、その中でも特によく使われるのが Func<> と Action<>です。
この記事では、Func<> と Action<> の違いを、初学者向けにわかりやすく解説します。
目次
1. ざっくり結論:戻り値があるかどうか!
- Func<>:戻り値 あり
- Action<>:戻り値 なし(void)
例:
- Func<int, int>:intを受け取ってintを返す関数
- Action<string>:stringを受け取って何も返さない関数(void)
2. Func<> の基本:戻り値ありの関数
例:
Func<int, int> doubleIt = x => x * 2;
int result = doubleIt(5); // result は 10
- Func<int, int> は、「int を受け取り、int を返す」関数。
- 最後の型パラメータが「戻り値の型」。
複数の引数も使えます:
Func<int, int, string> sumToString = (a, b) => (a + b).ToString();
Console.WriteLine(sumToString(3, 4)); // 出力: "7"
3. Action<> の基本:戻り値なしの関数
例:
Action<string> greet = name => Console.WriteLine($"こんにちは、{name}さん!");
greet("花子"); // 出力: こんにちは、花子さん!
- Action<string> は「string を受け取り、何も返さない」関数。
- すべての型パラメータは「引数の型」だけ。
複数の引数にも対応:
Action<int, int> printSum = (a, b) => Console.WriteLine(a + b);
printSum(3, 5); // 出力: 8
4. 引数なしのパターンもある
- Func<int>:引数なし、int を返す
- Action:引数なし、戻り値なし(完全に何も受け取らず返さない)
例:
Func<int> getRandom = () => new Random().Next(100);
Action sayHi = () => Console.WriteLine("やあ!");
5. Func<> と Action<> の違いまとめ
項目 | Func<> | Action<> |
---|---|---|
戻り値 | あり(最後の型) | なし(void) |
用途 | 計算や検索などの結果を返す処理 | 表示やログ出力など副作用が目的の処理 |
型パラメータの意味 | 最後の型が戻り値型、それ以前は引数 | 全て引数、戻り値はvoidと固定 |
6. 練習問題
Q. Func<int, bool> とはどんな関数型でしょう?
Func<int, bool> isEven = ???;
Console.WriteLine(isEven(4)); // true
Console.WriteLine(isEven(7)); // false
Func<int, bool> isEven = x => x % 2 == 0;
7. さらに深めたい人へ
- Predicate<T> は Func<T, bool> の特化版(戻り値が必ずbool)
- イベントでは Action<> を使う場面が多い
- LINQでは Func<> が頻出(Where、Select など)
まとめ
- Func<> は「戻り値がある」関数型
- Action<> は「戻り値がない」関数型
- 最後の型が戻り値、それ以外が引数(Func)
- 全て引数で、戻り値なし(Action)
今後の学習では、LINQやイベント処理などでこれらの型が頻繁に登場します。意味を理解しておくと、コードが読みやすくなり、再利用性も高まります。ぜひ、自分のコードにも取り入れてみましょう。
訪問数 5 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません