为什么需要面向扩展的设计
|
这个 leftPad 可能来自一个单独的库¹,也可能来自第三方的工具函数集合(比如 Apache Commons),或者在你自己的项目中自行编写。总之,它的调用看起来和字符串类上的内置方法是非常不同的。 为什么会有这样的问题呢?我引用 Java 的作者之一 Guy Steele,他在 1998 年的《成长的语言》论文²中的一段话。 在大多数语言中,用户至少可以定义一些新语法来代表另外一段代码,然后可以很方便地调用这些代码,这种方式可以让新语法看起来像原生调用一样。通过这种方式,用户可以构建一个更大的语言来满足他的需求。 Guy Steele, Growing a Language 他是在批评 APL 缺乏这样的设施,但同样的批评也适用于现代环境下的旧的面向对象语言。你被困在一个类的操作词汇表上,而这个词汇表是原始库的设计者们所设想的,它不能由你来扩展。此外,它也没法被广泛使用的库的维护者随意地扩展,再次引用同一篇论文中的内容作为原因。 编程词汇的一部分适合所有程序员使用,但其他部分仅适合少数几个人。 程序员需要了解学习其所有词汇用法,这并不公平。
现代语言(如 C#、Scala、Rust、Kotlin 和 Swift)通过支持扩展方法解决了这个问题。你可以在不是你控制的类中添加特定领域的扩展方法,这样,你自己的函数可以用类似于内置方法来调用,而你的代码仍然可以像散文一样,流畅的按从左到右的顺序阅读。 (编辑:平顶山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

