Kotlin-改良的java(三)
20天打卡计划 day03
Kotlin-核心语法:
面向表达式编程:
表达式也是Kotlin中的重要概念,我们之前学过Lambda表达式,if表达式,函数体表达式等牛逼哄哄的表达式,这节重点介绍一下表达式的重要性,利用表达式来增强程序表达;
表达式定义:表达式可以是一个值,常量,变量,操作符,函数,或者他们之间的组合,编程语言对其进行解释和计算,以求产生另外一个值。
表达式的例子:
1
-1
1+1
listof(1,2,3)
"kotlin".length
{x:Int -> x + 1} // lambda表达式 类型是(Int -> Int)
fun(x: Int) {println(x)} //匿名函数表达式 ,类型是Uint
if( x > 1) x else 1 //if else 表达式
面向表达式编程的优点:
1.更安全:
// Java程序
Sting a = null;
if(flag){
a = "捞川";
}else{
System.out.println("xxx");
}
//Kotlin程序
val a = if(flag) "捞川" else ""
品一品: 首先两个if的作用都是给a赋值,但是如果出现flag为假的情况,那么a就是空值,会报错,但是使用表达式编程就不存在不赋值的情况,我们可能犯的错误Kotlin帮我们杜绝掉了,而且代码更紧凑,在赋值的前提下,这种表达式比if else语句更加严谨和可读;
2.函数调用也是表达式:
Kotlin不接受一切皆表达式的概念但是引入了函数调用是表达式,Uint这个关键词我们之前见过很多次了,其实他是用来代替Java中的void的,void代表没有返回类型,但是Unit有返回类型,可以把它看作是(),用这种方式来实现诸如函数类型等高阶函数的操作;
枚举类:
enum class Day {
MON,
TUE,
WEN,
THU,
FRI,
SAT,
SUN
}
与Java中的enum语法大体相似,多了一个class关键词,说明是一个类,可以定义构造方法以及额外的属性和方法:
enum class DayOfWeek( val day: Int) {
MON(1),
TUE(2),
WEN(3),
THU(4),
FRI(5),
SAT(6),
; //如果是额外的方法或属性,必须加上分号
fun getDayNumber() : Int {
return day;
}
}
when语法:
fun schedule(sunny: Boolean, day: Day) = when (day) {
Day.SAT -> basketball()
Day.SUN -> fishing()
Day.FRI -> appointment()
else -> when{
sunny -> library()
else -> study()
}
}
一个完整的when表达式类似switch语句,花括号内是分支,每个分支由->连接,不再需要switch的break,由上到下匹配,一直到匹配完为止,否则执行else分支的逻辑,类似switch的default;
每个逻辑分支具有返回值,最终整个when表达式的返回类型就是所有分支相同的返回类型,或公共父类型。在上面的例子中,假设所有活动函数的返回值为Unit,那么编译器就会自动推导出when表达式的类型,即Unit,一下是一个非Unit的例子。
fun foo(a: Int) = when (a) {
1 -> 1
2 -> 2
else -> 0
}
>>> foo(1)
1
今天太少了,明天补上。。。