前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin Android】一个列表带你领略Kotlin简洁之风

【Kotlin Android】一个列表带你领略Kotlin简洁之风

作者头像
开发的猫
发布2020-04-01 17:52:31
1.8K0
发布2020-04-01 17:52:31
举报
文章被收录于专栏:猫哥的专栏猫哥的专栏

Android Kotlin

自从Google宣布Kotlin为Android官方开发语言以来,越来越多的应用都开始使用Kotlin进行开发,包括Google自家开发的许多APP,也不乏许多的大公司的APP。Kotlin的热度也是一路高歌,可以看出这门新兴的语言有多受大家的追捧。

作为一个曾经使用C、C++作为主要开发语言的人,在刚开始接触到Java从事Android开发时,对于Java的简便易学、自动内存垃圾回收机制等等,简直就像发现了一个新大陆一样无比惊喜,大大提升了开发效率。

Java作为一门最受欢迎的编程语言,有其无法比拟的优越性,但同时在如今日益推崇的函数式编程思想上,Java的脚步却显得没有那么与时俱进了,直到最近刚刚推出的Java8才开始支持lambda函数式编程。而Kotlin作为一门函数式编程语言,在这方面是走在了前列的。

当然每门语言都有一个从排斥,到接触,到喜爱或者放弃的过程。我对于Kotlin一开始也是没有多大的兴趣,对函数式编程也是有一定排斥的,总感觉代码可读性和可维护性似乎大大下降,事实上只是对这中编程思想没有一个很好的转变而已。

当我真正学习和使用它的时候,我发现我已经爱上了这门编程语言。要我总结它,那就简洁,无与伦比的简洁。

说了这么多废话,接下来我们就来看看使用Kotlin究竟能带给我们怎样的方便。

Kotlin基本语法

Kotlin 基本数据类型

Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。他们之间不能直接相互强制转化,必须调用以下方法进行转换,每个基础类型都带有以下方法:

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
Kotlin 变量和常量声明

Kotlin使用 varval 关键字作为变量和常量声明,有以下几种声明方式:

var 变量名: 变量类型 = 类名()   或
var 变量名: 类名()            或
var 变量名: 变量类型? = null  或
lateinit var 变量名: 变量类型
如:
var value: Int = 1 或
var value = 1 或
var value: Int? = null
lateinit var value: A  //A为非基础类型的类

第一种方式,最完整的声明方式;

第二种方式,省略变量类型声明,直接赋值,因为Kotlin带有自动推断变量类型的功能;

第三种方式,如果你不想声明变量的同时初始化变量,那么可以使用“?”来表明这个变量有可能为null,并赋值为null;

第四种方式,如果你只想声明变量,那么可以使用lateinit关键来表明该变量在后面才进行初始化(注:基础类变量不能指定为lateinit,并且lateinit只能应用在var类型)。

Kotlin 类声明、定义、继承

Kotlin同样使用class来声明类,类继承符号为一个冒号“:”,基类需要在类名后面带上一对括号,如果基类构造函数带有参数,此时需要在括号中填写对应的参数。

i) 类声明

[类属性] class A {
    var arg1 = 1; //变量
    val arg2 = 2; //常量
    ...
    
    fun fun1() {
        ...
    }
    ...
}

如果类没有具体内部变量和方法,那么也可定义为一个空类,不需要类名后面的类体

[类属性] class A

Kotlin的类默认带有一个无参数的构造函数,默认可以省略不写,如果类的构造函数带有参数,那么可你直接写在默认的构造函数上,或者另外写一个二级构造函数

class A(var arg1: Int, val arg2: String) 

或

class A {
    var arg1: Int = 0
    var arg2: Int? = null
    constructor(arg1: Int, arg2: Int) {
        this.arg1 = arg1
        this.arg2 = arg2
    }
}

ii) Kotlin 类定义

Kotlin没有new关键字,因此,类定义无需使用任何关键字,直接定义类即可,非常的简洁

var a = A(1, 1)

iii) Kotlin 类继承

Kotlin 继承的关键符号为冒号 “:” ,基类必须为 open/abstrct 属性的class,或者为 interface 接口类,举个栗子:

open class Base (arg: Int) {
    var arg: Int? = null
    init {
        this.arg = arg
    }
}

class A(arg: Int): Base(arg) {
    
}

或

class A: Base {
    constructor(arg: Int): super(arg) {
        
    }
}

1,基类Base为open属性的类,并且构造函数需要一个Int类型的参数 2,基类Base中有一个init初始化代码块,可以在里面直接使用构造函数中的参数来完成数据的初始化 3,子类必须在默认的构造方法中初始化基类的参数 4,构造函数名字为constructor,而非像Java用的是类名

Kotlin 函数定义

Kotlin函数方法使用关键字 fun 来声明,关键字 override 表示该函数重写了父类的方法,参数声明使用[参数: 参数类型]的方式类声明,如果参数类型后面带上“?”表示该参数可能为null。完整的方法声明如下(其中[]方括号中的属性不需要时可以省略):

[open] [函数属性] [override] fun 函数名(参数: 参数类型)[: 返回值类型] {

}
如:
open protected fun fun1(arg1: Int) : Int {
    return arg1+1
}

