Scala 语法糖多吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lmshl
V2EX    程序员

Scala 语法糖多吗?

  •  
  •   lmshl
    mingyang91 2022-05-12 19:58:05 +08:00 3631 次点击
    这是一个创建于 1261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在多篇帖子看到很多人把 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 友认为的语法糖?

    第 1 条附言    2022-05-13 10:19:10 +08:00

    感谢 #4 楼补充

    1. infix notation -> 方法调用
    2. == -> equals
    22 条回复    2022-05-14 00:52:10 +08:00
    Jooooooooo
        1
    Jooooooooo  
       2022-05-12 20:08:19 +08:00
    我认为语法糖应该是某种通用写法很常见, 所以用另外一种更简便的写法替代.

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

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

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


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

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

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

    Java 调用 Kotlin 最容易,调 Scala 比较难,其他的可能会更难。
    Pangurban
        20
    Pangurban  
       2022-05-13 15:44:02 +08:00
    个人认为一个有趣的语法糖:???
    实际上是 predef 里面的一个函数,名字就是 3 个问号:
    ```
    def ??? : Nothing = throw new NotImplementedError
    ```
    Nothing 是所有类型的子类,所以可以用在任何地方而不会报错
    lmshl
        21
    lmshl  
    OP
       2022-05-13 15:49:33 +08:00
    @Pangurban 这不算语法糖吧,就是普通的函数调用。
    hepin1989
        22
    hepin1989  
       2022-05-14 00:52:10 +08:00
    那根本不是糖,那叫做蜂蜜
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:15 PVG 15:15 LAX 00:15 JFK 03:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86