第135回 カリー化について

公開日:2015-02-05

1. 概要

独り言によるプログラミング講座、「第135回 カリー化について」です。
カリー化の方法について説明しています。

2. 動画


3. 動画中に書いたソース

Form1.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //★独り言によるプログラミング講座

            //■カリー化について

            //  add(1, 2) ---> add(1)(2)

            /*
            Func<int, int> add = _ => _ + 1;
            int result = add(2);
            MessageBox.Show(result.ToString());
            */

            /*
            Func<int, Func<int, int>> add = p1 => 
                (p2 => p1 + p2);

            int result = add(5)(10);
            MessageBox.Show(result.ToString());
            */

            Func<int, Func<int, int>> add = p1 => p2 => p1 + p2;
            int[] array = {1,2,3,4,5};

            /*
            foreach(var item in array.Select(_ => _ + 1)) {
                MessageBox.Show(item.ToString());
            }*/

            /*
            var list1 = array.Select(_ => _ + 1);
            var list2 = array.Select(add(1));
            foreach(var item in list2) {
                MessageBox.Show(item.ToString());
            }
            */

            var list = array.add(100);
            foreach(var item in list) {
                MessageBox.Show(item.ToString());
            }

            this.Dispose();
        }
    }

    public static class TestTest {
        public static IEnumerable add(this int[] array, int value) {
            return array.Select(_ => _ + value);
        }
    }
}