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

Swift 的设计是不是用力过猛了

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

    看一些第三方库,眼花缭乱,啥写法都有。 论闭包的无数种实现形式。 语法糖的设计是不是太多了,各种各样,用力过猛并不利于一门新语言的推广啊。。 还是说,我太菜了?

    70 条回复    2022-02-24 23:13:35 +08:00
    Leonard
        1
    Leonard  
       131 天前
    语法糖是真的多,感觉有点没必要
    991894172
        2
    991894172  
       131 天前
    我觉得自己入门了 Swift ,可是又觉得又很多语法糖的写法,感觉越来越复杂了
    anonydmer
        3
    anonydmer  
       131 天前
    语言特性多,语法糖也多;学起来是真费劲不说看别人代码也费劲
    jasonchen168
        4
    jasonchen168  
       131 天前
    确实有点,几个月不写,感觉自己都看不懂了。。。
    Kasumi20
        5
    Kasumi20  
       131 天前
    Java 请
    janxin
        6
    janxin  
       131 天前   ❤️ 5
    糖少了你们嫌特性不足,过于原始
    糖多了你们嫌太甜了,学起来太难

    说的是谁大家都有数吧(狗头保命
    yuancoder
        7
    yuancoder  
       131 天前
    我的理解是这么设计主要是为了简化 ui 的写法,确实变得更复杂了
    finab
        8
    finab  
       131 天前
    但写起来爽啊
    cmdOptionKana
        9
    cmdOptionKana  
       131 天前
    @janxin 大道至简🐶
    aababc
        10
    aababc  
       131 天前
    @janxin 感觉这个事不能走极端,需要更好的权衡,不过最好的还是一种解决方案最好只有一种实现方式,太灵活的东西,后期看真的脑子疼!
    Lin0936
        11
    Lin0936  
       131 天前
    swift 用力过猛的话
    kotlin 就是已经扯着蛋了
    xtinput
        12
    xtinput  
       131 天前
    那也只是三方库在秀操作,就拿 rx 来说,好好的 swift 硬是被它搞成了另外一个语言!维护的人估计没几个不骂的,但用的还是那么多···· 苹果在强化对象类型安全,而它硬把各种实体类再装一个箱子。定位问题的时候跑遍整个项目都不一定能找到
    yazinnnn
        13
    yazinnnn  
       131 天前
    往好处想,会了 swift 就等于会了 kotlin / c# / f# / typescript 了,不也挺好吗
    xtinput
        14
    xtinput  
       131 天前
    @aababc 不是 swift 用力过猛,是三方用力过猛,秀操作
    aababc
        15
    aababc  
       131 天前
    @xtinput 作为一个后端程序员,对 swift 完全不了解,感觉下次评论需要慎重了
    Jooooooooo
        16
    Jooooooooo  
       131 天前
    又要说了, 一种功能只有一种写法是绝对优点. 有一百种写法是不是要学一百遍.
    jackbrother
        17
    jackbrother  
       131 天前
    swift 的字符串操作有多繁琐,不用我说了吧 QAQ
    js8510
        18
    js8510  
       131 天前
    是的。尤其是贵司的代码。。属于后端,偶尔(一年一两次)需要写 react.js 。每次动手前都要学新轮子。反正对于我,大大降低了我的开发效率。。最近学的新轮子是: https://relay.dev/
    Chad0000
        19
    Chad0000  
       131 天前
    Swift 的版本兼容问题,也不用我多说了吧。作为一个新入门者,头一次遇到网上搜索的写法不对,然后才发现版本差距这么大。对于一个写了十多年 C#的人来说不知如何吐槽。
    MX123
        20
    MX123  
       131 天前
    我就想知道,int 为什么不能和 double 做运算!
    Leviathann
        21
    Leviathann  
       131 天前
    @Lin0936 kotlin 哪有 swift 复杂
    kotlin 只有末尾 lambda 可以提出来,swift 好像每个都能提出来
    kotlin 类型系统大概就是 java 那套,融合一些 c#的简写( in out )
    swift 的类型系统要更复杂
    HeapOverflow
        22
    HeapOverflow  
       131 天前   ❤️ 2
    Dart 就是我心目中的理想语言,语法糖不多不少刚刚好,多线程有 future async await 还自带 stream 方便 reactive programming ,方法参数的语法灵活让代码更加可读,类型 constructor 可以跟随 assert 对检测参数合法性,等等
    agagega
        23
    agagega  
       131 天前 via iPhone   ❤️ 1
    然而 Swift 的理念之一还是 keep things explicit ,花样多不代表坑就多,只能说这几年确实用力猛了点。

    @jackbrother
    Swift 的字符串操作繁琐是因为字符串涉及到不定长编码,本来就该这样,Rust 的字符串也不能直接用下标访问字符。
    debuggerx
        24
    debuggerx  
       131 天前
    @HeapOverflow +1
    个人向语言喜好 as3 dart ts python es6 go es5 c java kt shell swift php c++ oc
    jackbrother
        25
    jackbrother  
       131 天前
    @agagega 但是大部分人基本上碰不到不定长编码
    icyalala
        26
    icyalala  
       131 天前
    @jackbrother Swift 、Rust 字符串底层都是 UTF-8 存储的,中英混合那就算是不定长编码了。
    要是像 Java 等旧些语言那样,用 UTF-16 编码,那碰到个 emoji 也算不定长的了。
    除非都用 UTF-32 ,才能直接用下标。
    Building
        27
    Building  
       131 天前 via iPhone
    你说它不智能吧: numbers.sort { < }
    // 遵循对比协议,所以一个符号就可以了

    你说它智能吧: let a = 2, let b = a + 1.0
    // 错误! a 被推断为整型,请改为 let a: Float = 2
    ksco
        28
    ksco  
       131 天前
    Swift 之父 Chris Lattner 已经离开 Swift 核心团队了。
    a4854857
        29
    a4854857  
       131 天前
    害.我还以为你说 switch 设计很超前大家都抄这种游戏机呢
    MakHoCheung
        30
    MakHoCheung  
       131 天前
    是写的人喜欢龙飞凤舞,Kotlin 也一样可以龙飞凤舞
    BenX
        31
    BenX  
       131 天前 via Android
    不是一两天的问题了,就是语法糖花活太多,不玩 Swift 了
    xtinput
        32
    xtinput  
       131 天前
    @Chad0000 那是直接没稳定,现在没这个问题了

    @MakHoCheung 是的,我感觉也是因为写的人个人爱好

    @Building 类型安全,系统只提供了最基本的,要不报错自己扩展实现类型兼容就 OK 了
    lpvekk
        33
    lpvekk  
       131 天前
    创始人都 goodbye 了 确实 swift 被一群菜鸡搞得越来越烂
    Ryanxxx
        34
    Ryanxxx  
       131 天前
    各位老哥能举点例子吗?就是贴代码片段的那种
    HeapOverflow
        35
    HeapOverflow  
       131 天前 via iPhone
    @Ryanxxx 你可以网上查一查 swift 闭包写法大全,可以出书了
    Ryanxxx
        36
    Ryanxxx  
       131 天前
    @HeapOverflow 好的,谢谢老哥
    okakuyang
        37
    okakuyang  
       131 天前
    swift 不就有一个多尾闭包,我觉得很爽啊。
    wanguorui123
        38
    wanguorui123  
       131 天前
    论过度设计
    zjddp
        39
    zjddp  
       131 天前
    Use Swift, Learn EVERY Year. ;(
    Alexc
        40
    Alexc  
       131 天前
    我做 Android 的,没用过 swift ,但我感觉 kotlin 语法糖太多了,花里胡哨的,这样会让人觉得这门语言很复杂。
    chiaf
        41
    chiaf  
       131 天前
    @okakuyang 很爽➕1
    每天都能学到新东西😂
    huage2580
        42
    huage2580  
       131 天前
    这时候就要夸 Java
    BrettD
        43
    BrettD  
       131 天前 via iPhone
    @jackbrother UTF-8 就是不定长编码
    Bijiabo
        44
    Bijiabo  
       131 天前
    感觉过于花里胡哨... ...
    Mohanson
        45
    Mohanson  
       131 天前   ❤️ 18
    如果你站在编程语言的开发者角度看问题, 你会发现给一门现成的语言加语法糖的开发工作是非常小的: 加语言糖属于编程语言的前端的前端, 只涉及到 parser 和 tokenizer 两个初学者模块, 属于 "简单, 代码成果容易展现, 同时容易在社区中吹牛" 的工作.

    相反, 如果你去钻研如何提升编译速度, 或者进行后端优化提升运行性能, 这部分工作通常较难, 花费更多时间, 同时在社区中不容易被认可: 对于大多数用这门语言的人来说他看不懂也不是很在乎.

    所以很多情况下随着一门语言的发展, 这个语言的开发团队中会混入越来越多的 "语法糖开发者", 而一旦创始人控制力变弱, 成为所谓的 "社区性语言", 那么这门语言就会不可避免的往语法糖的路上越走越远(很多社区中的人都是带着目的参与项目的, 为了刷 PR 美化简历, 他们只在乎自己是否能成为这个项目的贡献者, 贡献多少个 PR 和代码行数, 所以就专挑最简单的事情做, 对于一门语言来说语法糖毫无疑问是最简单的工作).
    mineralsalt
        46
    mineralsalt  
       131 天前
    @Mohanson 所以说 java 被甲骨文控制着, 这么多年都没烂, 也是有功劳的
    Features
        47
    Features  
       131 天前
    多得过 es6++吗?
    Building
        48
    Building  
       131 天前 via iPhone
    @Mohanson Swift 光是几个简单数做运算,都能把 CPU 卡死的操作……Swift 5 还能遇到,全靠 CPU 硬撑,已经不敢让编译器算了,老老实实自己算好
    dusu
        49
    dusu  
       130 天前 via iPhone
    @HeapOverflow 近些年写的语言里 心目中也是 dart 排第一 写起来真心舒服
    7gugu
        50
    7gugu  
       130 天前 via iPhone
    是的,入门很困惑,各种写法各种简写
    7gugu
        51
    7gugu  
       130 天前 via iPhone
    @Features 比 es6 好吧,至少作为一个初学者,js 还是有一套古老且通用的写法,但 swift 感觉一大堆特性,绕着绕着就晕了😂
    MakHoCheung
        52
    MakHoCheung  
       130 天前
    @mineralsalt Java 可不是 Oracle 说了算的,人家有个 JCP ,通过投票来决定的 Java 的走向
    nigulasida
        53
    nigulasida  
       130 天前   ❤️ 1
    iOS 开发这个行业,最迟到明年必死。
    这个行业死了,swift 也基本歇菜了。
    caisanli
        54
    caisanli  
       130 天前 via iPhone
    最近新学 swift 看到闭包那节 就想这么多种写法 好接手吗
    powerman
        55
    powerman  
       130 天前
    @caisanli 我光是看 swiftUI 的文档 就折腾了半天 那个尾随闭包有好几种写法...
    x1aoYao
        56
    x1aoYao  
       130 天前
    @ksco 是的。昨天看到的,Chris Lattner 表示离开的导火索是核心团队其他人对他的嘲讽。表示可惜
    Cbdy
        57
    Cbdy  
       130 天前 via Android
    和 OC 完全是两个极端
    x1aoYao
        58
    x1aoYao  
       130 天前
    我曾一度认为,Swift 就是我理想中的语言。
    目前还是期待下 Swift6 的 ownership 吧,现在的 ARC 以及 CoW 全都要原子操作,性能实在是费拉不堪。
    独占访问内存设计不好用还降低性能。
    x1aoYao
        59
    x1aoYao  
       130 天前
    @MakHoCheung 我感觉 Java 都比 Swift 开放,Swift 几乎就是苹果的语言。甚至还限制 Swift 在 Apple 平台静态链接标准库。
    wupher
        60
    wupher  
       130 天前   ❤️ 1
    作者也这么想,可惜最终离开了

    https://instant.lvv2.com/html/52ae57c594a25b355bb8723ddbe80a9b.html

    他关于语法糖 的比喻我倒是蛮赞同的:

    Lattner 认为一门编程语言的主要功能相当于盖房子时的“砖”,语法糖相当于填砖缝的“灰浆”。如果房子主体都盖好了去填缝没啥问题。如果砖还没摆全就先抹了大量的浆,那整个房子成了用浆盖起来的,结构不会牢固,以后再想摆砖头也找不到合适的地放了。
    x1aoYao
        61
    x1aoYao  
       130 天前
    @yuancoder 是的,Swift 很多设计都是为了方便写 UI ,比如属性观察器,作为一个后端我就觉得这些语法糖花里胡哨的[doge:]
    dadachen1997
        62
    dadachen1997  
       130 天前
    @nigulasida 那以后用啥开发 iOS app 呢? hybrid 的 RN 或者 flutter ?
    xz410236056
        63
    xz410236056  
       130 天前
    swift 我觉得比较麻烦的是关键字是真的多。。。当然这些扩展功能你都可以不用,他们设计原则就是老少咸宜,你需求简单,就用基本功能,需要高级功能他也支持,这样不是很好吗。
    onevcat
        64
    onevcat  
       130 天前   ❤️ 2
    是的!学不动了!😂

    不过闭包的“无数种”形式不都是同一种形式的不断简化么...知其所以然就不会有困惑了..233
    jackbrother
        65
    jackbrother  
       130 天前   ❤️ 1
    @nigulasida 如果明年不死怎么办?
    chisj
        66
    chisj  
       130 天前
    喵神都说学不动了吗?😂😂
    nigulasida
        67
    nigulasida  
       130 天前
    @jackbrother 今年 iOS 岗位大面积下降,不足上一年的十分之一
    caisanli
        68
    caisanli  
       130 天前 via iPhone
    @powerman 哈哈哈给个 swiftUI 的文档地址
    jackbrother
        69
    jackbrother  
       129 天前
    @nigulasida 拿出数据源来
    SolarAA
        70
    SolarAA  
       129 天前
    @Mohanson 大佬写的太好了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4021 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 139ms · UTC 09:48 · PVG 17:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.