swift和java_像 Swift 和 Kotlin 这种语法风格叫什么,和 Java 比有哪些优势?

类型后置

swift和kt都选择了类型声明后置,java和dart则是前置类型

你说的类型推导,这个类型前置的时候也可以做到,比如java现在也有var的局部类型推导,你也可以在java里面用var s = "string";来定义一个局部变量

最近使用swift,dart这些的感觉,有这两个特性,是java可能永远都不会加上去的,但是kt有扩展函数,在不改动原有结构声明的前提下,扩展出新的方法,用这种方式可以在多层继承的时候,依次实现不同的protocol/interface这些

空安全,就是声明后面那个?,这样在编译时候可以帮你检查哪里不为空,这个主要是有breaking changes,会对原有代码造成影响,原来缺省的都是?,现在需要标记?,那么原来的代码都需要修改,dart准备在年底搞一个大的breaking change出来,就是空安全,这么大的改动,先不说有没有需求,就这么大的改动,java为了兼容性,是不太可能加进去的

除此之外,像gc这种,swift通过arc来实现类似效果,虽然需要用户手动标记,这个对于服务器端开发是不利的,一不小心漏过去,那就比较麻烦,相比之下java的gc不需要做任何标记,更无脑一点

其他的,比如aot,swift只能编译成native,没有jit模式,java等有,java现在也有aot了

从应用场景上看,swift更偏向客户端,gui什么都做得相对舒服,你想整合metal之类的工具,就很容易,基本上官方都帮你搞定了,但是服务器端的功能,swift做了一个sswg,swift server work group,那这一块,显然是java要好太多,java的maven,gradle等工具都非常健全了,还有数据库,jdbc之类的,那都是你随随便便就能找到无数的例子的东西

总体而言,java更偏向服务器端,网络,数据库等应用都相对方便许多,但是java的gui相对较弱,虽然有gluon在做,但是java要在客户端搞gui的跨平台,需要的工作比swift要多太多了,比如在win上要对接directx,在mac上要对接metal等,但是swift做客户端就容易很多,xcode里面你要用metal,sprite kit什么,直接用向导就能生成demo代码,你改就行了,但是如果你打算把swift当成java来用,那么相应需要付出的努力就要多太多,sswg上也慢慢有了网络,数据库连接等库,但是比起maven central上上千万的依赖,那还是差不少,甚至我感觉苹果的依赖,还没dart/flutter的那个pub热门,pub上依赖已经不少了,你开发的时候,都希望利用上已经做好的工具来节省你开发的时间和精力嘛,所以在生态上,这个差异是你需要考虑的

java并不是不能做客户端,swift也不是不能做服务器端,只是当你真这么去做的时候,需要付出的努力,那是要多太多了,写一个hello world跟真正干活,那还是不一样的,所以互为备胎是一个比较好的选择,就比如服务器端你用java,也可以顺带看看swift的sswg,反过来,客户端你用swift,也可以看看java的动作,javafx那些

最后java跟swift也在互相学习,java是公开承认借鉴了swift,而swift的一些库的作者,本身就是java同类型库的作者,比如做swift-nio的那个norman,其实就是netty的主要开发人员,所以swift nio公然在主页上写着:It's like Netty, but written for Swift. 苹果的一些组,也在用java的工具开发,比如norman在facebook访问的时候,就说到用netty还有vert.x的一些经验

java社区也一直有争议,就是希望分裂成客户端java和服务器端java,毕竟在场景上下文发生改变的时候,java的一些取舍也会发生改变,但是一直没有同意,从客户端的应用上看,其实dart,kotlin什么也多多少少在借鉴swift的经验,你看年底dart就要上空安全了

反正这些东西都不过是工具而已,你会一个,再看看其他几个,其实上手很快的,我们就是对实习生做这种要求,会java?很好,swift,dart,kotlin随便看看就开始写吧,反正都差不多,没啥神秘的,不要去神话这些东西,use it or lose it

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值