Go 기초 지식 학습 (2) 리 턴 함수

2062 단어 golang리 턴 함수
반전 함수 의 정의
리 턴 함수, 함수 포인터 로 호출 되 는 함수, 본질 적 으로 함수 입 니 다. 응용 장면 으로 인해 리 턴 함수 라 는 명사 가 나타 납 니 다.이것 은 매우 중요 합 니 다. 일부 우수한 C 라 이브 러 리 에서 자주 볼 수 있 습 니 다. 이것 은 함수 의 실현 자 에 의 해 이 루어 지 는 것 이 아니 라 호출 자 에 의 해 이 루어 집 니 다. 이렇게 하면 문제 의 추상 화 에 편리 합 니 다.아래 의 이 예 를 통 해 간단하게 체득 할 수 있다.
예 를 들 어 C 언어 표준 라 이브 러 리 에 서 는 보통 같은 함수 포인터 로 이 루어 집 니 다. 예 를 들 어 C 라 이브 러 리 에서 빠 른 정렬 의 비교 함수 void qsort (void base, size t nitems, size t size, int (compar) (const void, const void) 여기 compar 가 바로 이 반전 함수 입 니 다.
Android 에서 도 리 셋 함 수 를 많이 볼 수 있 습 니 다. 예 를 들 어 버튼 을 누 른 OnClickListener 는 감청 인터페이스 와 유사 하고 본질 도 리 셋 함수 입 니 다.
Golang 리 턴 함수
Golang 역시 리 셋 함 수 를 지원 합 니 다. 리 셋 함 수 를 실현 하 는 예 입 니 다. 한 배열 의 짝수 값 을 더 한 결 과 를 출력 하고 한 배열 의 홀수 값 을 더 한 결 과 를 출력 합 니 다.리 턴 함 수 는 추상 적 인 기능 을 위 한 이기 입 니 다. 여기 서 sum 함 수 는 조건 에 맞 는 slice 값 에 대한 구 합 으로 이해 할 수 있 습 니 다.이러한 추상 이 있 으 면 우 리 는 sum 으로 3 의 배수 에 대한 값 구 화, 4 의 배수 에 대한 값 구 화 를 쉽게 실현 할 수 있 고 sum 함 수 를 다시 작성 할 필요 가 없습니다.
    package main

import (
    "fmt"
)

func main() {
    //create slice
    s := make([]int, 10)
    fmt.Println(s)
    // init
    for i, _ := range s {
        s[i] = i
    }
    fmt.Println(s)
    // sum all elemets who are even number
    fmt.Println(sum(s, isDouble))
    // sum all elemets who are single number
    fmt.Println(sum(s, isSingle))
}

/**
 callback function : elemet who is even number
**/
func isDouble(a int) bool {
    if a%2 == 0 {
        return true
    } else {
        return false
    }
}

/**
 callback function : elemet who is single number
**/
func isSingle(a int) bool {
    if a%2 == 0 {
        return false
    } else {
        return true
    }
}

/**
    sum all element who are func number
**/
func sum(s []int, f func(int) bool) int {
    sum := 0
    for _, v := range s {
        if f(v) {
            sum += v
        }
    }
    return sum
}

코드
   https://github.com/panyingyun/gostudy/blob/master/exp2.go

참고서
이선 정 은 이 책 에서 '추상' 이라는 단어 에 대한 멋 진 이 해 를 깊이 있 게 했 고 리 셋 함 수 를 능숙 하 게 활용 했다.

좋은 웹페이지 즐겨찾기