使用Kotlin开发Android应用(I):简单介绍

简介:

使用Kotlin开发Android应用(I):简单介绍

@author ASCE1885的 Github 简书 微博 CSDN 
原文链接

Kotlin是一门基于JVM的编程语言。它正成长为Android开发中用于替代Java语言的继承者。

Java是世界上使用最多的编程语言之中的一个,当其它编程语言为更加便于开发人员使用而不断进化时,Java并没有像预期那样及时跟进。

Java缺失的非常多特性在最新的修订版中逐渐覆盖到了,但Android开发人员临时还没能够使用它们。

这就使得相似Kotlin这种语言有了用武之地了:在旧的开发环境中使用现代语言的特性。

Kotlin是什么?

Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而Android Studio是基于IntelliJ改动而来的。Kotlin是一门包括非常多函数式编程思想的面向对象编程语言。

Kotlin生来就是为了弥补Java缺失的现代语言的特性,并极大的简化了代码,使得开发人员能够编写尽量少的样板代码。

为什么要使用Kotlin?

首先我必须声明我使用Kotlin的时间并不长,我差点儿是边学习边写这一系列博客的。

我没有尝试其它替代语言比如Go或者Scala,因此假设你真的想要切换到还有一门语言之前。我建议先搜索其它人是怎样评价其它语言的。使用Scala开发Android的一个非常棒的样例能够在47deg的Github上面找到。

以下是我为什么选择Kotlin进行学习的理由:

  • 相对而言更快的学习曲线:比如相比Scala而言。我们将学得更快。Kotlin限制比較多,但假设你之前没有使用过现代编程语言。那么使用Kotlin入门会更easy。
  • 轻量级:相比其它编程语言,Kotlin函数库更小。因为Android存在65K方法数限制。这使得这一点更为重要。尽管使用proguard或者打包成多个dex能够解决问题,可是全部这些解决方式都会添加复杂性。并添加调试的时间。Kotlin函数库方法数小于7000个,相当于support-v4的大小。
  • 高度可互操作:Kotlin能够和其它Java类库非常好的并且简单的互操作。Kotlin团队在开发这门新语言时正是秉承了这个中心思想。他们希望能够使用Kotlin继续开发现有的使用Java语言编程的project,而不是重写全部代码。因此Kotlin须要能够极好的和Java互操作。

  • 完美的集成Android Studio以及Gradle:Kotlin有一个专门用于Android Studio的插件,以及还有一个专门用于Gradle的插件,因此在Androidproject中開始使用Kotlin并不困难(我将在下一篇文章中进行介绍)。

在你作不论什么决定之前我推荐先阅读一篇由Jake Wharton写的有趣的文章:在Android开发中使用Kotlin

Kotlin有些什么特性呢?

1. 表达式

使用Kotlin能够非常easy避免样板代码的编写。因为语言本身已经默认覆盖了大多数典型的情况。

比如。在Java中假设要创建一个典型的数据模型类。我们须要编写(或者至少生成)例如以下代码:

public class Artist {
    private long id;
    private String name;
    private String url;
    private String mbid;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getMbid() {
        return mbid;
    }

    public void setMbid(String mbid) {
        this.mbid = mbid;
    }

    @Override public String toString() {
        return "Artist{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", url='" + url + '\'' +
                ", mbid='" + mbid + '\'' +
                '}';
    }
}

假设使用Kotlin编写呢?例如以下所看到的:

data class Artist(
    var id: Long,
    var name: String,
    var url: String,
    var mbid: String)

2. 空类型安全

当我们使用Java进行开发时,大部分代码都是防守型的。我们须要在使用之前不断的检測对象是否为空,假设我们不想在代码执行时得到非预期的NullPointerException。

相似其它非常多编程语言。Kotlin是空类型安全的,因此我们须要使用安全调用操作符显式指明对象能否够为空。

我们能够相似这样声明:

//This won´t compile. Artist can´t be null
var notNullArtist: Artist = null

//Artist can be null
var artist: Artist?

