使用了下 Dart 语言,发现一些特性的设计得非常缜密,例如 List Comprehension - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yech1990
V2EX    Dart

使用了下 Dart 语言,发现一些特性的设计得非常缜密,例如 List Comprehension

  •  
  •   yech1990 2020-03-09 02:06:44 +08:00 4729 次点击
    这是一个创建于 2121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就拿大量使用 List Comprehension 的 Python 做比较,

    • Dart 的一个 List Comprehension 里面可以包含多个“逻辑”
    • “逻辑”的结果可以为空

    这些特性 Python 需分为多个 List Comprehension 且外层嵌套逻辑来实现,比如产生这样的一个 List:

    ( Dart 的实现)

    void main() { print([ if (2 > 1) 222 else 333, if (2 > 3) 444, for (int i in Iterable.generate(10)) if (i % 3 == 1) i, for (int i in Iterable.generate(10, (x) => x + 100)) if (i % 2 == 0) i ]); } 

    output: [222, 1, 4, 7, 100, 102, 104, 106, 108]

    https://dartpad.dev/540d15e9a25afb2159ee1b380e98d906

    ( Python 的实现)

    print( [if (2 > 1) 222 else 333] + ([444] if (2 > 3) else []) + [i for i in range(10) if i % 3 == 1] + [i + 100 for i in range(10) if (i + 100) % 2 == 0] ) 
    12 条回复    2020-03-09 10:48:30 +08:00
    widewing
        1
    widewing  
       2020-03-09 03:42:34 +08:00 via Android
    说真的,你真的觉得上面的比下面的舒服吗?
    clockwise9
        2
    clockwise9  
       2020-03-09 07:06:01 +08:00 via Android
    不懂 dart 但是懂一点 python,如果生产环境也这么用的话,会不会难 debug:咦这个函数已经调用过了为啥什么输出都没有?
    noqwerty
        3
    noqwerty  
       2020-03-09 07:26:40 +08:00 via Android
    没写过 Dart,但是从你这个例子里看不出来比 Python 优雅的地方
    murmur
        4
    murmur  
       2020-03-09 07:45:58 +08:00   2
    我认为生产环境写这两种代码都是要被打的
    20015jjw
        5
    20015jjw  
       2020-03-09 07:47:52 +08:00 via Android
    prod 你写个嵌套 list comp 不给你打断
    kilasuelika
        6
    kilasuelika  
       2020-03-09 07:52:26 +08:00 via Android
    真要写起来舒服的话,Mathematica 比这两个得好得多。
    但调试和查错的时候…………boom
    yech1990
        7
    yech1990  
    OP
       2020-03-09 10:10:58 +08:00 via Android
    @widewing 不是优雅的问题,是设计的“稳健性”。

    dart 也可以完全按 Python 那么写,反过来就不行。
    Vegetable
        8
    Vegetable  
       2020-03-09 10:29:01 +08:00
    你这个 python 他能跑吗?
    [if (2 > 1) 222 else 333]不应该是[222 if 2>1 else 333]吗
    widewing
        9
    widewing  
       2020-03-09 10:34:23 +08:00 via Android   1
    @yech1990 你这说法让我想起 Perl.. TMTOWTDI ( There's more than one way to do it )
    yech1990
        10
    yech1990  
    OP
       2020-03-09 10:38:35 +08:00 via Android
    @clockwise9
    @noqwerty
    @murmur

    可能是我没写明白,似乎大家都先入为主地讨论起语言的优雅性的问题,这个 dart 确实口碑不好。

    我说的稳健性是指语法在应对用户各色各样的需求的时候,都提前考虑到了,不会触发奇怪的 bug。

    再例如 string replacement, dart 里面 'test'.replaceAll 可以支持正则表达式,而 Python 就行,需要另外 import 包来实现。另外 Python 例如 "".replace("", s, n) 这种特例,结果这么多年一直是错的啊,知道最新的 alpha 版才得到修复。。。
    yech1990
        11
    yech1990  
    OP
       2020-03-09 10:40:29 +08:00 via Android
    @Vegetable 复制粘贴出错了,好像帖子改不了。 谢谢指正
    yech1990
        12
    yech1990  
    OP
       2020-03-09 10:48:30 +08:00 via Android
    @widewing 这个确实是个有意思的问题,为了兼容特例会导致实现的多样化。

    The zen of Python 里面也提到过这个问题。“Special cases aren't special enough to break the rules.”
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5768 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 02:03 PVG 10:03 LAX 18:03 JFK 21:03
    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