高阶功能适用于优雅的高级编码器

(((((()-> {})-> {})-> {})-> {})-> {}

好。 这篇文章有点愚蠢,因为我将使用另一个高阶函数编写一个高阶函数,以便向您展示什么是高阶函数。 我希望我不会犯任何错误。

高阶函数是将函数作为其参数的函数。 好吧,我认为该陈述并不能解释“全部”,但这是我可以向任何非编码者朋友解释的最简单的方法,所以请问。

无论如何,许多编程语言中都存在高阶函数。 我将在本文中使用Swift,但是所有其他语言的概念应该相同。 让我们深入研究。假设我们有一个整数数组。

 让数组= [1,2,3,4] 

这是将所有元素乘以2的Computer-science-101方法,这是

  var newArray = [Int]() 
 对于0中的i .. <array.count { 
让element = array [i] * 2
newArray.append(element)
}
  print(newArray)// [2,4,6,8] 

实际上,这里的for循环可以被forEach函数代替,后者是Swift附带的高阶函数。 甜…

  var newArray = [Int]() 
  array.forEach({ 
newArray.append($ 0 * 2)
})
  print(newArray)// [2,4,6,8] 

请注意,我们没有将0乘以2。 $ $ 0只是保留的简短形式,表示闭包的第一个参数。 不要问我为什么是$ 0。 我不知道。 很抱歉,如果您不知道封闭是什么。 我可能会在另一篇文章中进行解释。 最优雅的方法是使用地图功能。 同样,不要问我为什么将其命名为map。 一开始我也很难理解。

  var newArray = array.map({$ 0 * 2}) 
  print(newArray)// [2,4,6,8] 

映射功能不仅可以缩短代码,而且具有很高的可重用性。 您现在可以将所有内容乘以3、4,…等等。

但是如何? 我向您展示了如何使用高阶函数,但是如果您想创建自己的函数呢? 让我们写出我们自己的map函数。 我认为这将使您了解其工作原理。 为此,我需要编写一个扩展,以便直接从整数数组使用此myMap函数。 如果您不知道Swift中的扩展名是什么。 这是我试图解释的帖子。

https://medium.com/@ckwcfm/when-extension-means-shorten-code-a13a601f393a

好,现在回到我们的高阶世界。 扩展名如下

 扩展数组,其中Element == Int { 
  func myMap(_ block:(_ value:Int)-> Int)-> Array { 
var newArray = [Int]()
self.forEach {(element in
让newElement = block(element)
newArray.append(newElement)
}
返回newArray
}
  } 

我们这样称呼它

 让newArray = array.myMap({$ 0 * 2}) 
  print(newArray)// [2,4,6,8] 

我知道,完全可以看一下原始地图功能。 这也是我认为map函数的作用所在。 还记得我刚说的话吗? 高阶函数是将函数作为其参数的函数。 如果你靠近 扩展名,在遍历数组时调用black(element)black(element)实际上是{$0 * 2} 。 基本上,它调用传递给它的函数。 就像您向服务员( myMap )订购了牛肉,服务员( myMap )问您如何烹制牛肉,然后您说了做( {$ 0 * 2} )。 因此,您将得到一份牛肉。 没人会吃牛肉。

最后,希望您能更多地了解高阶函数。 如果您不这样做,对不起,我不在乎。 大声笑