Kotlin基础语法(如有错误还请指正)

变量

变量的声明通过val或者var关键字。val关键字类似于Java中的final关键字,要在声明变量是就对变量进行赋值,var关键字就是一般的变量,可以修改。我们更加偏向于val声明变量,如果你不知道变量是否会被进行修改,可以先用val声明,需要修改时改为使用var声明即可

函数

函数(function)又叫方法,是对一系列操作的整合。在Kotlin中使用fun关键字声明一个函数。例如

fun largerNum(num1:Int, num2:Int){
	return max(num1, num2)
}

这样写是调用了Kotlin的内置函数max,来获取最大数字。
下面,是Kotlin的一个语法糖。如果你的函数语句可以写为只有一个语句,那么可以使用=连接函数声明与函数体部分。

fun largerNum(num1:Int, num2:int) = max(num1, num2)

你可能会想,什么时候会用到一句语句?其实,我们的很多简单的逻辑代码都可以化简为一句,下面是一个简单的例子:我们不使用内置的max函数,而是自己用if来进行判断,那么可以写出如下的函数

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

好吧,这样写似乎有点冗余,其实kotlin的if语句是有返回值的,返回的值为最后一句语句,那么我们就可以简写为:

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

其实这样子写还是有点冗余,因为value只是充当了一个返回值的作用,我们可以直接返回if语句:

fun largerNum(num1:Int, num2:Int){
	return if(num1 > num2) num1 else num2
}

这样,我们的函数中就只剩下一句话了,那么就可以直接使用=连接了

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

这样看来是不是又简便了不少?

when关键字

when关键字类似于java中的switch..case语句,但是由于swich…case只能够判断基本数据类型,其局限性很大,所以Kotlin引入了when关键字

有参数的when

这种when的语法和switch…case极其相似。假设我要判断变量num的值,然后输出相应的中文,可以使用如下写法

when(num) {
	0 -> {"零"}
	1 -> {"一"}
	2 -> {"二"}
	3 -> {"三"}
	//以此类推
	else -> {"不是一个0~9的数字"}
}

其实when也是有返回值的,和if类似,也是最后一句话。我们可以将每句话的大括号去掉,变为如下模式:

when(num) {
	0 -> "零"
	1 -> "一"
	2 -> "二"
	3 -> "三"
	//以此类推
	else -> "不是一个0~9的数字"
}

又比如我们想判断变量num的类型,我们可以使用is关键字,例如

when(num) {
	is Int -> "num的类型是Int"
	is Float -> "num的类型是Float"
	is Double -> "num的类型是Double"
	else -> "不受支持的类型"
}

这其中的IntFloatDouble是类,其实Kotlin舍弃了int等基本类型,相当于对这些基本类型做了一次二次封装,和Java的包装类相似

不带参数的when

这种when用到时非常好用,例如我要让getScore函数传递过来的字符串name中以"Tom"开头的人的分数都是80,我们可以写出如下的代码(这里无法使用带有参数的when完成)

fun getScore(name:String) = when {
				name.startsWith("Tom") -> 80
				else -> 60
			}

是不是非常容易理解?

循环

while循环

while循环与java的while循环并无太大区别。例如,我们要实现一个简单的1~100的奇偶判断,可以用如下方式写:

var i = 1
while(i <= 100){
	when {
		i % 2 == 0 -> println("$i 为偶数")
		else -> println("$i 为奇数")
	}
	i++
}

$i的写法是一种语法糖,叫做字符串模板,是一种可以在字符串内部书写变量的方式,只需要用美元符号打头就行,如果里面要是有.运算符进行调研各种方法,那么需要使用{}括起来,类似于"${str.toInt()}",是不是很方便?

for循环

上述使用while循环书写的方式似乎还是有点复杂,有没有更快的方法呢?答案当然是有的,使用for…in循环

前置知识

kotlin中有一个特殊的区间表示语法,例如[0,10]可以表示为0..10,注意们这里是闭区间。众所周知,数组的下标是从0开始的,所以这可能不怎么符合各位写代码的逻辑。我猜测官方也考虑到了这点,于是就有了until关键字。until关键字能实现左闭右开的效果,即[0,10)的区间可以写为0 until 10。当然官方也提供了倒序的语法,例如[10,0](这么些可能不符合数学上的定义,但是为了讲解方便就这们写了吧),可以写为10 downto 0。当然,官方也提供了step语法来进行步长的选择可以使用1..100 step 2来筛选出奇数

正式讲解

有了如上的基础之后,我们便可以完成使用for..in循环判断1~100的哪些数字是奇数还是偶数了

for(i in 1..100){
	when {
		i % 2 == 0 -> println("$i 为偶数")
		else -> println("$i 为奇数")
	}
}

是不是感觉方便了很多?

面向对象

在Kotlin中定义普通的类的方式与java相同,即使用class关键字。下面是一个例子,我们定义一个Person类,这个类中有agename属性,有getInfo方法,打印出该person实例的信息。

fun main(){  
    val person = Person()  
    person.name = "Jack"  
    person.age = 18  
    person.getInfo()  
}  
  
class Person {  
    var name = ""  
    var age = -1  
  
    fun getInfo(){  
        println("name: $name, age: $age")  
    }  
}

运行结果为name: Jack, age: 18。可以看出,定义的属性和方法默认为public,这里我使用了var关键字修饰而不是使用val是因为后续需要对其进行修改,当然,如果之前有接触过面向对象的朋友应该知道构造方法。构造方法允许我们在实例化对象时就对其属性进行初始化,这时候可以声明为val了,但是如果后续的代码中还需要对其进行更改,还是要使用var关键字进行声明。

更新中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值