Kotlin函数默认函数属性为public,其可见属性与Java基本一致,包括public/private/protected等,并且默认不可改写,与Java的final一样,如果函数需要被子类改写,则需要加上 open 关键字。

有了以上基本了解后,我们就可以开始动手来搭建一个简单的页面,在动手过程中来进一步深入学习。

Kotlin基本使用

新建支持Kotlin的Android工程

如果你的Android Studio还不是3.0,那么需要下载Kotlin的插件和做一些相关的配置,请自行百度。我们直接使用Android Studio3.0新建工程

新建工程

只要勾选左下方的Include Kotlin support即可,然后一路Next,与正常的新建工程无异。接下来就可以愉快的使用Kotlin玩耍啦,此处我们以一个列表页面来演示。

1. 首先,在activity_main.xml中,我们添加一个列表,id命名为listView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.kotlin_demo.MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

MainActivity.kt代码如下:

class MainActivity : AppCompatActivity() {

    private var adapter: SimpleAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initList()
    }

    private fun initList() {
        listView.layoutManager = LinearLayoutManager(this)
        adapter = SimpleAdapter()
        listView.adapter = adapter
    }

}

还记得让人讨厌的findViewById吗?还记得代码中大量的setter和getter吗?在Kotlin的世界里,这些通通被抹杀在摇篮里。

在xml中声明好的id可以直接在Activity中使用,如上面的listView,无需在代码中再次去声明和定义,Kotlin会自动帮你映射。

在Java中,如果想要配置LayoutManager,需要调用listView的setLayoutManager()方法,在Kotlin中,我们只需直接将LayoutManager赋值给layoutManager即可,没有冗余的setter代码,获取LayoutManager也是一样的,直接使用listView.layoutManager。

通过以上可以看出来,Kotlin无与伦比的简洁之处,当然其还有更强大的,更简洁的地方,我们继续来看看。

2. 接下来,新建SimplerAdapter类,通过右键->New->Kotlin File/Class,即可新建一个kotlin文件
class SimpleAdapter: RecyclerView.Adapter<SimpleAdapter.ViewHolder>() {
    override fun getItemCount(): Int {
        return 10
    }

    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
        holder?.itemView?.text?.text = position.toString()
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        var view = LayoutInflater.from(parent?.context).inflate(R.layout.item_view, parent, false)
        return ViewHolder(view)
    }

    class ViewHolder(view: View): RecyclerView.ViewHolder(view)
}

item_view.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

看到了吧,一个简单的适配器其几行代码就搞定了。如果在Java中定义一个ViewHold是这样的

class ViewHolder extender Recycler.ViewHolder {
    public Textview text, ...;
    ...
    
    public ViewHoler(View itemView) {
        super(itemView);
        text = (Textview)itemView.findViewById(R.id.text);
        ...
    }
}

而Kotlin只需一行代码,同样不需要我们再去查找TextView控件,只需调用holder.itemView.text即可。

并且在以上SimpleAdapter的getItemCount方法还有更简洁的写法:

override fun getItemCount(): Int = 10

甚至写成:

override fun getItemCount() = 10

即Kotlin的表达式作为函数体,甚至可以省略返回类型,Kotlin自动推断返回类型

3. Kotlin NULL检查机制

我们看到在上面的代码中,常常出现[变量?.成员变量]的表达形式,即变量后面会带有一个问号“?”,这是什么东东呢?

在Java中经常出现让人头痛的问题就是,如果不加null判断,常常会出现空指针异常,而在Kotlin中,必须对可能为空的变量进行显式的声明,即

i)在变量后面加上“?”来表示该变量可能为空,如果变量真的为null时,会跳过不执行。 ii)如果想和Java一样,在变量为null时,抛出空指针异常,那么可以在变量后加上“!!”双感叹号,对变量进行声明,即该变量一定不为空。

最后

以上,简单介绍了Kotlin的一些最基础的语法,以及用了一个列表展示的例子初步了解和学习了Kotlin在开发中会使用到的一些最基础的知识以及可能产生疑惑的地方,也向大家展示了Kotlin如帮组我们精简代码,提高编码效率。

当然Kotlin还有更多的知识和更多使代码更简洁的技巧,如lambda表达式,对象表达式,函数扩展和对象委托等更高级的功能,这里就不在介绍。

推荐两个学习的网址: 菜鸟教程 Kotlin语言中文站 非常详细全面的介绍了Kotlin的语法和使用。

以上例子代码非常简单就不提供了,这里提供本人自己刚开始正在写的仿【一个】的工程,整个工程使用Kotlin编写,使用MVP模式开发,网络采用RxJava+Retrofit+OKHttp的框架,现在还很粗糙,正在逐步完善。 bibibi~ 传送门

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kotlin基本语法
    • Kotlin 基本数据类型
      • Kotlin 变量和常量声明
        • Kotlin 类声明、定义、继承
          • Kotlin 函数定义
            • 新建支持Kotlin的Android工程
            • 1. 首先,在activity_main.xml中,我们添加一个列表,id命名为listView:
            • 2. 接下来,新建SimplerAdapter类,通过右键->New->Kotlin File/Class,即可新建一个kotlin文件
            • 3. Kotlin NULL检查机制
        • Kotlin基本使用
        • 最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档