swifter-tips / Public-Issues

Public issues for Swifter-tips book

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

《动态类型和多方法》一章没必要

owenzhao opened this issue · comments

Swift 2.0版的这章,也许是我的水平有限吧。我觉的Swift默认符合我的思考习惯。作者提出的方式,如果Swift做为默认实现了,我认为反而是比较绕的。

因为首先,单独把函数这么写出来,而不是做为类的方法,本身就是很少见的。其次,我阅读代码的时候,如果看到函数的参数是Pet类型,那么我很自然会去看参数为Pet类型的那个函数,也就是像Swift现在在做的那样。如果此时Swift调用的不是参数为Pet的那个函数,反而参数为Dog的那个,那么这个调用就太过隐蔽了,相当于是在运行的时候进行了二次的判断,我想这个也应该是不利于编译器的优化的。

结论:这章提出的问题给我的感觉不是那么重要,建议将这章去掉,换成其它更好的话题来进行讲解。

多方法在一些语言里 (比如 C#,Clojure 或者 Lisp) 都是存在的特性。这一节其实的目的是从稍微偏向于语言理论的方面来引导读者看看 Swift 在多方法或者多派发上的可能性,或者说绕过某些语言的限制。因为 Swift 并不支持多方法,所以实际做 app 的时候我们当然不太会去这样绕圈圈来实现,使用 protocol 会是更好的方式。

这里更希望读者能理解为什么 dispatch 会是这样的,以及类型到底是在什么时候决定的这一系列问题。在 Swift 1.x 时代可能并不十分重要,但是加入 protocol extension 之后,建立这个概念可以说是必须的。