技术开发 频道

不用静态类型函数式编程语言的十大理由

  喜欢看到明确的类型

  函数式语言的支持者声称,类型推断使代码更清洁,因为任何时候你都无须用类型声明干扰您的代码。好吧,碰巧,我喜欢看类型声明。如果我不知道每个参数的精确类型,我会觉得不舒服。这就是为什么Java 是我最喜欢的语言。这是一个某些ML-ish代码的函数签名。不需要类型声明,所有类型自动推断。

let GroupBy source keySelector =
    ...

  这是C#的类似功能代码的函数签名,带有明确的类型声明。

public IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
    IEnumerable
<TSource> source,
    Func
<TSource, TKey> keySelector
    )
    ...

  在这方面我或许是属于少数派,但我更喜欢第二个版本的说法。知道返回值的类型是IEnumerable>对我而言极为重要。确实,编译器会为你检查它的类型,并在类型不匹配的时候提醒你。但为什么要让编译器代替你做你能做的工作呢?好吧,我承认如果你使用了泛型,匿名,返回值为函数的函数,以及其它一切新奇的东西,那么你的类型声明将变得复杂又难以理解。而这使得正确判断类型变得非常困难。但对此我有个简单的弥补办法——不使用泛型而且不要传递函数,你的签名将变得简单许多。

  喜欢修复Bug

  对我来说,找出bug调试bug,就想狩猎一样刺激。如果在产品系统中存在这个bug,我更兴奋,因为那使我有一种我是英雄的错觉。但是当我看了这种静态类型函数式编程之后,寻找bug就变得困难多了。太不爽了。

  我生活于调试程序之中

  论及修复bug,我可是花费每天的大部分时间在调试程序、代码单步执行中的。没错,我知道应该使用单元测试,但说起来容易做起来难,对不?不管怎样,通过这些静态类型的函数式语言,如果你的代码编译通过了,一般它就能正常运行 。

  我听说你不得不耗费许多时间在类型匹配上面,但一旦完成它又编译成功,就没有什么需要调试的了。这里面哪里有乐趣呢?

0
相关文章