最近我们把安卓项目的开发语言从Java切换到了Kotlin。其中自然有许多故事可讲,首先要讲的就是,为什么要使用新语言,为什么选择了Kotlin。
如果有时间,下次再来讲实践Kotlin的感受如何(很爽!!),常见的坑有哪些。
摘要本次分享主要回答了这么几个问题:一、为什么要学习和使用新的语言?二、好几种运行于jvm上的语言,为什么选择了Kotlin?三、从Java到Kotlin,我们经历了哪几个阶段?
Java不够好,而且发展太慢存在即是合理,虽然我接下来要吐槽Java不够好,但是,不妨碍学习和使用Java的人依然非常多,不妨碍Java继续蓬勃发展。Java爱好者们不喜欢就可以不用看下去了。
在吐槽前,我还是先说一下我的语言学习/使用经历,稍稍证明一下,我还是算的上经验丰富。
我最早是写C#(3年),当时写网站,对网页相关技术也非常熟(相对于现在来说,早就落伍了)。
后来转了Java做安卓研发(年),见识了团队中的高手(20年以上编程经验)写代码,从此对优秀的代码有了不一样的认识,直到现在都还在不断的提升自己。
除了做安卓研发,还用Python+Django框架为公司内部写了一个小网站。
还有一年时间由于公司人手不足,转做iOS,用了一年的Objective-C。
后来,为了研究ReactNative,又花时间深入学习了Javascript(以前做网页开发的时候就有一些Javascript经验)。可惜ReactNative并没有在项目实践中用上。
其他一些学过但用的少的语言就不讲了。
接下来就开始吐槽Java。
缺乏优秀的类的属性设计通俗易懂点,就是getter/setter的处理。看如下的代码:
publicclassPerson{
privateStirngname;
publicgetName(){returnname;}
publicsetName(Stringname){this.name=name;}
}
你无法想象Java代码中有多少这样毫无意义的getter/setter代码。但你还是得要它们。
就连Objcetive-C这种公认语法怪异的语言,对属性的设计都比Java好很多。
解决方案有很多,最简单的办法就是在编译器里面加一点小戏法就搞定了:
当声明一个属性的时候,编译器在编译的时候自动生成相应的getter/setter方法。而你只有在需要的时候,才去定义自己的getter/setter。
迟来的lambdaC#在09年左右加入的LINQ,超级方便的集合操作有木有!
09年,09年!
然后看看前两年Java8才出个lambda,然后增强了集合相关的功能。
而且更扯淡的是,现在安卓开发都还用不上Java8。如果要想在安卓开发中用上Java8(的一个子集),你要完全放弃低版本的安卓用户,或者使用第三方库。
Java的发展实在太慢总的来说,Java的发展实在是太慢了。其中原因非常的多,比如历史包袱大,比如Oracle,但最终的事实就是:发展实在太慢了。
但Java现在还活着,而且还活的很好,自然有它的优势。一是用Java的人多,生态圈好。
二是……
屌屌的JVM但是,但是,不得不说,Java最屌的早就不是Java语言本身了,而是JVM。
虽然我依然想吐槽JVM吃内存厉害的不像话。但是,它真的很屌。广大程序员早已经用实际行动证明了这一点。
围绕JVM已经发展出了不少的新语言,最优秀,最广为人知的有:Scala,Groovy,Closure,Kotlin
这些语言都可以编译成Java的中间字节码,运行于JVM上面。
而且这些语言都有非常高的流行度。其中Kotlin是流行度最低的。那为什么偏偏选中了Kotlin?
Scala的设计核心是函数式编程,而且据说实践的情况是,有些从Java切换到了Scala之后,一年之后,并没有实际效率的提升。原因是:这个语言太复杂了,不太好掌握。我记得有次和一位前辈(
润)聊过,提到Scala中下划线的用法非常之多。多到什么程度呢?网上有很多专门关于Scala下划线的疑问,以及很多专门总结下划线使用的博客。Groovy的设计主要是想成为一个脚本语言。而且还有一个GroovyonRails的项目,现在怎么样了我也没去白癜风终于治好了白癜风治疗权威医院