首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数式编程使用“类方法”吗?OO ->函数式思维

函数式编程使用“类方法”吗?OO ->函数式思维
EN

Stack Overflow用户
提问于 2015-01-25 01:18:46
回答 1查看 88关注 0票数 1

下面是一个简单的Node类

代码语言:javascript
复制
class Node: {
   let uuid: String
   var children = [Node]()

   init() {
      self.uuid = NSUUID().UUIDString
   }

   func addChild(node: Node) {
      children.append(node)
   }

   func removeChild(node: Node) {
      if let index = self.children.indexOf(node) {
         children.removeAtIndex(index)
      }
   }
}

为了使用纯函数,我通过实现“全局”函数appendChildToNode,removeChildFromNode,以addChild和removeChild返回新节点而不是变异内部子数组的方式重写了Node:

代码语言:javascript
复制
struct Node: {
   let uuid: String
   let children = [Node]()

   init(uuid: NSString, children: [Node]) {
      self.uuid = uuid
      self.children = children;
   }
}

func appendChildToNode(node: Node, #child: Node) -> Node {
   return Node(uuid: node.uuid, children: node.children + [child])
}

func removeChildFromNode(node: Node, #child: Node) -> Node {
   return Node(uuid: node.uuid, children: node.children.filter { $0 != child })
}

我没有添加appendChildToNode、removeChildFromNode作为类方法,因为

对我来说,Node.appendChild(子节点)意味着原始节点将被更改,并且不会返回任何内容(尽管它可以实现为返回新节点)。我之所以得到这样的印象,是因为在Swift中,array.appendObject(object)会改变原来的数组,并且经过多年的OO思维方式。

函数式编程的最佳实践/首选是什么?

appendChildToNode(节点、子节点)还是类方法?(Node.appendChild(孩子))?

EN

回答 1

Stack Overflow用户

发布于 2015-01-25 01:27:36

作为一个经验法则,当我不需要的时候,我更喜欢避免使用实例方法。尽管“点表示法”很好,但方法使用动态分派(允许它们的实现在子类中更改),这使得事情比使用常规函数更复杂。

也就是说,我在这里推荐的真正的最佳实践是为你的函数使用听起来不像是变异的东西的名称。例如,appendChildToNode听起来像是在改变列表,即使它被编码为一个静态函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28128120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档