Kotlin学习总结(一)

目录

目录

前言 

一 基本数据类型

二 变量和函数

1 变量

2 函数和方法

三 逻辑控制语句

if条件语句

when条件语句

循环语句


目录

前言 

        最近在学习Android开发,在之前Google只提供了Java一种语言来开发Android。但是现在Android官网文档已经是kotlin First。并且Kotlin和Java是100%兼容的。也就是说Kotlin可以直接调用Java编写的代码,也可以使用Java的第三方开源库。

        编程语言大致可以分为编译性语言和解释性语言。编译性语言的特点是编译器可以将我们编写的源代码一次性编译成计算机可以识别的二进制文件,然后由计算机直接执行,如C/C++。解释性语言的特点是,它有一个解释器,在程序运行时解释器会一行行地读取我们编写的源代码,然后将这些源代码解释为可识别的二进制数据,然后再由计算机执行,因此效率通常差一点,如Python。

        而Java程序需要先编译再运行,但它却不是编译型的语言。因为Java代码编译之后生成的并不是计算机可以识别的二进制文件,而是Java字节码,就是javac命令执行后得到的class文件,这种文件只有Java虚拟机可以识别。Java虚拟机充当了解释器的角色。因此Java属于解释型语言。

        那么只要一门编程语言经过编译后的文件Java虚拟机可以执行,符合Java虚拟机的规范即可。对于Java虚拟机来讲,它并不关心自己执行的字节码是从哪里编译来的。因此JetBrains以一个第三方公司的身份设计出一门开发Android应用程序的编程语言。

本文参考《第一行代码》

一 基本数据类型

Kotlin对象数据类型Java基本数据类型字节宽度
Intint4
Longlong8
Shortshort2
Floatfloat4
Doubledouble8
Booleanboolen
Charchar
Bytebyte1

        kotlin相比Java在数据类型之间的区别看起来只是将首字母大写了一下。但其中却是有很大差距。我们知道Java虽然是面向对象的语言,但其中的基本数据类型却不是对象,如果要把基本数据类型当作对象操作,则必须借助基本数据类型对应的包装类进行装箱操作才可以。但是kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型。每个对象数据类型都是一个类。是一门纯面向对象的语言。

二 变量和函数

1 变量

        在kotlin中定义变量的方式和Java区别很大,在Java中定义变量需要先声明变量类型,如int,String等。而kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var。

        val 是value的简写,它用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能被重新赋值,对应于Java中的final变量。

        var 是variable的简写,它用来声明一个可变的变量,这种变量在初始赋值之后仍然可以被重新赋值,对应Java中的非final变量。

var a=10 //声明一个可变的int型变量
val b="baidu" //声明一个不可变的String变量

        对了,kotlin中的每一行代码都是不用加分号的。这里可能有个疑问,只是用val或者var来声明一个变量的话,那编译器是如何知道我们这个变量是什么类型的呢。这是由于kotlin有出色的类型推导机制。在上述代码中,我们使用var关键字定义了一个变量a,并将它赋值为10,那么这个变量a会被自动推导为整形变量。而b会被自动推导为字符串变量。

        但是kotlin的类型推导函数并不总是有效的,有时候我们必须要对一些变量延迟初始化,这个时候kotlin就无法自动推导它的类型了。这个时候就必须显示的声明变量类型。

val a:Int=10

我们现在显示的声明了变量a为Int类型,这个时候kotlin就不会再尝试进行类型推导了。

        在Java中,只有在变量之前声明了final关键字的时候,这个变量才是不可变的。而当一个项目足够大的时候,一个不应该被修改的变量可能不知道什么时候就被修改了,这可能会导致一些难以排查的问题。因此一个好的编程习惯应该是,除非一个变量明确允许被修改,否则应该给他加上final关键字。但是并不是每个人可以养成这种良好的编程习惯。因此,kotlin在设计的时候采用了和Java完全不同的方式,变量可变与否必须由开发者主动声明。

        我们在开发的时候应该优先使用val来声明变量,当val无法满足需求的时候,再去使用var。

2 函数和方法

函数和方法本质上没有什么区别。只是Java中方法的叫法更普遍一点,kotlin中函数的叫法更普遍一些。

fun sumNumber(num1:Int,num2:Int):Int{
    return num1+num2
}

其中fun是定义函数的关键字,largeNumber为函数名,括号中声明该函数接收的参数,声明格式是参数名:参数类型。参数括号后面的部分用于声明函数返回什么类型的参数,不返回可以不写。

另外,当一个函数里面只有一行代码时,kotlin允许我们直接写在函数定义的尾部,中间用等号连接即可。比如上面的语法就可以写成如下样子

fun sumNumber(num1:Int,num2:Int)= num1+num2

三 逻辑控制语句

if条件语句

kotlin中的if语句和Java中几乎没有任何区别,但是相比于Java有一个额外的功能。那就是它可以有返回值,返回值就是每一个条件中最后一行代码的返回值

when条件语句

kotlin中的when条件语句类似于Java中的switch语句。但是switch语句只能支持整型或者字符串,而且每个case之后需要加上break。但是kotlin解决了这一问题。

when语句允许传入一个任意类型的参数。格式为:匹配值->{执行逻辑},如下:

fun getScore(name : String)=when(name){
"Tom" -> 86
"Jim" -> 95
else -> 0
}

并且when也是有返回值的,当执行逻辑只有一行时,{}可以省略。

除了精确匹配之外,when允许类型类型匹配。如下

fun checkNumber(num:Number){
    when(num){
        is Int -> print("Int")
        is Double -> print("Double")
        else -> print("not support")
    }
}

is关键字是类型匹配的核心,相当于Java中的instanceof关键字,上述代码中的Number类是kotlin中内置的一个抽象类,像Int等都是它的子类。

循环语句

Java中的循环语句主要有两种:while和for。在kotlin中也提供了它们,其中while语句的使用和Java中没有任何区别。但kotlin在for循环方面做了很大的修改,Java中最常见的for- i循环被直接舍弃,而for- each循环被大幅度加强,变成了for- in循环。

和for- in循环相关的,还有区间这个概念,如下代码

val range=0..10

这段代码表示创建一个从0到10的闭区间,即[0,10],其中 . .  是创建两端区间的关键字。有了区间之后,我们可以使用如下方式遍历这个区间。

for( i in 0..10){
    print(i)
}

但是我们都知道,数组下标都是从0开始的,因此两端都是闭区间的场景可能没有左闭右开区间的应用场景多。我们用如下代码创建一个左闭右开的区间。

val range = 0 until 10

默认情况下,for- in循环 每次执行循环时会在区间范围内递增1,如果想要跳过一些元素,可以使用step关键字,如下代码

for(i in 0 until 10 step 2){
    print(i)
}

这段代码标识循环执行的时候跳过奇数元素。另外上文中提到的都是一个升序的区间。如果想创建降序的区间,可以使用downTo关键字。如下代码

for(i in 10 downTo 1){
    print(i)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值