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

dart 这个语言有前途,优点挺多

  •  
  •   ericgui · 78 天前 · 10122 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有点像 Java ,但 vscode 就可以写了

    有点像 javascript ,但却是静态语言,比动态语言感觉稳很多

    又有 flutter 这个框架,覆盖 iOS ,Android ,web 和 desktop

    将来要是搞个后端框架,就可以全栈了

    第 1 条附言  ·  77 天前
    推荐这个 dart 教程:
    92 条回复    2023-01-13 12:02:07 +08:00
    musi
        1
    musi  
       78 天前   ❤️ 2
    "将来要是搞个后端框架,就可以全栈了"
    你在说 TS ?
    Mexion
        2
    Mexion  
       78 天前   ❤️ 13
    说得好,我选择 TS
    corcre
        3
    corcre  
       78 天前   ❤️ 4
    第一个也算优点吗, 只要你能习惯得了 vscode 也能写 java...
    jiangzm
        4
    jiangzm  
       78 天前   ❤️ 2
    dart 语言本身还好,就是反序列化很麻烦,而 flutter 用对象去组织页面结构就很烦碎和不直观, 希望早日回归 XML 结构
    Leviathann
        5
    Leviathann  
       78 天前
    2023 年像 java 和 js 还算优点吗?
    而且这语言的类型我记得还有设计上的问题,和协变逆变有关的,具体我忘了
    yyfearth
        6
    yyfearth  
       78 天前
    Dark 和 TS 比没有特别大的优势呀
    sinnosong1
        7
    sinnosong1  
       78 天前   ❤️ 2
    你说这些优点 C#全部都有,静态语言,支持 dynamic ,全平台支持
    HungryOrangeCat
        8
    HungryOrangeCat  
       78 天前
    dart 语言的特性太大杂烩了
    ericgui
        9
    ericgui  
    OP
       78 天前
    @sinnosong1 c#可以写 android ?
    DingJZ
        10
    DingJZ  
       78 天前   ❤️ 3
    @ericgui #9 Xamarin
    murmur
        11
    murmur  
       78 天前
    @ericgui mono ,还真可以,微软的 xamarin 框架,一看就是国内 ms 系太可怜
    sinnosong1
        12
    sinnosong1  
       78 天前
    @ericgui 看看 Avalonia 、maui 、Uno 光我知道的就有 3 种不同的方案。maui 是微软支持的,但是 Linux 系统是社区支持
    zoharSoul
        13
    zoharSoul  
       78 天前   ❤️ 1
    dart 的 ide 支持比 Java 差了好多...
    janus77
        14
    janus77  
       78 天前
    dart 搞后端语言还差很大距离吧,后端要求的高稳定性、高扩展性、高性能这些东西都不是 dart 目前发力的重点,其 sdk 至少要根据服务端系统进行深度针对优化才行,更不用说那些复杂业务逻辑写起来语法是否简洁、架构是否牛逼
    mxT52CRuqR6o5
        15
    mxT52CRuqR6o5  
       78 天前   ❤️ 1
    和 js 比有优势,和 c#、java/kotlin 比的话就不好说了
    ericgui
        16
    ericgui  
    OP
       78 天前
    @janus77 所以我说将来嘛
    Aurt
        17
    Aurt  
       78 天前
    写 dart 比写 kt 舒服
    sikong31
        18
    sikong31  
       78 天前
    也就是跨端的现代语言,实际用起来完成度还是差一点,没有 swift 写着舒服
    mxT52CRuqR6o5
        19
    mxT52CRuqR6o5  
       78 天前
    要我说 dart 的优势在于因为自身的设计,可以比较高效高质量的编译到 js ,而 dart 是比 js 有优势的,其他的那些优秀语言可能没那么容易高效高质量的编译到到 js
    wangtian2020
        20
    wangtian2020  
       78 天前
    dart 挺喜欢的,读写文件也没 java 的这个流那个流,不用编译命令行运行速度很快,有 nodejs 那味了
    whyrookie
        21
    whyrookie  
       78 天前   ❤️ 1
    @jiangzm #4 这个是趋势吧,就是为了摒弃 XML
    theeye
        22
    theeye  
       78 天前
    dart 的后端框架:dart frog
    murmur
        23
    murmur  
       78 天前
    @wangtian2020 java 读写文件也不需要这个流那个流,啥语言没几个 util 可以用啊,你能想到的东西库开发者也会想到
    bunny189
        24
    bunny189  
       78 天前
    dart 写起来是挺舒服的
    murmur
        25
    murmur  
       78 天前
    @whyrookie 不会有人认为嵌套式的元素定义很舒服吧,dart 有个 dart-x 就牛批了,可惜他没有

    android 不喜欢用 xml 描述界面是因为他属性又长又臭,而且很多动态的东西在 xml 里写不出来,但是 rn 这种完全可以用 xml 写动态界面
    fiypig
        26
    fiypig  
       78 天前
    好的,我马上学
    netabare
        27
    netabare  
       78 天前 via Android
    在语言特性上 dart 其实没什么特别的,感觉也就比 java 多了个空安全

    而且好像除了 flutter 外也基本没人用了
    hellojukay
        28
    hellojukay  
       78 天前
    flutter 目前在国内还是不温不火
    jiangzm
        29
    jiangzm  
       78 天前
    @whyrookie #21 想请问从哪得出来有这个趋势的?
    hellojukay
        30
    hellojukay  
       78 天前
    dart 的 json 序列化,反序列化非常蛋疼。
    chisj
        31
    chisj  
       78 天前
    写了十二年的:C/Objc/Swift,最近写 Dart ,确实节省了不少精力。
    chisj
        32
    chisj  
       78 天前
    也许它不是完美的语言,不是面面俱到,但是确实很适合开发客户端,Flutter 的设计也比苹果的 cocoa 那坨十几年了还是半成品的组件好太多了。
    youxiachai
        33
    youxiachai  
       78 天前
    @jiangzm 你这是逆潮流化啊
    monkeyWie
        34
    monkeyWie  
       78 天前   ❤️ 1
    dart 写起来是挺舒服的,但是 flutter 写起来不舒服(当然是因为 flutter 不支持反射的原因,导致 json 和泛型处理都挺麻烦,还有恶心的嵌套)
    libook
        35
    libook  
       78 天前
    Dart 是 Google 的亲儿子,早在 2014 年就大力推广过一阵子了,当时我记得专门做了原生支持 Dart 的 Chromium 版本,还提供了 Dart 转 JS 的工具,甚至后来还有 AngularDart ( Angular 是 Google 的另一个亲儿子)。

    不过后来 ECMA 、W3C 、WHATWG 打了鸡血,特别是 ES6 掀起了一场 JS 变革,微软也来蹭热度在 ES6 正式定稿前出了个 TS ; Dart 的热度就降下去了。

    后来被 Oracle 告 Android 侵权了 Java ,Google 被告烦了,于是搞了两条路线:一个是联合 JetBrains 用 Koltlin 替换 Android 里的 Java ,另一个是发展 Flutter 和 Fuchsia 来重新推 Dart 。

    后端框架也有吧,你可以去 Google 上搜一下看看,只不过现在用于生产的案例比较少。

    Dart 本身能被 Google 推这么多年,说明本身素质还行。使用 Flutter 的产品也不少,主要面向需要跨平台开发的场景。如果你觉得好用就可以用。本身这些也都是工具,根据需要选型就好。
    jiangzm
        36
    jiangzm  
       78 天前
    @youxiachai #33 愿闻其详
    zjsxwc
        37
    zjsxwc  
       78 天前
    但我觉得 苹果的 swift 比 dart 有前途。
    debuggerx
        38
    debuggerx  
       78 天前   ❤️ 14
    5 年+的 flutter 开发经验,也用 dart 开发过后端,我人为的 dart 的优点:
    1. 支持 AOT 编译,产物可以几乎无依赖的直接部署,这点可以对标 go 的部署方便,比 JS 、TS 、python 等需要运行时依赖的语言方便很多,比如我一个项目里 dart 后端只需要这样一个 Dockerfile:
    https://github.com/debuggerx01/dde_gesture_manager/blob/dev/api/Dockerfile
    就可以得到一个 10 几 MB 的镜像,服务跑起来内存占用也才 50MB 不到,可以说非常方便了,资源消耗也够低

    2. 语法常规,可以说几乎没有非常特立独行的概念和语法,几乎所有语法特性都是在其他语言中经过验证的,结果就是 dart 学起来曲线平滑、写起来非常舒服、代码表达能力和组织能力也相当不错,尤其是在有其他语言如 Java 系列、js 系列、Python 、Swift 经验以后。举几个例子:
    a.语法级的异步支持,不像原始的 java 一样像做点啥都需要开线程,结果各种多线程 bug ,开发时的心智负担低很多,性能还不差
    b. 单继承+mixin ,即提高了代码复用性和组织能力,又避免了多继承带来的各种问题
    c. 强类型,尤其是全面转向健全空安全之后,类型系统可以说达到了一个相当均衡的状态,该有的特性基本都有(抽象类、泛型等,GO ?),正常使用情况下很少出现包括 NPE 在内的类型错误(JS ?),而且类型代码书写的成本也不高,很少需要复杂的类型处理(TS ?)

    3. 还算不错的工具链和 IDE 支持,pub 依赖管理比 npm 等好用不少,dart format 格式化可以避免多人合作风格不一导致的代码差异和冲突,dart compile 就可以很方便的将源码编译成 js/可执行二进制程序 /jit 快照 /aot 快照,jetbrains 全系和 vsc 都可以安装 dart 插件获得相当稳定的 IDE 支持( Swift/XCode ?),还有内置的基于 web 和 ws 的 DevTools ,分析程序的运行性能也很方便

    4. 几乎没有平台依赖,平台支持足够广泛,而且几乎都可以支持大部分功能,不像某些语言,号称跨平台,实际上是和某一平台和生态强绑定,其他平台只有“core”支持( C#、Swift ?),发展前景高下立判

    5. 生态已经足够繁荣。这点可能很多人会不认同,会去和 Java 和 js 比,但是就我而言,想做的东西几乎都可以用它做了,例如:
    a. 前端,不用说,肯定就是 flutter ,这个方案可以覆盖除了小程序之外几乎所有的前端需求。可能有些人觉得 flutter 不行、不好用,我只能说可能是有些人和有些特定项目不适合 flutter 而已,或者是单纯的能力不足
    b. 后端,简单的需求用 dart 内置的 io 库就能解决差不多,复杂的我个人推荐“Angel3”这个框架,总的来说比较接近 Express.js ,后端开发常见的功能也都支持了,只要花点时间看看源码(很简单)完全可以满足一般的后端开发需求
    c. 工具脚本,这点得益于 dart 既可以解释执行也可以编译执行,就非常适合一些简单的工具开发。我在自己电脑上就会用 dart 写一些脚本,随时可以方便的修改使用;编译后可以直接放到手机的 Ternux 或者机顶盒路由器上运行,部署使用方便
    d. 各种三方库,基本都可以在 pub.dev 中找到,很多时候并不需要像很多以为的需要造很多轮子。印象比较深刻的是在移植一个 python 的算法到 dart 时,科学计算和信号处理这种相对冷门的库都已经有实现: https://www.debuggerx.com/2021/02/18/qrs-detector-for-flutter-in-dart/
    limiter
        39
    limiter  
       78 天前
    后端框架有啊,shelf ,https://github.com/sunlimiter/dart_api_service 我这边用 dart 写的后端项目,有兴趣可以看下
    whyrookie
        40
    whyrookie  
       78 天前
    @jiangzm #4 Jetpack Compose 也去掉了 xml ,我新的项目尝试了 Jetpack Compose 之后,发现写页面很快速,也非常直观。
    hellojay
        41
    hellojay  
       78 天前
    dart 的包管理、异步等等真的能感觉在吸收各家之长,写起来非常符合直觉。每次写 dart 我都感觉这个语言很「贼」,从其他平台语言中吸收了很多东西
    jamosLi
        42
    jamosLi  
       78 天前
    小十年了,还是要死不活的,能有几个十年?
    dcoder
        43
    dcoder  
       78 天前   ❤️ 1
    作为写过很多后端语言的人, 也用过一段时间 dart, 评价是: 垃圾
    语法是大杂烩. 而且 dart1, dart2 还有不小区别...
    再加上异步和异常处理, 执行流程很容易晕, debugger 打上断点还是看着晕
    属于典型的总体设计没个定数,没自信, 改来改去瞎折腾...
    再加上生态跟不上, 两年前用个 Redis Steam 都找不到好用的.
    哪个构架师要在后端组里推广 dart, 请把他拖出去枪毙 10 分钟.
    Al0rid4l
        44
    Al0rid4l  
       78 天前
    就写起来舒服而言, TS C# F# Kotlin 都比它舒服, 能做的事情来说 Kt 比它少个 iOS 但后端强太多, 总的来说如果不是有很强烈的客户端跨平台需求, 个人觉得没啥吸引力
    mejee
        45
    mejee  
       78 天前
    @jiangzm dart 本身是支持反射的,flutter 为了优化包体积和性能禁用了反射,所以在 fluuter 里反序列化很麻烦。最近在搞 flutter ,反序列化确实是太麻烦了
    mejee
        46
    mejee  
       78 天前
    dart 这个语言很多设计(语法糖层面的)确实用起来很爽,很多设计比如 null safe 都很爽。唯一不爽的感觉就是语法有点多(个人感受有点乱,虽然是因为没有认真的系统学,直接上手的)
    DOLLOR
        47
    DOLLOR  
       78 天前
    对我来说,dart 相比 JS 的好处就是工具链没 JS 那么复杂,相对统一,不像 JS 那样百花齐放。而且能编译二进制这点,很适合写一些小工具。但是语法这方面,感觉写起来还是不如 TS 舒服。
    所以,写一些命令行小工具可能会考虑用它,前端、后端都不考虑用。
    Tyanboot
        48
    Tyanboot  
       78 天前
    @murmur 给 Android 的 XML 加一个 CSS ( x
    HeapOverflow
        49
    HeapOverflow  
       78 天前 via iPhone
    Dart 的 async* 不能更好用
    shellwen
        50
    shellwen  
       78 天前 via Android
    Kotlin yes
    yazinnnn
        51
    yazinnnn  
       78 天前
    dart 的演化方向是 js->java->ocaml

    不知道终极目标是 lisp 还是 haskell
    montaro2017
        52
    montaro2017  
       78 天前
    @debuggerx #38 MPFlutter 了解一下,支持小程序
    Helsing
        53
    Helsing  
       78 天前 via iPhone
    @jiangzm #4 本来就是为了性能才放弃 xml 的,不太可能回去了
    debuggerx
        54
    debuggerx  
       78 天前
    @montaro2017 MPFlutter 是可以用写 flutter 的方式开发小程序,但是几乎没法复用代码,要支持小程序,就只能用最基础的 widgets 库和 MPFlutter 提供的组件,flutter 内置的 Material 和 Cupertino ,以及大量社区的库都没法用了,所以几乎必然是小程序一套代码,其他前端平台一套代码,这样的话我还不如用其他更成熟的方案去写小程序,反正都是重做。
    虽然我觉得 Flueer/dart 很好,但也不无脑吹它可以做任何事,我的观点一直是根据需求选合适的方案。开发小程序我个人大概率会用 Taro ,对这个方案也还算熟悉,开发体验也还可以
    DCELL
        55
    DCELL  
       78 天前
    我能说 Swift 吊打 Dart 么...
    虽然生态只能开发 iOS
    dd991
        56
    dd991  
       78 天前
    Flutter 想法和初衷都是好的,但距离复杂问题,ios android 上的细节,1 像素问题,等,还是需要一段距离要走的。
    个人开发者或者小型项目比较适合
    另外一个就是你必须有原生的基础,才能写的方便点
    zqlcrow
        57
    zqlcrow  
       78 天前
    某位 5 年+的 flutter 开发经验?

    意味着 18 年 1 月就开始进行 flutter 开发。

    理论上没问题,实际上有点怀疑。
    MeteorCat
        58
    MeteorCat  
       78 天前 via Android
    我觉得 kotlin 都比他有前途
    debuggerx
        59
    debuggerx  
       78 天前   ❤️ 4
    @zqlcrow 应该是在说我对吧~
    可以看我自己的回顾总结:
    https://www.debuggerx.com/2020/12/29/these-years-about-flutter-and-me/

    ```
    2017 年 12 月:
    为公司规划中的新项目调研跨平台方案可行性,在尝试了包括 React Native 、ionic 、Cordova 、Cordova 、Weex 等在内几乎当时所有流行的方案之后,竟没有一个能够让人满意的。直到发现了当时还在 alpha 版的 Flutter ,被其优秀的开发体验、精妙的架构设计和惊艳的流畅度表现所折服,于是开始正式研究该框架。
    ```

    一个佐证是,我写的 flutter 的 json 解析工具的初版提交日期:
    https://github.com/debuggerx01/JSONFormat4Flutter/commit/e234c5bc77c84017a77fe79a969e9b24d6eb4710
    FreshOldMan
        60
    FreshOldMan  
       78 天前
    新语言的生态不行,有待成长
    Removable
        61
    Removable  
       78 天前 via iPhone
    @ericgui Xamarin 或者 maui 了解一下
    zqlcrow
        62
    zqlcrow  
       78 天前
    @debuggerx 我错了
    TomVista
        63
    TomVista  
       77 天前
    react 和 vue 告诉我们,对于前端, 面向对象 / class like 是糟粕,已被放弃 .dog
    wdwwtzy
        65
    wdwwtzy  
       77 天前 via iPhone
    @debuggerx 没看到什么亮点啊,都是常见的语法。
    另外有些地方还 var 和具体类型混用了,是不是都用 var 好一些
    debuggerx
        66
    debuggerx  
       77 天前
    @wdwwtzy 我觉得没什么亮点就是优点,上面有解释,我喜欢这个 Angel3 这个 dart 的后端框架就是因为觉得它和 Express 很像,写起来有熟悉的感觉
    sjhhjx0122
        67
    sjhhjx0122  
       77 天前   ❤️ 4
    @TomVista angular webcomponent 告诉我们,对于前端,面向对象也是瑰宝
    serco
        68
    serco  
       77 天前
    要不是 flutter, Dart 现在应该坟头草都三米高了。。。

    只能说再好再烂的语言都需要一个流行的场景
    simo
        69
    simo  
       77 天前
    多学几个语言就好了,不同场景利用不同语言优势,甚至组合开发很正常
    yuankui
        70
    yuankui  
       77 天前
    dart 的 json 序列化就要把人恶心死。
    mxT52CRuqR6o5
        71
    mxT52CRuqR6o5  
       77 天前 via Android
    @TomVista 主要是 js 的 class 太羸弱了,dart 里用 class 描述组件其实还好
    ajaxpost
        72
    ajaxpost  
       77 天前
    dart 有用起来很爽的持久层框架吗
    ericgui
        73
    ericgui  
    OP
       77 天前
    @yuankui 任何一个语言都有恶心的地方吧
    XCFOX
        74
    XCFOX  
       77 天前
    同样是谷歌的语言,Dart 比 go 要现代得多。
    要是谷歌当初选择在服务端上发力 Dart 而不是 go 就好了
    kingzeus
        75
    kingzeus  
       77 天前
    语言从来不是重点,相对而言,文档完备程度 /开发环境的友好度 更为重要

    从产品层面来说,大部分情况下,都是根据业务场景去选择实现方案,包括选择开发语言的。小部分情况也是基于现有开发人员的技能来选择开发语言的,几乎就没有因为语言特性来选择产品开发语言的。

    语言的很多特性是可以不用的,比如 C++有多重继承,在项目上完全可以忽略的,也不会影响产品性能。所以纯粹讨论语言特性没啥意义,大部分其实并不会被使用。
    MakHoCheung
        76
    MakHoCheung  
       77 天前
    @DCELL Swift 我心目中第一的现代语言
    a62527776a
        77
    a62527776a  
       77 天前
    资本不会考虑这些
    chrisia
        78
    chrisia  
       77 天前
    kotlin 不是无敌?
    ericgui
        79
    ericgui  
    OP
       77 天前
    @a62527776a 资本会考虑跨平台的,毕竟是一套代码复用

    不然 swift 再牛逼,也写不了 android
    不然 kotlin 再牛逼,也写不了 ios

    多招一个人,就是多一份薪水
    CaffreySun
        80
    CaffreySun  
       77 天前
    @jiangzm xml 估计回不去了,最近客户端新出的 UI 开发技术都是用代码进行声明式布局( SwiftUI 、Jetpack Compose 、Flutter ),我认为一个很重要的原因是代码声明式布局要比 XML 简单,学习 xml+操作 xml 的语言 的成本比只学习一门 dart/swift/kotlin 语言要高。
    silvernoo
        81
    silvernoo  
       77 天前
    dart 确实挺舒服,尤其已经熟练了 Java 以后
    janxin
        82
    janxin  
       77 天前
    没什么用,前端同类竞争中胜利者是 TypeScript ,本质上还是 TS 不至于对 JavaScript 改变太多东西。

    现在 dart 的很多特性发展方向都去支持 Flutter 了。Dart 也有后端框架,只是 CRUD 自然没问题,不过后端生态还是会更复杂一点。目前 Dart 的东西更容易从前端方面移植,后端生态也要看 FFI 的成熟度更高一点之后才好处理。
    Orangeee
        83
    Orangeee  
       77 天前
    2023 年 6 月左右,Dart3 要发布了。
    zhuweiyou
        84
    zhuweiyou  
       77 天前
    已经放弃 vscode 了,还是 idea 天下第一
    gujuji
        85
    gujuji  
       77 天前 via iPhone
    @jiangzm 是的,其实是完全可以转成 xml 但是官方不处理
    bobtwain
        86
    bobtwain  
       77 天前   ❤️ 1
    C#都可以做到
    dbskcnc
        87
    dbskcnc  
       77 天前 via Android
    明年这个时候会更合适, 目前还差点意思, 不过后端还是算了吧, 能搞定前端就是很大的成绩了
    KENNHI
        88
    KENNHI  
       77 天前 via Android
    @CaffreySun 不是简单与否的问题,主要是写 xml 太痛苦了,看到 xml 就想吐。spring boot 流行的最大原因就是不用写 xml 配置文件,现在 Java 程序员宁可在 Java 里面用标注写配置也不愿意碰 xml
    chengxiao
        89
    chengxiao  
       77 天前
    dart 这套娃程度确定简洁么.....
    BBBOND
        90
    BBBOND  
       76 天前 via Android
    @murmur 同意,我从 flutter 出来就在等神人出一个 dartx 了
    ipcjs
        91
    ipcjs  
       76 天前
    前端有 TS ,后端有 Java/Go ,跨桌面端有 Electron ,小程序有 Taro ,Android 有 Compose ,iOS 有 SwiftUI
    只有跨移动端,才是 Flutter/Dart 的应用场景,不要拿着锤子看啥都像钉子😓️
    Frank9621
        92
    Frank9621  
       75 天前 via Android
    dart 用的不多,但是可选形参真的太舒服太丝滑了,特别是跟 go 这种连参数默认值都不支持的语言比起来
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   4588 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 01:49 · PVG 09:49 · LAX 18:49 · JFK 21:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.