V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lmshl
V2EX  ›  程序员

Scala 语法糖多吗?

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

    在多篇帖子看到很多人把 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   ·   实用小工具   ·   2006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:48 · PVG 08:48 · LAX 16:48 · JFK 19:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.