Kotlin与Swift:Android和iOS朝着通用语言迈进?



朋友,大家好。 Dmitry Kozhevin是OTUS基础课程“ Android Developer”的老师。 特别是对于我们博客的读者,我准备了这篇颇有争议的文章的翻译。 您的意见非常有趣,因此,阅读后,我邀请所有人对此出版物发表评论。



一旦Kotlin获得了Google的支持,Kotlin粉丝的兴奋就不是唯一的反应。 那些不熟悉Kotlin的人非常担心它与Java的兼容性水平,学习它的平均时间以及总体上使用Kotlin好处

为了以最短,最清晰的方式解释和展示该语言,许多Kotlin开发人员提到了Kotlin与第二种正式的iOS语言Swift的三年并行。 一切都称Kotlin为“ Android的迅捷”,一切都简化了任务并帮助创建了该语言的图像。 但是,此图像也引起了iOS社区的争议 ,因为一些iOS开发人员并未发现这种比较讨人喜欢,而把Kotlin视为模仿者。

至少应该指出的是,尽管Swift出现在2013年,但Kotlin出现在2011年。 因此,即使由于Swift较早接触更广泛的受众而比较Kotlin和Swift(按确切顺序)可能很方便,但Kotlin模仿的任何主张都是没有道理的。

但是,值得比较吗? 如果是这样,相似性扩展了多少? 它的存在是否暗示着iOS和Android应用程序的发布在将来可能会变得更简单,更快的事实? 目前,ScienceSoft在移动应用程序开发服务方面的丰富经验使人们可以进行猜测。 让我们来看一下。

句法


Swift语法不仅使人联想起Kotlin语法-在小的代码段中, 行相似度可能高达77%

下表总结了主要区别:

科特林斯威夫特
好玩功能
空值
特质协议
建设者初始化
->
任何任何物体
!!

基本原理,类和功能具有非常相似的表达方式。 与Objective-C不同,Swift方法调用类似于Java和Kotlin调用,它们具有名称空间系统和点表示法样式。 例如,以下是两种语言中的函数调用:

科特林斯威夫特
趣味预报(天:字符串,天气:字符串):字符串{功能预测(_天:字符串,_天气:字符串)->字符串{
return“今天是$天,是$天气。”返回“今天是\(天),是\(天气)。”
}}
预测(“星期一”,“下雨”)预测(“星期一”,“下雨”)

这是在两个类中声明类的方式:

科特林斯威夫特
居住类{居住类{
var numberOfRooms = 0var numberOfRooms = 0
乐趣说明()=func描述()->字符串{
“有$ numberOfRooms的房子。”返回“带有\(numberOfRooms)的房屋。”
}}
}

您可以在本文中找到许多其他示例,如果它们告诉我们一些信息,则是这两种语言都有一个共同的目标-尽可能简洁和透明,这使开发人员的工作更加轻松。 在这方面,Kotlin和Swift的语法系统非常有效,因为开发团队非常重视它们的优雅。

安全性


尽管Swift和Kotlin在键入方面既强大又静态,但是它们也允许您使用动态类型。 这样,语言将保持简洁和灵活,从而可以尽早消除错误和不一致。 因此,对于大型项目,它们被认为非常安全,尤其可靠。
此外,这两种语言结合使用安全导航运算符“?”来处理可选值和null / nil安全性的方法。 或选项类型。 标有“?”的注意事项 在Kotlin和Swift中表达几乎相同:

科特林斯威夫特
val示例:字符串? =空var范例:字串? =无

特色功能


除了null(nil)安全性,函数和类之外,Kotlin和Swift还具有许多类似的函数,包括constants, variables, generics, protocols/traits用接口 ,翻译者的注释代替特征 ), enumerated types, any (anyobject) ,错误处理和其他。 以两种语言实现的某些功能共享该方法,但是由于这些功能返回的原始语言而被不同地调用。

例如,在Kotlin中,您可以找到Java lambda表达式。 在Swift中,这些是块或闭包(Objective-C的术语)。 将两个表达式都调用到代码中的方式与它们的工作方式相似。
科特林斯威夫特
{{_in
println(“ Lambda表达式”)打印(“结束语”)
}}

Swift中还包含一个称为计算属性的函数,该函数是带有get调用的特定属性声明,还包含在Kotlin中:

科特林斯威夫特
动物类(动物类{
var Genus:字符串,var Genus:字符串
var Species:String){var种:字符串
val binomialName:字符串var binomialName:字符串{
get()=“ $属$种”得到{
}返回“ \(属)\(物种)”
}
}
}

名称参数 (或命名参数)在两种语言中也都使用:
科特林斯威夫特
有趣的休假(假期:整数,周末:整数):整数=假期+周末func休假(假期:Int,周末:Int)-> Int {
回程+周末
}
休日(5,周末= 8)休假(假期:5,周末:8)

实际上,与其列出这两种语言中存在的功能,不如列出它们中不存在的功能。 即,只有Kotlin支持:

  • 进口班
  • 主要构造函数和数据类
  • @注释

同时,与Kotlin不同,Swift具有:

  • 元组
  • 类型别名
  • 保护声明

相似值


两种语言显然将意识形态分开,因为它们解决了其祖先的语言所产生的相同问题:它们不那么冗长,功能有限,更易读且易于使用。 同时,Kotlin和Swift仍然分别与Java和Objective-C兼容,这使得它们既可以用于新项目,也可以用于旧项目。

此外,两种语言之间的强相似性可以帮助开发iOS和Android的本机应用程序。 当然,不能说两个平台上的应用程序可以共享相同的代码,因为特定操作系统的语言和库是不相同的。 但是,由于Swift和Kotlin在语法和功能上的相似性,因此应用程序逻辑和功能的方法可能非常相似。 这样可以使开发,测试和维护更快,更轻松。

iOS和Android的通用语言?


从理论上讲,谷歌已经可以接受Swift作为官方语言而不是Kotlin。 即使在2016年,也有关于这种可能性的传言。 这样的步骤可能不会造成任何跨平台开发工具都不相关的情况,但是两个平台之间的差异无疑会变得模糊。

但是,这不仅是因为企业的竞争力,也是不合理的。 尽管Swift和Kotlin是相似的,但它们大多数都与其前任相似。 换句话说,Swift和Kotlin弥补了Objective-C和Java之间的鸿沟。 但是,从Java切换到Kotlin仍然比从Java切换到Swift更加自然和顺畅。

总的来说,并不是每个人都喜欢适应新事物的想法。 一些开发人员花时间开始使用一种新语言,就像Swift的采用一样 。 确保向新语言的过渡不会是一项困难的测试,这意味着该语言最终会流行,对于新语言而言,这首先很重要。

告别思想


随着移动开发的不断发展,技术也在不断发展。 这就是为什么在5-10年内,科特林和斯威夫特都可以变得完全不同。 尚不知道语言是否会继续弥合它们之间的鸿沟。 但是,由于iOS和Android正在寻找最方便,安全和最快的移动开发工具,因此最终有一天他们会说相同的语言。

Source: https://habr.com/ru/post/zh-CN474224/


All Articles