- Scala Functional Programming Patterns
- Atul S. Khot
- 366字
- 2021-07-30 09:44:23
Scala idioms
When do we know a language? In English, when we say a penny for your thoughts, we are using an idiom. We can express ourselves more succinctly and natively using these. Beating around the bush is another one. If we pick up enough of these and hurl them around at times, this will makes us fluent.
It is almost the same with programming languages. You see a construct time and again and make use of notable features of a specific programming language. Here is a sample of idioms from a few prominent languages.
For example, here is an idiomatic Scala way to sum up two lists of numbers:
scala> val d1 = List(1, 2, 3, 4, 5) d1: List[Int] = List(1, 2, 3, 4, 5) scala> val d2 = List(11, 22, 33, 44, 55) d2: List[Int] = List(11, 22, 33, 44, 55) scala> (d1, d2).zipped map (_ + _) res0: List[Int] = List(12, 24, 36, 48, 60)
We could do this in a roundabout way; however, note that your Scala colleagues would quickly comprehend what is happening. Try the following command:
scala> (1 to 100).map( _ * 2 ).filter(x => x % 3 == 0 && x % 4 == 0 && x % 5 == 0) res2: scala.collection.immutable.IndexedSeq[Int] = Vector(60, 120, 180)
For numbers from 1
to 100
, we multiply each number by 2
. We select those numbers that are divisible by 3
, 4
, and 5
.
Here we are chaining method calls together. Each method returns a new value. The input is left unmodified. The intermediate values are threaded from call to call.
We could also write the preceding command as follows
scala> val l1 = 1 to 100 … // output elided scala> val l2 = l1.map(_ * 2) … // output elided scala> val l3 = l2.filter(x => x % 3 == 0 && x % 4 == 0 && x % 5 == 0) l3: scala.collection.immutable.IndexedSeq[Int] = Vector(60, 120, 180)
However, the fluent API style is more idiomatic.
Note
You can learn more about fluent interfaces at http://www.martinfowler.com/bliki/FluentInterface.html.
People relate easily to idiomatic code. When we learn and use various Scala idioms, we will write code in the Scala way.
- C++ Primer習(xí)題集(第5版)
- 信息可視化的藝術(shù):信息可視化在英國
- Python程序設(shè)計(第3版)
- 三維圖形化C++趣味編程
- 編寫高質(zhì)量代碼:改善C程序代碼的125個建議
- SAS數(shù)據(jù)統(tǒng)計分析與編程實(shí)踐
- Visual C++數(shù)字圖像處理技術(shù)詳解
- Android開發(fā)三劍客:UML、模式與測試
- Learning AWS
- Software Development on the SAP HANA Platform
- Android編程權(quán)威指南(第4版)
- Neo4j 3.x入門經(jīng)典
- Node.js實(shí)戰(zhàn):分布式系統(tǒng)中的后端服務(wù)開發(fā)
- VC++ 2008專題應(yīng)用程序開發(fā)實(shí)例精講
- R語言編程基礎(chǔ)