0
点赞
收藏
分享

微信扫一扫

Android开发笔记——快速入门(Kotlin入门)

zhyuzh3d 2022-03-23 阅读 80

Android开发笔记——快速入门(Kotlin入门)

系列文章目录

Android开发笔记——快速入门(贰)[创建项目和项目内容分析]
Android开发笔记——快速入门(壹)[系统架构和Android Studio安装]


文章目录


软件环境:

  • Jetbrains Toolbox
  • Android Sudio 2021.1.1 Bumblebee
  • JDK 17.0.2

Why Kotlin?

Kotlin作为Jetbrain全新开发的语言,虽然是基于JVM进行的开发但是却是JAVA的温和改良版本,如果说C是一个国色天香的感觉,那么Java就是窈窕淑女而Kotlin就是小家碧玉,端庄优雅的温柔。

Kotlin是一个极其成功的开源项目,代表了目前编程语言的一个发展方向,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等。光说起来你会感觉很难懂到底在说什么,但是当你跨进Kotlin大门之后才能体会到运用Kotlin编程的快乐。

如何使用Kotlin开发Android?

首先你需要安装Android Studio来进行开发,详细安装过程可以参考:Android开发笔记——快速入门(壹)

根据教程创建一个基于Kotlin的Android项目:

具体如何创建项目可以参考:上一篇文章。

创建完成以后,在相同包下创建一个Kotlin类:

请添加图片描述

Kotlin class的创建:

请添加图片描述

Kotlin的变量与函数

创建完成以后就可以愉快的,使用AS来进行kotlin的编写:

首先创建一个主函数:

package com.example.codewithkotlin


fun main()
{
    println("Hello Kotlin!")
}

你可以点击左边的小箭头运行一下

请添加图片描述

kotlin的变量

kotlin的变量与Java有很大的不同,可以总结如下两点:

  • 定义时不需要指定类型,而是需要指定变量是否可变。
  • 没有保留Java基本的数据类型,而是使用对象数据类型。

举例:

不需要指定变量类型,其会自动推导:

fun main()
{
    val a=10
    println("a is " + a)
}

指定数据类型时不会再自动推导:

fun main()
{
    val a : Int=10
    println("a is " + a)
}

输出结果:

a is 10

val与var是用来指定是否为变量的关键字,val类似于java的final,var就是常规的变量,为什么要这样设计你如果有编程基础你就知道变量是不安全的,val,var就是为了指定这个变量是否可变(强制要求显式定义),这有一个小技巧,定义变量时应该是都定义为val,只有你需要var的时候再回来将这个变量改定义为var,这样就保证了基本所有变量的安全。

Kotlin的函数

kotlin的函数与Java中的方法其实很像,但是更自由,书写更方便。

其基本定义格式如下:

fun funName(param1 : Int,param2 :Int) :returnvaluetype 
{
	return value
}

如果没有返回参数就可以省略:returnvaluetype 部分,从这里看出Kotlin的设计思想:

能省就省

简化以后就可以表现为:

fun funName(param1 : Int,param2 :Int)
{
}

为了保持设计思想,Kotlin做出了更多的省略,当你的函数体只有一块作为返回值的代码时,可以直接省略大括号,用等号来连接,这里用一个返回最大值的函数来表示:

fun maxNumber(num1 :Int ,num2 :Int):Int = max(num1,num2)

但是我们说过Kotlin具有出色的推导机制,那么他能不能推断出这里一定返回的是和max函数返回相同的内容呢?当然可以。所谓我们进一步简化省略去返回值:

fun maxNumber(num1 :Int ,num2 :Int)= max(num1,num2)

使用Kotlin以后你就会发现能在一行就实现一个完整的函数,但这并不是我们想要的,因为这里我们只是对MAX函数进行了一个包装,里面并没有任何逻辑部分。下面我们来写一下如何写逻辑部分的内容,并对其进行简化,进一步体验其强大性。

Kotlin的逻辑控制

Kotlin的if

