V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LosLord
V2EX  ›  问与答

都在说 Java 啰嗦,能问下具体怎么个啰嗦法吗?

  •  
  •   LosLord · 2019-07-31 20:53:35 +08:00 · 3212 次点击
    这是一个创建于 1933 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大佬们能具体贴出代码对比举例吗?简单看了一下其他语言和 Java 比我看不出哪里啰嗦欸。

    19 条回复    2019-08-01 13:28:56 +08:00
    murmur
        1
    murmur  
       2019-07-31 21:04:20 +08:00
    都 2019 年了还有人认为语句和关键字长度就反比于语言的运行和开发效率
    murmur
        2
    murmur  
       2019-07-31 21:09:37 +08:00
    如果考虑到 java1.8,考虑到各种 utils 或者 guava,在 idea 的加持下,唯一麻烦的就是写 json 返回值太痛苦了,怎么构造方法,用 string 反解,都没有 js 里直接返回复杂格式写的舒服

    如果不考虑这些,大概能被抨击的:
    流的操作,包括文件读写这些,看教科书那种文件读写的一层套一层简直痛苦
    没有回调函数,当然我认为有 idea 实现个接口也没什么大不了的
    cabing
        3
    cabing  
       2019-07-31 21:13:17 +08:00
    写 java 代码比较讲究设计。
    LosLord
        4
    LosLord  
    OP
       2019-07-31 21:25:43 +08:00
    @murmur json 返回值?指 web 应用 序列化 /反序列化 吗?现在很成熟了吧,没有地方用到构造方法欸。
    关于一层套一层,如果自己封装个 util 是否就显得不那么痛苦了。
    回调函数这方面其他语言有什么比较优雅的解决办法吗?没对比过。

    @cabing 设计在所有语言的程序都要讲究吧,项目大起来复杂起来,设计的不好,岂不是要 GG。
    DT27
        5
    DT27  
       2019-07-31 21:34:47 +08:00
    PHP:
    <?php
    echo "Hello!";
    ?>

    JAVA:
    class Main {
    public static void main(String[] args) {
    System.out.print("Hello!");
    }
    }
    cabing
        6
    cabing  
       2019-07-31 21:40:36 +08:00
    @LosLord 尤其。
    LosLord
        7
    LosLord  
    OP
       2019-07-31 21:44:33 +08:00
    @DT27 我还以为只有学生时期才会用 Hello World 来比较语言,幸亏你加了狗头。

    @cabing 知识浅薄,能简单举例吗?
    SuperMild
        8
    SuperMild  
       2019-07-31 21:45:50 +08:00
    看看 kotlin, 非常明显把 java 简洁化了很多,肉眼可见。
    LosLord
        9
    LosLord  
    OP
       2019-07-31 21:58:00 +08:00
    @SuperMild 我平常也写 Kotlin,一定程度上能简化代码,但是没那么夸张。我觉得更多的是扩展 Java。除了那些语法上的扩展显得代码简洁一点( Java11 的新特性能替代一点),设计上还是该怎么样就怎么样,简略的代码看着好像并没有那么舒服。
    kx5d62Jn1J9MjoXP
        10
    kx5d62Jn1J9MjoXP  
       2019-07-31 22:00:39 +08:00 via Android   ❤️ 1
    一个单词: factory
    SuperMild
        11
    SuperMild  
       2019-07-31 22:13:01 +08:00
    @LosLord 随便一个普通函数(方法) Kotlin 能比 Java 少几行,乃至十几行。

    至于设计上,那差距就更大了,Kotlin 有 DSL 大杀器,而且还是 type safe 的,既简洁又安全。

    看着舒不舒服就不要拿出来讨论了。
    twoyuan
        12
    twoyuan  
       2019-07-31 22:19:03 +08:00 via Android
    啰嗦在于很多语义上明确的,本可以通过推导得到的逻辑,却不得不手动编码来表示。

    例子的话感觉各种设计模式的例子就很能说明问题了
    billlee
        13
    billlee  
       2019-07-31 23:07:52 +08:00
    ```java
    Map<Int, String> map = new HashMap();
    map.add(1, "1")
    map.add(2, "2")
    ...
    ```

    ```scala
    val map = Map(1 -> "1", 2 -> "2", ...)
    ```
    Takamine
        14
    Takamine  
       2019-07-31 23:35:45 +08:00 via Android
    要是单方面跟弱类型的语言比代码量就是耍流氓。
    可能还是一些设计模式和分层上吧,其实靠 IDE 补全,也写不了几行。
    LosLord
        15
    LosLord  
    OP
       2019-08-01 01:10:13 +08:00   ❤️ 1
    @SuperMild 我使用场景的最多的节省行数的就是 val name = user.name?:""这种,其他的也是有一些,倒是不多。

    @billlee
    java11 :
    var map = Map.of(1,"1",2,"2");

    java8+guava :
    Map<Integer, String> map = ImmutableBiMap.of(1,"1",2,"2");
    msg7086
        16
    msg7086  
       2019-08-01 07:01:37 +08:00
    我只记得以前看 Java 打开文件读取文本要写老长一段……
    NewDraw
        17
    NewDraw  
       2019-08-01 07:12:56 +08:00 via Android
    空指针异常判断,当然 optional 也不失为一种优美的解决方案。
    aguesuka
        18
    aguesuka  
       2019-08-01 10:17:59 +08:00 via Android
    因为有 8 种基本类型,所以 jdk 里很多类和方法都要写 9 次。因为是假泛型,所以 List 转 array 还要传个数组进去。因为
    cabing
        19
    cabing  
       2019-08-01 13:28:56 +08:00
    怎么说呢。

    嗯,你可以看看 java 的 collect 包~各种接口的设计
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3482 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:37 · PVG 18:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.