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

C# 함수형 프로그래밍 스타일로 반복문 작성하기

by bantomak 2024. 8. 21.

함수형 프로그래밍에서의 반복문 작성

함수형 프로그래밍 스타일로 코드를 작성하다보면 반복문이 필요한 경우를 만나게 될 것이다.

그런데 이때 갑자기 함수형 스타일이 아닌 기존 스타일로 for문을 사용하는건 뭔가 이상하다고 느껴져서 찾아보게 되었다.

보통 함수형 프로그래밍 스타일에서는 반복문으로 아래 2가지의 함수를 사용한다.

 

  • Enumerable.Range()
  • Enumerable.Repeat()

 

 

C# Linq - Enumerable.Range()

Enumerable.Range(Int32, Int32) 메서드public static System.Collections.Generic.IEnumerable Range (int start, int count);매개변수start int32시퀀스의 첫번째 정수값 (시작값)count int32생성할 순차적 정수의 개수 특정 시작값

jettstream.tistory.com

 

C# Linq - Enumerable.Repeat()

Enumerable.Repeat(TResult, Int32) 메서드 public static System.Collections.Generic.IEnumerable Repeat (TResult element, int count); 매개변수 element TResult 반복할 값 count int32 값을 반복할 횟수 특정 타입의 값을 특정 횟수 반

jettstream.tistory.com

 

예제 코드

함수형 스타일과 기존 for문 스타일을 비교해서 작성하고 서로의 차이점에 대해서 살펴보자.

 

using System;
using System.Collections.Generic;
using System.Linq;

public partial class Program
{
    static void Main(string[] args)
    {
        Random rand = new Random();

        var list = new List<int>() { 1, 2, 3, 4, 5 };

        // Functional Style
        var temp = Enumerable.Range(0, 3).Select(i => list.ElementAt(rand.Next(0, list.Count))).ToList();
        Console.WriteLine($"Functional: {string.Join(", ", temp)}");

        var temp2 = Enumerable.Repeat(0, 3).Select(i => list.ElementAt(rand.Next(0, list.Count))).ToList();
        Console.WriteLine($"Functional: {string.Join(", ", temp2)}");

        // For Loop Style
        var newList = new List<int>();

        for (int i = 0; i < 3; i++)
        {
            var newRandoIndex = rand.Next(0, list.Count);
            newList.Add(list[newRandoIndex]);
        }

        Console.WriteLine($"For Loop: {string.Join(", ", newList)}");
    }
}

댓글