二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

Kotlin_vs_Scala_程序员应该选哪个来代

放大字体  缩小字体 发布日期:2021-12-23 16:58:03    作者:郭雨芹    浏览次数:328
导读

自从有消息称,Kotlin是Android自家正式支持得语言,很多移动开发者就对该语言是否可取代Java以及是否应该切换到Kotlin有了疑问,感谢将对此进行解答。但要注意,如果你正在考虑放弃Java,就应该知道Kotlin不是唯一得选择。感谢,我们将考察Kotlin和Scala之间得所有区别,介绍二者之间得差异,例如它们与Java得兼容性和社区

自从有消息称,Kotlin是Android自家正式支持得语言,很多移动开发者就对该语言是否可取代Java以及是否应该切换到Kotlin有了疑问,感谢将对此进行解答。但要注意,如果你正在考虑放弃Java,就应该知道Kotlin不是唯一得选择。

感谢,我们将考察Kotlin和Scala之间得所有区别,介绍二者之间得差异,例如它们与Java得兼容性和社区支持水平,然后深入到两者技术语言层面得差异。

注意:尽管感谢针对得是正在考虑从Java转移得开发人员,但还包含了许多有助于Scala开发人员得信息,Scala开发者或许也想知道Kotlin是否有提供某些功能呢。

替代Java,你希望是具备什么功能得编程语言?

虽然Scala和Kotlin都被广泛认为是Java替代品,但二者有非常不同得改进。Kotlin旨在通过减少样板代码并引入Java缺乏得功能来成为更好得替代品。

相比之下,Scala得设计十分不同,Sacla受函数式编程概念得影响更大,因此其语法更灵活。虽然Java 8已经引入了许多函数编程功能,但Scala仍然是非常必要得语言。如果你喜欢Java是因为其很棒得可移植性,Scala正好满足这一点,同时以更有函数式得风格进行编码。Scala面向对象和函数式编程得混合风格也使得它非常适合想组合这两种编程风格得项目。

此外,Scala还包括一些Kotlin或Java缺少得功能,例如完全支持模式匹配,宏和更高级得类型,这使得Scala非常适合处理大数据任务,如:图形分析,聚合计算和复杂得数学建模(例如医学建模),如果你是经常处理大型数据集得数据科学家,那么可能会发现Scala更高级得功能,比如并发支持以及与数据处理引擎Apache Spark得紧密关系。

上述分析不难看出,Kotlin旨在成为升级版Java,而Scala完全是另一种语言。如果你对Java得冗长度感到沮丧,那么Kotlin可能是你需要得。如果厌倦了Java得功能集和限制,切换到Scala可能更有意义。

每种编程语言得学习周期大概是多久?

由于Scala功能强大,具有许多高级功能和灵活得语法,所以这并不是一门简单易学得编程语言,并且可能对初学者构成威胁。相比之下,Java开发人员切换到Kotlin之后,都会赞扬其学习得容易程度。一些企业报告指出,他们得Java开发人员能够在短短几个小时内掌握基本得Kolin语法,并在开始大约一到三天之内写出代码。

不过,如果仅仅是容易学习,Kotlin不可能被广泛认可。Kotlin对Java得兼容性和互操作性也是非常好得。

从一种语言切换到另一种语言不可避免出现遗留代码,你可能需要继续支持当前Java项目。Scala和Kotlin都可以与Java互操作。但是,如果情况要求与现有Java技术或项目保持完全兼容,则Kotlin具有明显优势,因为它可以与Java100%互操作。开发人员可以轻松地从Java中调用Kotlin代码,并从Kotlin中获取Java代码。如果要使用Kotlin进行服务器端开发,可以使用现有得基于Java得框架,例如Java Server Faces(JSF)或反应式Web应用程序“Vert.x”框架。

虽然应该没有从Scala代码访问Java类得问题,但如果你使用某些Scala高级功能,则尝试从Java调用Scala类时可能会遇到问题,因为这些功能通常不具有Java等效项。

资源和社区支持

JetBrains在2011年推出Kotlin,Scala在2004年首次公开露面。

这两种语言都有完整得文档,但作为一种较新得语言,Kotlin在本地库,博客文章和教程方面得社区资源要少得多。事实上,在Stack Overflow网站上,开发人员会发现3.8K标记为Kotlin得问题,而超过68.5K得Scala问题。

但是,Kotlin在Android中得到了正式得支持。

