在考虑Android开发时,很可能会立即想到一种编程语言:Java。
的确,大多数Android应用程序都是用Java编写的,但在进行Android开发时,Java并不是您唯一的选择。
您可以使用可以在Java虚拟机(JVM)上编译和运行的任何语言来编写Android应用程序,而最终用户则不是明智之举。 Kotlin是一种真正引起Android社区关注的JVM兼容编程语言,它是JetBrains的静态类型编程语言。
如果您听说过Kotlin的好消息并有兴趣亲自尝试,那么您来对地方了。 在这个由三部分组成的系列文章中,我将分享您需要了解的一切,以便开始使用Kotlin进行Android开发。
在第一部分中,我将探讨为什么您作为Android开发人员可能首先考虑从Java进行转换,然后研究选择Kotlin作为Java替代品的利弊。 到本文末尾,您将对Kotlin所提供的功能有一个扎实的了解,并知道它是否适合您。
在第二部分中,我们将研究如何设置Android Studio安装以支持Kotlin并创建一个完全用Kotlin编写的简单Android应用。 有了这些基础之后,在第三部分中,我们将研究如何使用Kotlin语言的一些更高级的功能来增强您的Android开发。
为什么要从Java进行切换?
尽管Java是世界上使用最广泛的编程语言之一,并且几乎是Android开发的官方语言,但是有很多原因导致Java不一定总是成为您的Android项目的最佳选择的原因。
最大的问题是Java不是现代语言,尽管Java 8是该平台的一大进步,但它引入了开发人员一直在等待的许多功能(包括lambda函数),而在编写Android时仅支持Java 8功能的子集 。 Android开发人员似乎不太可能很快获得Java 8的全部好处,因此在可预见的将来,如果您想在Android项目中使用Java,那么Java 7将会使您陷于困境。
Java整体上也存在一些文档齐全的语言问题,包括无休止的try
- catch
块,缺乏可扩展性,null-unsafety(以及臭名昭著的 NullPointerException
),更不用说缺乏对功能编程功能的支持。 尽管Java开始增加一些功能性的编程元素,例如lambda表达式和功能性接口,但Java仍然是一种程序语言。 Java的语法也很冗长,特别是与许多现代编程语言相比。
Kotlin的优势
因此,您可能需要考虑切换到旨在在JVM上运行的许多现代编程语言之一。 尽管不乏可编译为Java字节码的语言,但有一些因素使Kotlin脱颖而出:
与Java的互换性
作为Java的潜在替代品,Kotlin的最大优势之一就是Java和Kotlin之间的互操作性极高的水平—您甚至可以在同一项目中同时存在Java和Kotlin代码,并且所有内容仍然可以完美地编译。 在下面,您可以看到一个由Java Activity
和Kotlin活动组成的项目示例。
实际上,一旦编译了混合的Kotlin和Java项目,用户将无法分辨项目的哪些部分用Java编写,哪些部分用Kotlin编写。
由于Kotlin和Java类可以在同一个项目中并存,因此您可以开始使用Kotlin,而不必做任何大刀阔斧的操作,例如将整个项目转换为Kotlin或专门启动一个新项目,以便可以在Kotlin上尝试一下。
由于具有这种互操作性,因此如果您确实有一个已经在从事的项目,则可以在该项目的一小部分中试用Kotlin,而不会影响其余的代码库。 而且,如果您确定要继续使用Kotlin,则可以一次将项目的现有Java代码迁移到Kotlin一个文件,或者不更改项目的旧Java代码,而仅将Kotlin用于新的类和功能。
由于Kotlin可以与Java完全互操作,因此您还可以在Kotlin项目中使用大多数Java库和框架,甚至可以使用依赖注释处理的高级框架。
易学曲线
Kotlin的目标是对Java进行增强,而不是完全重写,因此您在Java整个职业生涯中获得并磨练的许多技能仍应适用于Kotlin项目。
Kotlin的设计还旨在使Java开发人员拥有轻松的学习曲线。 Java开发人员应该发现大多数Kotlin语法让人感觉很熟悉。 例如,用于在Kotlin中创建新类的代码与Java 非常相似:
class MainActivity : AppCompatActivity() {
Kotlin也被设计得直观,易于阅读,所以即使你确实遇到了一些代码,这是截然不同的,你还是应该能够得到一个什么样的代码是干什么的要点。
结合最佳的功能和过程编程
当前有许多编程范例被广泛使用,但是当涉及到“哪种方法是最好的”问题时,没有简单的答案。 每个编程范例都有其自身的优缺点,因此尽管不乏功能编程具有优势的场景,但程序方法更有效也存在许多问题。
那么,为什么要在功能和程序之间进行选择呢? 与许多现代编程语言一样,Kotlin的目标是通过结合过程式和函数式编程中的概念和元素,为您带来两全其美的体验。
一流的Android Studio支持
Kotlin由IntelliJ(基于Android Studio的IDE)背后的公司JetBrains开发。 因此,Android Studio对Kotlin的出色支持也就不足为奇了。 安装Kotlin插件后,Android Studio可以像打开几个菜单一样简单地在项目中配置Kotlin。
在为Android Studio设置Kotlin插件后,您的IDE将不会理解,编译和运行Kotlin代码。 Android Studio还为Kotlin提供调试,自动完成,代码导航,单元测试和完全重构支持。
一旦将Android Studio项目配置为支持Kotlin,您甚至只需单击几下鼠标,就可以将整个Java源文件转换为Kotlin文件。
更简洁的代码
如果将产生相同结果的Java类和Kotlin类进行比较,则用Kotlin编写的类通常比用Java编写的简洁和紧凑得多。 每个开发人员都知道,更少的代码意味着更少的错误!
例如,以下Java代码创建了一个由浮动操作按钮(FAB)组成的活动,该活动按钮在被点击时显示一个包含有帮助消息“ 这是一个快餐栏”的快餐栏 。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton myfab = (FloatingActionButton) findViewById(R.id.myfab);
myfab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "This is a snackbar", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
Kotlin等效项可以用更少的代码实现相同的工作,尤其是在创建FAB和设置onClickListener
:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolbar)
val myfab = findViewById(R.id.myfab) as FloatingActionButton
myfab.setOnClickListener { view ->
Snackbar.make(view, "This is a snackbar", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
}
这两个代码段具有完全相同的输出:
Kotlin尤其擅长减少所需编写的样板代码量,与使用更冗长的语言(例如Java)进行编码相比,这使Kotlin的编码体验更加令人愉悦。
特别是,Kotlin Android扩展(我们将在第二部分中进行探讨)使您可以将对View的引用导入到Activity文件中,这样就可以将View视为该Activity的一部分来使用。 这意味着您不再需要使用findViewById
标识每个视图,这可以转换如下代码:
TextView text = (TextView) findViewById(R.id.myTextView); text.setText("Hello World");
简而言之:
myTextView.setText("Hello World")
什么是渔获?
没有一种编程语言是完美的,因此尽管Kotlin有很多可以为Android开发人员提供的功能,但您仍需要记住一些缺点:
额外的运行时大小
Kotlin标准库和运行时将增加.apk的大小。 虽然这仅相当于800KB左右,但如果您的应用程序已经很大,那么那额外的800KB可能会使它变得多余,并让用户在下载您的应用程序之前三思而后行。
代码的初始可读性
尽管Kotlin的简洁语法是该语言的最大优势之一,但是您可能最初会发现某些Kotlin难以解读,这仅仅是因为在如此少量的代码中发生了太多事情。 Java可能更冗长,但是好处是所有内容都清楚地说明了,这意味着不熟悉的Java代码比不熟悉的Kotlin易于解密。
另外,如果使用不当,Kotlin的运算符重载可能会导致难以阅读的代码。
缺乏官方支持
Kotlin在Android Studio中可能有出色的支持,但值得记住的是Kotlin并未得到Google的正式认可。
而且,与纯Java项目相比,当您使用Kotlin时,Android Studio的自动完成和编译功能往往会稍微慢一些。
社区较小,可用帮助较少
由于Kotlin是一种相对较新的语言,因此Kotlin社区仍然很小,尤其是与围绕更成熟的语言(如Java)的社区相比。 如果您确实切换到Kotlin,则您可能无法访问相同数量的教程,博客文章和用户文档,并且在论坛和Stack Overflow之类的社区获得的社区支持较少。 在撰写本文时,正在寻找 堆栈溢出上的Kotlin返回刚用Kotlin标记的4,600多个帖子—相比之下,包含Java标记的多达1,000,000多个帖子。
结论
在这个由三部分组成的系列的第一篇文章中,我们探讨了为什么您可能要考虑将Android开发的Java部分切换为一种更现代的,与JVM兼容的语言。 我们还仔细研究了Kotlin作为潜在的Java替代品的独特优缺点。
如果您权衡了利弊并决定尝试Kotlin,那么在本系列的第二部分中,我将向您展示如何使用Android Studio创建一个完全用Kotlin编写的简单Android应用程序。 我们还将研究如何使用Kotlin来确保您不必再编写另一个findViewById
!