说一说我喜欢和讨厌的语法

我用过的编程语言不算少, 但是一直没有找到我十分满意的编程语言, 因为我没有找到这样的编程语言: 它恰好包含全部我喜欢的语法, 并且恰好不包含任何我讨厌的语法。

Object Oriented

OO是必不可少的特性。

有了多态, 我才可以放心地写业务逻辑, 而把具体实现交给每个子类来完成。

如果没有多态, 代码可能会变成一大段丑陋的switch来判断类型。

Generic Programming(template)

一般的程序,都是操作对象, 而只有模板,才可以让我们对类型本身进行操作。

比如实现一个有N个类型组成的列表, 并对它进行取头/取尾/取第i个/取子串/比较相等/计算长度等操作。

Function as first class

函数作为第一类值, 我觉得这是一个伟大的发明, 绝对具有划时代意义。

在一个需要事件驱动的应用场景下, 如果函数作为第一类值, 那么注册事件回调的代码将会减少很多很多。

Delimit blocks by indentation

我不喜欢花括号, 也不喜欢begin/end。

而且我觉得缩进对于代码来说很重要。

而使用缩进来表达语句块真是一个伟大的想法。 它不但强制保证了代码的可读性, 还避免了输入花括号/begin/end的烦恼。

List comprehension

列表推导的语法简直是太方便啦!

它不但比map简洁、高效, 而且可读性更好。

generator and coroutine

在一些语言中, 想要遍历一个集合对象, 还需要写一个迭代器的类。

而如果有生成器的语法, 只需要一个函数,几行代码就可以完成相同的功能。

而coroutine可以很方便实现这样的功能: 函数A执行一段, 暂停下来执行函数B。 函数B执行一段, 暂停下来继续执行函数A。 如此往复。

Typechecking arguments in functions

我觉得函数的参数应该有类型限制。

否则如果我写一个库, 允许用户传各种奇怪的值来。 那么只有两种结果: 要么写一大堆代码来检查参数类型, 要么完全不管库的安全性。

Constant and enumeration

这二者有共同点是, 有字符串的表达能力, 但是只占一个整数的内存空间。

Compilation error

有了编译错误,我才能放心地做重构。

比如我把一个函数的第一个参数从Foo类型改成了Bar类型, 那么我还需要把所有调用这个函数的地方改一下。

漏改了某一处调用怎么办?

如果没有编译错误, 我必须到运行时才能够发现漏改了一处调用。 而且如果我测试的覆盖不全的话, 这种疏忽可能会留在代码中, 引发更大的错误。

如果有编译错误, 所有这些检查可以交给编译器来完成。 避免将错误留到运行期。

Warning

我非常讨厌Warning。

我的观点是, 如果发生了错误, 就应该抛个异常。

Warning这种东西, 大多数人根本不理它, 所以它根本没有存在的价值。

AOP

我觉得AOP这种东西, 既不易写, 也不易维护, 简直是一个反人类的存在。

implicit type conversion

隐式类型转换也绝对不能忍。

类型信息是很重要的, 而且隐式类型转换很容易造成一些不易发现的BUG。

Interface

有的语言提出Interface的概念完全是为了避免多继承。

但是我觉得多继承没有错, 是使用的人根本不了解多继承, 竟然发明出来Interface这么一个多余的东西。

全文完

目录啦啦啦