8.3 Higher Order Functions

Rust가 제공하는 고차정렬함수(HOF). 이 함수는 하나 혹은 그 이상의 함수를 취하고 더 유용한 함수를 생성한다. HOF와 지연 반복자는 Rust의 고유한 기능적 특색이다.

fn is_odd(n: u32) -> bool {
    n % 2 == 1
}

fn main() {
    println!("Find the sum of all the squared odd numbers under 1000");
    let upper = 1000;

    // 순차적 명령구문 접근법
    // 누석 변수 선언
    let mut acc = 0;
    // 반복: 0, 1, 2, ... 무한대까지 
    for n in 0.. {
        // 수를 제곱
        let n_squared = n * n;

        if n_squared >= upper {
            // 상한을 초과하면 break로 루프 탈출.
            break;
        } else if is_odd(n_squared) {
            // 값이 홀수이면 누적한다.
            acc += n_squared;
        }
    }
    println!("imperative style: {}", acc);

    // 함수적 접근법
    let sum_of_squared_odd_numbers: u32 =
        (0..).map(|n| n * n)             // 모든 자연수를 제곱
             .take_while(|&n| n < upper) // 상한선 이하 
             .filter(|n| is_odd(*n))     // 홀수라면
             .fold(0, |sum, i| sum + i); // 이들의 합
    println!("functional style: {}", sum_of_squared_odd_numbers);
}

Option and Iterator implement their fair share of HOFs.

results matching ""

    No results matching ""