Scala的实际应用场景

背景

我刚接触函数式语言是在大学里,一个叫Programming Languages的学科,一个学期学了将近10个开发语言,其中Functional Programming Language是一个系列,有Scheme,ML等。出来工作后,一直觉得这些语言在商业应用上似乎不太看重。

直到某天我看到一侧新闻,Twitter采用了Scala解决了什么什么瓶颈问题,我才对Scala开始了关注。

但是我不是谈什么是Scala,或者函数式编程的理论,我是谈实际项目中我常用的小技巧。

常用场景

假如我需要显示:(1)订单列表,(2)订单明细。假设前段是HTML,我有对象Order和OrderDetail。在显示列表时,一般的做法是运用for-loop。在显示明细时,也是会用for-loop。
其实在Functional Programming(FP)的思维方式通常不是这样步骤式的一个一个处理。

FP的思维方式是通过函数来转换成我们需要的东西。

例如我们有一个变量 orders 类型为 List[Order],我们需要的HTML结果是 <table> 中,一个order为一个 <tr> 行,我们就需要专注一个Order如何变做一行<tr>的函数:

val content = orders.map( o => "<tr><td>"+o.getOrderNo()+"</td></tr>" )

如果用Scala Template (Playframework),这个会容易维护一点:

@orders.map{ o =>
   <tr><td>@o.getOrderNo()</td></tr>
}

map是转换的意思,是把在Collection内的每一个元素,通过你给的函数来做转换。以上的例子,一个 List[Order] 通过map函数,转换成为List[String] , 或者在Scala Template里的 List[Html]

如果你是做桌面应用,需要处理Widget的话,这个思维方式也合用。你可以把List[Order] map 成 List[Widget],接着把他们挂到相应的节点上。

一般的FP会提供比较强大的Collection处理、转换、过滤等等功能。

用了这种思维方式,你会发现你的代码变得非常简洁,而且容易维护。

后话

通过思维方式的改变,就是从步骤式的思维方式变成结果导向的思考方式,个人经验是会大大提升你的生产力,值得在商业领域上大力推广。

我慢慢发现我开始不习惯使用 for-loop,while-loop 了。

发布了27 篇原创文章 · 获赞 10 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章