= null // Won´t compile, artist could be null and we need to deal with that artist.print() // Will print only if artist != null artist?.print() // Smart cast. We don´t need to use safe call operator if we previously checked nullity if (artist != null) { artist.print() } // Only use it when we are sure it´s not null. Will throw an exception otherwise. artist!!.print() // Use Elvis operator to give an alternative in case the object is null val name = artist?

.name ?: "empty"

3. 扩展函数

我们能够为不论什么类加入新函数。相比我们project中普遍存在的传统的工具类,扩展函数更具可读性。比如,我们能够为fragments加入一个新函数,用于显示一个toast:

fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(getActivity(), message, duration).show()
}

然后能够这样调用:

fragment.toast("Hello world!")

4. 函数式支持(Lambdas)

每次当我们创建一个新的listener时。都须要声明一个onClick函数用于处理监听回调。我们能够直接编写监听回调的代码而不用声明onClick函数吗?答案是肯定的。这(包括其它非常多有趣的功能)得归功与lambda表达式的运用:

view.setOnClickListener({ toast("Hello world!") })

眼下的限制

译者注:本小节所列出的限制,在最新版的Kotlin中已经都攻克了。仅供读者目睹Kotlin语言的完好和进化过程。

Kotlin眼下还处于开发阶段,尽管已经非常稳定并且终于release版本号即将公布(这个夏天),但在Android开发中存在例如以下限制:

  • 与自己主动生成代码的可互操作性:一些知名的依赖于自己主动生成代码的Android函数库,比如Dagger或者Butterknife,因为某些不兼容的命名。因此不能正常的使用。Kotlin团队正在解决这些问题,将来某一天将会解决(KT-6444)。

    无论怎么说。就像我将在下一篇文章中说明的,语言的可表达性能够说服我们不再须要这些函数库。

更新:在Kotlin M12已经带来了对注解处理的支持。

  • 没有简单的方式声明自己定义views:Kotlin类仅仅能声明一个构造函数。而自己定义views一般都有三个重载构造函数。

    当我们在代码中使用这些自己定义views时仅仅有一个构造函数不存在问题,但假设想在xml文件里使用自己定义views,仅仅有一个构造函数是不够的。最简单的解决方法是使用Java声明这些自己定义views类,并在Kotlin中引用它们。Kotlin团队许诺将在M11公布版中解决问题。

更新:Kotlin M11公布了并包括了辅助构造函数

  • Androidproject中的jUnit測试:Android Studio 1.1引入的这个新特性Kotlin临时还不支持。

    但纯粹的Kotlinproject能够全然支持Instrumentation測试和jUnit測试。

更新:Kotlin M12的gradle plugin如今支持Android Studio中的单元測试了。

总结

Kotlin是开发Android app中使用的Java语言的一个有趣的替换者。下一篇文章我们将描写叙述使用Kotlin怎样新建一个新project,并解说怎样充分利用Kotlin使Android开发更easy。敬请关注!





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5225320.html,如需转载请自行联系原作者

相关文章
|
29天前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
187 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
230 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
490 3
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
467 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
1月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
113 0
|
5月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
260 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
332 1
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
454 1
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
**Kotlin中的`by lazy`和`lateinit`都是延迟初始化技术。`by lazy`用于只读属性,线程安全,首次访问时初始化;`lateinit`用于可变属性,需手动初始化,非线程安全。`by lazy`支持线程安全模式选择,而`lateinit`适用于构造函数后初始化。选择依赖于属性特性和使用场景。**
486 5
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
|
调度 Android开发 开发者
【颠覆传统!】Kotlin协程魔法:解锁Android应用极速体验,带你领略多线程优化的无限魅力!
【8月更文挑战第12天】多线程对现代Android应用至关重要,能显著提升性能与体验。本文探讨Kotlin中的高效多线程实践。首先,理解主线程(UI线程)的角色,避免阻塞它。Kotlin协程作为轻量级线程,简化异步编程。示例展示了如何使用`kotlinx.coroutines`库创建协程,执行后台任务而不影响UI。此外,通过协程与Retrofit结合,实现了网络数据的异步加载,并安全地更新UI。协程不仅提高代码可读性,还能确保程序高效运行,不阻塞主线程,是构建高性能Android应用的关键。
245 4