Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Videregivelse af Funktioner som Argumenter | Funktioner
Introduktion til Golang

bookVideregivelse af Funktioner som Argumenter

En anden nyttig funktion er muligheden for at videregive funktioner som argumenter til andre funktioner.

Som en påmindelse er den grundlæggende syntaks for en funktion med parametre som følger:

func myFunc(param1 datatype, param2 datatype, ...) optional_return_type {
      // Code
      // Optional return statement
}

Vi bruger følgende syntaks til at angive datatypen for parameteren, når vi videregiver den til en funktion:

func(datatype, datatype, …) return_datatype

Nøgleordet func efterfølges af kommaseparerede datatyper for parametrene til den funktion i parentes. Derudover angiver vi returdatatypen for den forventede funktion eller det forventede sæt af funktioner, hvis det er relevant.

Et eksempel kan hjælpe med at illustrere dette koncept:

index.go

index.go

copy
12345678910111213141516
package main import "fmt" func nTimes(n int, msg string) { for i := 0; i < n; i++ { fmt.Println(msg) } } func printFiveTimes(msg string, show func(int, string)) { show(5, "Hello World") } func main() { printFiveTimes("HelloWorld", nTimes) }

I eksemplet ovenfor videregives en funktion ved navn nTimes som et argument til funktionen printFiveTimes. Datatypen for parameteren show i definitionen af funktionen printFiveTimes er func(int, string), hvilket svarer til definitionen af funktionen nTimes, dvs. nTimes(n int, msg string).

Nu ses et eksempel på en funktion med en returværdi:

index.go

index.go

copy
1234567891011121314151617181920
package main import "fmt" // A factorial is the product of all the numbers from 1 up till n // For-example factorial of 5 is 1x2x3x4x5, which is 120 func factorial(n int) int { var result int = 1; for i := 2; i <= n; i++ { result *= i } return result } func eval(n int, oper func(int) int) int { return oper(n) } func main() { fmt.Println(eval(5, factorial)) }
question mark

Hvad vil outputtet være for følgende program:

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 1.96

bookVideregivelse af Funktioner som Argumenter

Stryg for at vise menuen

En anden nyttig funktion er muligheden for at videregive funktioner som argumenter til andre funktioner.

Som en påmindelse er den grundlæggende syntaks for en funktion med parametre som følger:

func myFunc(param1 datatype, param2 datatype, ...) optional_return_type {
      // Code
      // Optional return statement
}

Vi bruger følgende syntaks til at angive datatypen for parameteren, når vi videregiver den til en funktion:

func(datatype, datatype, …) return_datatype

Nøgleordet func efterfølges af kommaseparerede datatyper for parametrene til den funktion i parentes. Derudover angiver vi returdatatypen for den forventede funktion eller det forventede sæt af funktioner, hvis det er relevant.

Et eksempel kan hjælpe med at illustrere dette koncept:

index.go

index.go

copy
12345678910111213141516
package main import "fmt" func nTimes(n int, msg string) { for i := 0; i < n; i++ { fmt.Println(msg) } } func printFiveTimes(msg string, show func(int, string)) { show(5, "Hello World") } func main() { printFiveTimes("HelloWorld", nTimes) }

I eksemplet ovenfor videregives en funktion ved navn nTimes som et argument til funktionen printFiveTimes. Datatypen for parameteren show i definitionen af funktionen printFiveTimes er func(int, string), hvilket svarer til definitionen af funktionen nTimes, dvs. nTimes(n int, msg string).

Nu ses et eksempel på en funktion med en returværdi:

index.go

index.go

copy
1234567891011121314151617181920
package main import "fmt" // A factorial is the product of all the numbers from 1 up till n // For-example factorial of 5 is 1x2x3x4x5, which is 120 func factorial(n int) int { var result int = 1; for i := 2; i <= n; i++ { result *= i } return result } func eval(n int, oper func(int) int) int { return oper(n) } func main() { fmt.Println(eval(5, factorial)) }
question mark

Hvad vil outputtet være for følgende program:

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6
some-alt