官术网_书友最值得收藏!

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.

主站蜘蛛池模板: 咸丰县| 舟山市| 彰化县| 佛冈县| 施秉县| 凌海市| 濉溪县| 如东县| 玉门市| 宣恩县| 吴堡县| 丰城市| 高雄市| 哈尔滨市| 惠州市| 卢龙县| 句容市| 邵武市| 南溪县| 清河县| 五常市| 海丰县| 潮安县| 中江县| 西宁市| 乌兰浩特市| 聂荣县| 宾川县| 拉萨市| 大城县| 柳林县| 讷河市| 金乡县| 十堰市| 莒南县| 铜陵市| 青海省| 萨迦县| 谷城县| 农安县| 寿阳县|