"Функции первоклассного типа" в swift?
Небольшое знание, которое я имею о функции первого класса, заключается в том, что она поддерживает передачу функций в качестве аргументов, и мы также можем возвращать их в качестве значений в другой функции... Я очень новичок в языке программирования Swift, может кто-нибудь, пожалуйста, проиллюстрируйте это на примере.
4 ответа
Очень простой пример, демонстрирующий это поведение:
func functionA() {
println("Hello by functionA")
}
func executeFunction(function: () -> ()) {
function()
}
executeFunction(functionA)
Функции первого класса - это функции, которые могут возвращать другие функции. Например:
func operate( operand: String) -> ((Double, Double) -> Double)?{
func add(a: Double, b: Double) -> Double {
return a + b
}
func min(a: Double, b: Double) -> Double{
return a - b
}
func multi(a: Double, b: Double) -> Double {
return a * b
}
func div (a: Double, b: Double) -> Double{
return a / b
}
switch operand{
case "+":
return add
case "-":
return min
case "*":
return multi
case "/":
return div
default:
return nil
}
}
Функция operate
возвращает функцию, которая принимает два double в качестве аргумента и возвращает один double.
Использование этой функции:
var function = operate("+")
print(" 3 + 4 = \(function!(3,4))")
function = operate("-")
print(" 3 - 4 = \(function!(3,4))")
function = operate("*")
print(" 3 * 4 = \(function!(3,4))")
function = operate("/")
print(" 3 / 4 = \(function!(3,4))")
Когда вы не заботитесь о реализации функции, использование функций первого класса для возврата этих функций становится полезным. Кроме того, иногда вы не несете ответственности за разработку (или не авторизацию) таких функций, как add
, min
, Таким образом, кто-то разработает для вас функцию первого класса, которая возвращает эти функции, и вы обязаны продолжать....
Говорят, что любой язык программирования имеет функции первого класса, когда функции обрабатываются как обычные переменные. Это означает, что функция может быть передана в качестве параметра любой другой функции, может быть возвращена любой функцией, а также может быть назначена любой переменной.
то есть, (ссылаясь на примеры Apple)
Передача функции в качестве параметра
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
Функция возврата
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
Функция, которая возвращает функцию при захвате значения из лексической среды:
Функция массива Comparables, которая возвращает функцию тестового предиката, который возвращает функцию значения, которое возвращает Bool, если значение является экстремумом тестируемого массива. (Каррирование)
Свойства функции первого класса
- Функция - это экземпляр типа Object.
- Вы можете сохранить функцию в переменной.
- Вы можете передать функцию в качестве параметра другой функции.
- Вы можете вернуть функцию из функции.
- Вы можете хранить их в структурах данных, таких как хеш-таблицы, списки...
обратитесь https://www.geeksforgeeks.org/first-class-functions-python/