higher-order function

디스커버리GO 책을 보다가 4.2.2에 고계함수라는게 나온다.
뭔가 이름은 맘에 들지 않아서 그냥 하이어오더펑션 이라고 외우기로 했다.
의미는 그냥 함수를 인자 넘기듯이 넘기면 되는것이다. 이게 C++이나 Java에서 됬는지 안됬는지는 모르겠다. 사실 이걸 어디다 활용해야 할지도 의문이긴 하다.

책에서는 든 예시로는 파일에서 한줄한줄 읽어 슬라이스에 추가하는 함수가 있는데 경우에 따라서 슬라이스에 추가하는거 뿐만이 아니라 맵에 추가하거나 네트워크를 통해 전달할 수도 있는데 각각의 사용처마다 함수를 다 따로 만들수도 없다 (중첩기능이 되는 함수가 너무 많이생긴다는 의미인듯) 라고 했는데

그냥 함수를 자아아알 만들면 되지 않았을까 하는 생각을 해본다.
누군가 댓글에 이러이러한데 쓰면 좋다라고 설명좀 자세하게 해줄분이 있음 복받을듯.

아무튼 이런 방법도 있으니 익혀두기로 함.

func hof(f func(line int)) error {

    for a := 0; a < 3; a++ {
        f(a)
    }
    return nil
}

func testHOF(text int) {
    fmt.Println(text)
}

func Example_literal() {
    //사용1
    literalFunc := func(line int) {
        fmt.Println(line)
    }
    hof(literalFunc)
    //사용2
    hof(func(text int) {
        fmt.Println(text)
    })
    //사용3
    hof(testHOF)

    //Output:
}

사용1~2는 함수리터럴(function literal)을 사용한것이고
사용3은 일반 함수도 되는지 해본것(책에서는 함수리터럴만 예시되어 있음)


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다