技术开发 频道

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

        【IT168 评论】你厌烦函数式编程么?我也烦,我真想呼吁那些想我一样明智的人远离这种语言。这里要澄清一点,我指的这种静态类型函数式编程语言,包括那种类型推断或者静态缺省等等。实际上,就是Haskell和ML—family。

  不想跟潮流

  像大多数程序员一样,我怀旧且讨厌学习新东西。这是我选择混IT这行的原因。我不跟风的原因跟其它“程序猿“一样,静观其变,等该产品差不多了且能看到其前景,对我来说,函数式编程这东西太新了,我讨厌新东西。

  是的,有些家伙已经把ML和Haskell跟他们之前最喜欢的Java&PHP作比较了。但最近我只听说过Haskell,他们所说的对我都是废话。看看新宠F#语言。已经有七年了,彼得的大作。当然,这在业界来说已经生存不少时间了,但相对于互联网的历史,七年只是一眨眼。所以,像我所说的那样,我会谨慎的小心的观察每个internet潮流,函数式式编程或许只是浮云。

  按代码行数算工资

  你怎么想的我不知道,但是随着我写的代码越多,我就越有成就感,效率很高。如果一天能快速完成500行代码,那就可以说你干的漂亮。每天的任务很繁重,而且boss眼里你也总是忙忙碌碌的。但是当我拿函数式编程语言和那些老牌语言例如C去比较时,代码少的让我吃惊。就拿下面这段代码为例:

public static class SumOfSquaresHelper
{
  
public static int Square(int i)
   {
      return i
* i;
   }

  
public static int SumOfSquares(int n)
   {
      
int sum = 0;
      
for (int i = 1; i <= n; i++)
      {
         sum
+= Square(i);
      }
      return sum;
   }
}

  比比下面的:

let square x = x * x
let sumOfSquares n = [1..n] |> List.map square |> List.sum

  十七行的代码只剩下2行了,想想如果这种变化发生在整个工程里面会有什么后果。如果我们使用这种方法,估计我的代码产量会直线下降--这不是我能忍受的。

  喜欢大括号

  还有一点使我不想喜欢这种语言的原因是,我不明白这些与语言要把大括号去掉。去掉大括号还能叫编程语言么?看下我的意思。这是带大括号的代码:

public class Squarer
{
    
public int Square(int input)
    {
        var result
= input * input;
        return result;
    }

    
public void PrintSquare(int input)
    {
        var result
= this.Square(input);
        Console.WriteLine(
"Input={0}. Result={1}", input, result);
    }
}

  这个则是去掉大括号的相同的代码:

type Squarer() =

    
let Square input =
        
let result = input * input
        result

    
let PrintSquare input =
        
let result = Square input
        printf
"Input=%i. Result=%i" input result

  看看差别吧,你怎么想我不知道,但是我真心觉得第二种语言有点像垃圾,就像漏掉了什么东西似得。实话说,如果没有大括号给我指引,我总觉得少了些东西。

0
相关文章