在多篇帖子看到很多人把 map
/ reduce
称为语法糖,有些迷惑。加上大部分人对 Scala / Kotlin 等充满误解。
所以想调查下对于 V 友们来说,在 Scala 中什么样的语法是你们认为的语法糖?
先列举几个我知道的可能是糖的东西:
(123, "str")
-> Tuple 的括号写法[T : Encoder]
-> type class 用法match case
+ unapply
-> 模式匹配的解构...等等
不知道还有哪些是 V 友认为的语法糖?
感谢 #4 楼补充
1
Jooooooooo 2022-05-12 20:08:19 +08:00
我认为语法糖应该是某种通用写法很常见, 所以用另外一种更简便的写法替代.
举个例子, java 里的 for(People p : peoples) 就是一种语法糖, 为了简化 for(i=0; i<peoples.size(); i++) 而搞. 为什么会做出这种语法糖, 因为后者十分常见, 所以就搞了前面那种更方便 /更易读的写法. 另外一方面, 遍历一个集合有前面这种简便的写法, 而每隔一个元素遍历就没有(至少我不知道), 应该就是这种写法不够常见吧 这有点点像语言里的缩写 |
2
TWorldIsNButThis 2022-05-12 20:20:41 +08:00 2
除了 C 的语法其他都是语法糖!
高阶函数都能称为语法糖也是没谁了 |
3
weiwen 2022-05-12 20:40:58 +08:00
声明变量的语法糖:
val x = 123 声明类的语法糖: case class C(x: Int, y: String) 这样的语法糖数不尽数,垃圾 Scala! |
4
billlee 2022-05-12 20:42:30 +08:00 1
infix notation -> 方法调用
== -> equals |
5
zhuangzhuang1988 2022-05-12 21:38:35 +08:00
多。
|
6
zhusimaji 2022-05-12 21:42:09 +08:00 via iPhone
这糖真甜
|
7
zmal 2022-05-13 00:02:25 +08:00 via iPhone
非常非常非常非常多
|
8
zmal 2022-05-13 00:04:33 +08:00 via iPhone
可以这样定义:语法糖反编译以后是另一种比较啰嗦的写法。
|
9
ymmud 2022-05-13 08:40:52 +08:00
写起来还是很舒适的,可惜工作不给用
|
10
lmshl OP @zhuangzhuang1988 有哪些呢?能否举例?
|
12
lmshl OP @zmal
可以这样定义:语法糖反编译以后是另一种比较啰嗦的写法。 =============================================== 如果这么说的话,Scala 岂不是除了 implicit / for comprehension / match case 之外,就无糖了? |
14
AoEiuV020CN 2022-05-13 10:35:33 +08:00
我觉得 java 的 stream.map 不算语法糖,
但 kotlin 那种直接给 list 加上 map 方法这种拓展就算语法糖了, |
15
lmshl OP @AoEiuV020CN Method Extensions ,算是应用比较广泛的语法糖了。Kotlin / Rust / C# / Scala 3 都有 first-class 支持
|
16
ericgui 2022-05-13 11:18:03 +08:00
说是 scala 在国内在衰落,是吗?
|
17
lmshl OP @ericgui 是的,虽然是我们的钓鱼贴,我也回答了一下这个问题,https://www.zhihu.com/question/527828083/answer/2443925217
|
18
Fuxixixi 2022-05-13 14:35:30 +08:00
@lmshl 我刚来杭州的时候找工作 面试中无意认识了 scala 早期布道者钟** 我才知道有这个语言 确实国内挺少见的 不过听说是可以兼容 java 的?
|
19
lmshl OP @Fuxixixi 这方面和 kotlin / groovy / clojure 一样,都能白嫖 Java 的生态。不同的是从 Java 调用 其他语言难易程度有区别。
Java 调用 Kotlin 最容易,调 Scala 比较难,其他的可能会更难。 |
20
Pangurban 2022-05-13 15:44:02 +08:00
个人认为一个有趣的语法糖:???
实际上是 predef 里面的一个函数,名字就是 3 个问号: ``` def ??? : Nothing = throw new NotImplementedError ``` Nothing 是所有类型的子类,所以可以用在任何地方而不会报错 |
22
hepin1989 2022-05-14 00:52:10 +08:00
那根本不是糖,那叫做蜂蜜
|