Scala 语法糖多吗?

2022-05-12 19:58:05 +08:00
 lmshl

在多篇帖子看到很多人把 map / reduce 称为语法糖,有些迷惑。加上大部分人对 Scala / Kotlin 等充满误解。 所以想调查下对于 V 友们来说,在 Scala 中什么样的语法是你们认为的语法糖?

先列举几个我知道的可能是的东西:

  1. for comprehension -> flatMap
  2. implicit -> 编译期代码生成
  3. apply -> 调用时可以省略的函数名
  4. _ -> 参数匿名 + 省略的类型参数 + 变量声明时的默认值
  5. (123, "str") -> Tuple 的括号写法
  6. [T : Encoder] -> type class 用法
  7. match case + unapply -> 模式匹配的解构

...等等

不知道还有哪些是 V 友认为的语法糖?

2996 次点击
所在节点    程序员
22 条回复
Jooooooooo
2022-05-12 20:08:19 +08:00
我认为语法糖应该是某种通用写法很常见, 所以用另外一种更简便的写法替代.

举个例子, java 里的 for(People p : peoples) 就是一种语法糖, 为了简化 for(i=0; i<peoples.size(); i++) 而搞.

为什么会做出这种语法糖, 因为后者十分常见, 所以就搞了前面那种更方便 /更易读的写法.

另外一方面, 遍历一个集合有前面这种简便的写法, 而每隔一个元素遍历就没有(至少我不知道), 应该就是这种写法不够常见吧


这有点点像语言里的缩写
TWorldIsNButThis
2022-05-12 20:20:41 +08:00
除了 C 的语法其他都是语法糖!

高阶函数都能称为语法糖也是没谁了
weiwen
2022-05-12 20:40:58 +08:00
声明变量的语法糖:
val x = 123
声明类的语法糖:
case class C(x: Int, y: String)

这样的语法糖数不尽数,垃圾 Scala!
billlee
2022-05-12 20:42:30 +08:00
infix notation -> 方法调用
== -> equals
zhuangzhuang1988
2022-05-12 21:38:35 +08:00
多。
zhusimaji
2022-05-12 21:42:09 +08:00
这糖真甜
zmal
2022-05-13 00:02:25 +08:00
非常非常非常非常多
zmal
2022-05-13 00:04:33 +08:00
可以这样定义:语法糖反编译以后是另一种比较啰嗦的写法。
ymmud
2022-05-13 08:40:52 +08:00
写起来还是很舒适的,可惜工作不给用
lmshl
2022-05-13 10:17:33 +08:00
@zhuangzhuang1988 有哪些呢?能否举例?
lmshl
2022-05-13 10:17:53 +08:00
@zmal 举个例子?
lmshl
2022-05-13 10:21:05 +08:00
@zmal
可以这样定义:语法糖反编译以后是另一种比较啰嗦的写法。
===============================================
如果这么说的话,Scala 岂不是除了 implicit / for comprehension / match case 之外,就无糖了?
lmshl
2022-05-13 10:21:33 +08:00
@zhusimaji 可否举个例子?
AoEiuV020CN
2022-05-13 10:35:33 +08:00
我觉得 java 的 stream.map 不算语法糖,
但 kotlin 那种直接给 list 加上 map 方法这种拓展就算语法糖了,
lmshl
2022-05-13 11:08:22 +08:00
@AoEiuV020CN Method Extensions ,算是应用比较广泛的语法糖了。Kotlin / Rust / C# / Scala 3 都有 first-class 支持
ericgui
2022-05-13 11:18:03 +08:00
说是 scala 在国内在衰落,是吗?
lmshl
2022-05-13 11:59:13 +08:00
@ericgui 是的,虽然是我们的钓鱼贴,我也回答了一下这个问题,https://www.zhihu.com/question/527828083/answer/2443925217
Fuxixixi
2022-05-13 14:35:30 +08:00
@lmshl 我刚来杭州的时候找工作 面试中无意认识了 scala 早期布道者钟** 我才知道有这个语言 确实国内挺少见的 不过听说是可以兼容 java 的?
lmshl
2022-05-13 14:43:33 +08:00
@Fuxixixi 这方面和 kotlin / groovy / clojure 一样,都能白嫖 Java 的生态。不同的是从 Java 调用 其他语言难易程度有区别。

Java 调用 Kotlin 最容易,调 Scala 比较难,其他的可能会更难。
Pangurban
2022-05-13 15:44:02 +08:00
个人认为一个有趣的语法糖:???
实际上是 predef 里面的一个函数,名字就是 3 个问号:
```
def ??? : Nothing = throw new NotImplementedError
```
Nothing 是所有类型的子类,所以可以用在任何地方而不会报错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/852488

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX