holydancer
V2EX  ›  Swift

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

  •  
  •   holydancer · Feb 23, 2022 · 10718 views
    This topic created in 1721 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

    不过闭包的“无数种”形式不都是同一种形式的不断简化么...知其所以然就不会有困惑了..233
    jackbrother
    jackbrother
    Feb 24, 2022❤️1
    65
    @nigulasida 如果明年不死怎么办?
    chisj
    chisj
    Feb 24, 2022
    66
    喵神都说学不动了吗?😂😂
    nigulasida
    nigulasida
    Feb 24, 2022
    67
    @jackbrother 今年 iOS 岗位大面积下降,不足上一年的十分之一
    caisanli
    caisanli
    Feb 24, 2022 via iPhone
    68
    @powerman 哈哈哈给个 swiftUI 的文档地址
    jackbrother
    jackbrother
    Feb 24, 2022
    69
    @nigulasida 拿出数据源来
    SolarAA
    SolarAA
    Feb 24, 2022
    70
    @Mohanson 大佬写的太好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4454 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 174ms · UTC 03:42 · PVG 11:42 · LAX 19:42 · JFK 22:42
    ♥ Do have faith in what you're doing.