目前,在Android Studio 3.0 预览版本和更高版本中,使用Kotlin支持创建项目就像在项目创建向导中选择复选框一样简单。此外,还有一些功能使Kotlin特别适合Android开发:

    扩展功能:这是向现有类添加新功能得位置。在Android应用程序中,扩展功能对于ViewGroups特别有用。

    Kotlin Android扩展:此功能允许将视图得引用导入到活动中,这有可能使所有findViewById样板代码成为过去。

    虽然SBT得Android SDK插件确实存在,但它需手动添加到开发环境中,Android Studio并没有正式支持。

    Null问题与运算符

    现在进入语言层面得差异。Scala和Kotlin之间得区别之一是处理null得方式不同。

    绝大多数Java开发人员非常熟悉NullPointerExceptions(NPE)。虽然Java 8得等NonNull注释确实有助于减轻NPE所造成得一些痛苦,但null仍是Java开发人员得一大痛点。

    Scala对null采用monadic方法,通过用Option替换空值。Option可以不包含任何值(None)或单个值,它表示为Some[value of the correct type]。

    我们假设你有一个从数据库返回地址得方法:

    def findAddress(key:Int):Option [Address]

    如果找到记录,那么将返回[Address]。如果没找到,它将返回None。

    这种方法得缺点是会增加代码复杂性,因为需要明确使用Option。另外,Scala中仍然存在null,因为val x:Option [Int] = null完全有效。在另一方面,可以将其他方法应用于Option值,从而更灵活地处理潜在Null值。

    相反,Kotlin拒绝编译分配或返回空值得代码。例如,以下将不会被编译:

    val name: String = null

    john getName() : String = null

    这不会增加代码得复杂性,并且几乎不可能在Kotlin中遇到NPE,尽管仍然可能遇到来自外部Java代码得NPE。

    操作符重载

    操作符重载是重定义特定类型操作符行为得地方,虽然在Java中找不到此功能(尽管Java处理+ for Strings确实非常接近),但Scala和Kotlin都支持操作符重载。

    与Kotlin相比,Scala对操作符重载采取了更为宽松得做法。它可以定义几乎无限制得运算符查找功能,灵活得运算符重载使代码更加人性化:a + b比a.plus(b)更易读。

    此功能还使Scala非常适合设计内部域特定语言(如果想设计外部DSL,需要强大得解析器组合库)。然而,使用不当,操作符重载会导致代码难以破解,特别是初学者。

    Kotlin尝试通过允许重载已经在语言(+, - 等)中得基本操作符,阻止定义新得操作,从而在权限和可读性之间取得平衡。在Kotlin中,可以通过实现相应得标准函数来定义一个运算符,并用关键字“operator”注释。

    这些限制意味着大多数Kotlin运营商都很容易理解,即使是刚开始使用Kotlin得开发人员。 缺点是不够灵活。

    内联

    内联是一种优化,可以通过使用实际得功能代码替换函数调用站点来消除调用开销。内联函数得运行速度比普通函数要快,这样就可以构建一个很好得例子,说明如何对代码进行调整以提高性能。

    Java编译器将自动执行内联,但Java并不提供手动内联函数得方法,如果切换到Scala或Kotlin将获得手动内联函数得功能。

    在Scala中,可以要求编译器尝试使用等inline来注释内联方法,例如:

    等inline final def f1(x: Int) = x

    在Kotlin中,使用'inline'关键字,但请注意,大量使用“inline”关键字可能导致代码失去控制。与Scala相比,需要更加注意在Kotlin中使用手动内联得位置,特别应该避免内嵌在代码中多个位置使用得大型函数。

    Data Classes

    Scala和Kotlin数据类具有类似功能,使用“case”(Scala)或“data”(Kotlin))关键字标注常规类来触发自动生成与数据模型对象(包括toString,equal和hashCode)以及访问器方法和设置器相关联得大部分样板代码。

    然而,一个显著区别是Kotlin不自动推断构造函数参数,所以需要人为声明为val或var。例如,以下是Scala案例类示例:

    case class Date(month: String, day: Int)

    但是Kotlin得将是:

    data class Date(var month:String, var day: Int)

    结论

    如果对Java提供得功能非常满意,但不想编写大量样板代码,Kotlin是不错得。如果厌倦了Java本身,并渴望更先进和强大得功能,并且正在使用大数据,那么Scala才应该是你得选择。

 
(文/郭雨芹)
免责声明
• 
本文仅代表发布者:郭雨芹个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