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

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

  •  
  •   holydancer · 2022-02-23 10:50:45 +08:00 · 8969 次点击
    这是一个创建于 1041 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

    不过闭包的“无数种”形式不都是同一种形式的不断简化么...知其所以然就不会有困惑了..233
    jackbrother
        65
    jackbrother  
       2022-02-24 10:37:25 +08:00   ❤️ 1
    @nigulasida 如果明年不死怎么办?
    chisj
        66
    chisj  
       2022-02-24 11:12:19 +08:00
    喵神都说学不动了吗?😂😂
    nigulasida
        67
    nigulasida  
       2022-02-24 11:47:01 +08:00
    @jackbrother 今年 iOS 岗位大面积下降,不足上一年的十分之一
    caisanli
        68
    caisanli  
       2022-02-24 13:46:38 +08:00 via iPhone
    @powerman 哈哈哈给个 swiftUI 的文档地址
    jackbrother
        69
    jackbrother  
       2022-02-24 18:26:44 +08:00
    @nigulasida 拿出数据源来
    SolarAA
        70
    SolarAA  
       2022-02-24 23:13:35 +08:00
    @Mohanson 大佬写的太好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1183 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.