"Функции первоклассного типа" в 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, если значение является экстремумом тестируемого массива. (Каррирование)

Свойства функции первого класса

  1. Функция - это экземпляр типа Object.
  2. Вы можете сохранить функцию в переменной.
  3. Вы можете передать функцию в качестве параметра другой функции.
  4. Вы можете вернуть функцию из функции.
  5. Вы можете хранить их в структурах данных, таких как хеш-таблицы, списки...

обратитесь https://www.geeksforgeeks.org/first-class-functions-python/

Другие вопросы по тегам