if在使用的时候与传统的if并没有太大区别,但是他还有一个额外的功能,可以有返回值。为什么要给if来整一个返回值呢?返回值常常与函数相关,对于现在流行的函数式编程,Kotlin也对其做出了支持,if的返回值就是如此,if语句会自动返回其最后一条语句的返回值

常规IF的写法如下:

fun maxNumber(num1 :Int ,num2 :Int) :Int
{
    var maxnumber =0
    if(num1 >= num2)
        maxnumber = num1
    else
        maxnumber = num2
    return maxnumber
}

使用其返回值如下,是不是看起来更简略一点了呢:

fun maxNumber(num1 :Int ,num2 :Int):Int
{
    val maxnumber = if(num1 >= num2)
                        num1
                    else
                        num2
    return maxnumber
}

其实还可以再简略一下我们可以把maxnumber看成一个语句,这样他就可以直接给函数返回内容,我们就可以省略函数体的括号和返回值类型:

fun maxNumber(num1 :Int ,num2 :Int)=if(num1 >= num2)num1 else num2

这样就实现了最简洁的写法。

Kotlin的when

Kotlin的when就是Java,C中的Switch case,负责的是样例匹配的工作,当你需要匹配内容很多的时候用if,是很不优雅的,但是Kotlin的when提供了一种简介方便的方式。

我先提供一个写法:

fun getGender(name : String) =
    when (name)
    {
        "zzy"-> println("boy")
        "lxl"-> println("girl")
        "hrq"-> println("boy")
        else ->  println("not a boy or girl")
    }

这段代码给我们提供了一个样例,我们通过传入任意一个类型的变量来使用when来进行匹配,when后面的括号就是要匹配的对象,下边的函数体就是要匹配的内容,你可以发现他取消了case等关键字而是使用 “->” 来作为关键字,意义表达明确,而且你不用担心执行完成后没有break会自动向下运行,每一个匹配后会执行完自己的逻辑代码然后退出。值得提醒的是你的逻辑代码只有一行的时候可以省略“{}”。

除了数据匹配之外,when语句还可以进行类型匹配,没错就是你想的那个数据类型,如果你想起来Kotlin中没有基本的数据类型,而是全部都是类数据,你就会意识到为什么要这样设计,为了类型匹配只是一小部分优点。

下面举一个例子:

fun getType(number : Number) =
    when (number)
    {
        is Int-> println("Int type")
        is Float-> println("Float type")
        is Long-> println("Long type")
        else ->  println("not my type")
    }

通过设置输入的number为所有数字类型的父类Number,你可以输入任意类型的数据,然后使用is关键字来检测是不是对应的类型。

你可以看到When里边都是同一种类型的匹配模式,但是如果要使用不同的匹配模式呢,打个比方我一个想要分离出名字里面有是zzy的,另一个想要分离出名字是lxl怎么办?很简单这里去掉when后边的括号就好了,将匹配表达式写入大括号里面。

fun getGender2(name : String) =
    when
    {
        name.contentEquals("zzy")-> println("a part of zzy")
        name === "lxl"-> println("girl")
        else ->  println("not Anyone")
    }

Kotlin的循环

在介绍循环之前先介绍一个新的东西,区间

区间这个东西很简单,它的作用就是按照规律生成一组数列,我们举个例子试一试:

fun rangeTest()
{
    val range = 1..10
    val untils = 0 until 10
    val downtos = 10 downTo 1
    println(range)
    println(untils)
    println(downtos)
}

输出结果:

1..10
0..9
10..1

你可以看见这两个区间生成的数列区别,一个是包含左右边界,一格式只有左边界没有右边界。

有了区间以后就可以使用for来迭代,for循环在Kotlin中有了巨大的变化,我先来展示一下:

fun rangeTest()
{
    val range = 1..10
    val untils = 0 until 10
    println(range)
    println(untils)
    for (i in 10 downTo 1)
        println(i)
}

输出:

1..10
0..9
10
9
8
7
6
5
4
3
2
1

你可以看到了一个和java c都不太像的for 更想java里面的增强for循环,你就意识到这里for转化为了一个迭代器的作用。在后边我再继续讲解for的强大之处。

举报

相关推荐

0 条评论