不用静态类型函数式编程语言的十大理由
作者:网络转载 发布时间:[ 2013/6/24 10:01:32 ] 推荐标签:
理由三:我喜欢大括号
还有一点使我不想喜欢这种语言的原因是,我不明白这些与语言要把大括号去掉。去掉大括号还能叫编程语言么?看下我的意思。这是带大括号的代码:
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
看看差别吧,你怎么想我不知道,但是我真心觉得第二种语言有点像垃圾,像漏掉了什么东西似得。
实话说,如果没有大括号给我指引,我总觉得少了些东西。
理由四:我喜欢看到明确的类型
函数式语言的支持者声称,类型推断使代码更清洁,因为任何时候你都无须用类型声明干扰您的代码。
好吧,碰巧,我喜欢看类型声明。如果我不知道每个参数的精确类型,我会觉得不舒服。这是为什么Java 是我喜欢的语言。
这是一个某些ML-ish代码的函数签名。不需要类型声明,所有类型自动推断。
let GroupBy source keySelector =
...
这是C#的类似功能代码的函数签名,带有明确的类型声明。
public IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
...
在这方面我或许是属于少数派,但我更喜欢第二个版本的说法。知道返回值的类型是IEnumerable<IGrouping<TKey, TSource>>对我而言极为重要。
确实,编译器会为你检查它的类型,并在类型不匹配的时候提醒你。但为什么要让编译器代替你做你能做的工作呢?
好吧,我承认如果你使用了泛型,匿名,返回值为函数的函数,以及其它一切新奇的东西,那么你的类型声明将变得复杂又难以理解。而这使得正确判断类型变得非常困难。
但对此我有个简单的弥补办法——不使用泛型而且不要传递函数,你的签名将变得简单许多。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11