본문 바로가기
프로그래밍/함수형 프로그래밍

일급 함수(First-class function) vs 고차 함수(Higher-order function)

by bantomak 2024. 3. 25.

일급 함수(First-class Function)

프로그래밍 언어에서 함수(Function)를 일급 시민(First-class Citizen)으로 취급하는 것을 말한다.

즉, 함수를 변수에 할당하거나 파라미터로 전달하고 반환값으로 함수를 반환하는 등을 할 수 있는 언어를 말한다. 이러한 언어로 C#, C++, python, javascript 등이 있다.

 

고차 함수(Higher-order Function)

고차 함수는 하나 이상의 함수를 인자로 받거나 함수를 결과로 반환하는 함수를 말한다.

즉, 다른 함수에서 작용하는 함수이다.

 

고차 함수(Higher-order Function) 예제

  • map() function => select() function
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        List<int> list = new List<int>() { 1, 2, 3, 4, 5 };

        var sequence = list.Select(x => x * x);

        foreach (var item in sequence)
        {
            Console.Write($"{item} "); // 1 4 9 16 25
        }
    }
}
  • filter() function => where() function
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        List<string> list = new List<string>() { "word", "function", "functional programming", "filter" };

        var sequence = list.Where(x => 6 < x.Length);

        foreach (var item in sequence)
        {
            Console.Write($"{item} "); // "function", "functional programming"
        }
    }
}
  • reduce() function => aggregate() function
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        List<int> list = new List<int>() { 1, 2, 3, 4, 5 };

        var sum = list.Aggregate((x, y) => x + y);
        Console.Write(sum); // 15
    }
}

 

함께 읽으면 좋은 글

 

C#으로 함수형 프로그래밍을 해보자

C#으로 함수형 프로그래밍을 해보자 분명히 하고 가야 할 부분이 있다. C#에서 함수형 프로그래밍에서 영감(functional-programming-inspired)을 받아서 만들어진 기능(feature)들은 순수 함수형 언어의 기능

jettstream.tistory.com

참조 사이트

 

일급 객체(First-class citizen)과 고차 함수(Higher-order function)

예제 source code 링크 First-class Citizen(일급 객체) First-class 는 값으로 취급 될 수 있는 모든 요소를 나타냅니다. 변수는 할당하거나 함수의 파라미터로 전달될 수 있는데 이러한 경우가 값으로 취급

yesaroun.tistory.com

댓글