Kotlin学习(三):表达式(1)


const val b = 3 编译器即可确定常量的值 , 并用值替换调用处

val c : Int 运行时才能确定的值 , 调用处通过引用获取值

如下:

//const val b = 3 字面量必须立即初始化

const val b = 3

//val c : Int 只有在运行时 才确定 c的值 所以也称作 运行时常量

val c: Int

if (b == 2) {

c = 2

} else {

c = 3

}

二、分支表达式

==========================================================================

1. if…else


kotlin里面if…else可以当作表达式使用,例如:

c = if(a==3) 4 else 5

2.when表达式 类似于 java的switch


与java switch对比如下:

//java

switch(a){

case 0 : c = 5; break;

case 1 : c = 4; break;

default : c = 20 ;

}

//kotlin

when(a){

0 -> c = 5

1 -> c = 4

else -> c = 20

}

when 多个值相同 可用,间隔 如下所示:

when(a){

0 , 2 -> c = 5

1 -> c = 4

else -> c = 20

}

//也可写为

c = when(a){

0 , 2 -> 5

1 -> 4

else -> 20

}

3.try…catch


try…catch 也是表达式,可直接将变量提取使用

//java

try{

c = a/b;

}catch(Exception e){

e.printStactTrace();

c = 0;

}

//kotlin

c = try{

a/b

}catch(e:Exception){

e.printStactTrace()

0

}

三、kotlin运算符重载与中辍表达式

======================================================================================

1.kotlin运算符重载


运算符operator,kotlin支持运算符重载,但是运算符的范围仅限官方指定的符号:官网路径

用于重载运算符的所有函数都必须使用operator关键字标记。如下简单的demo所示:

// 一个简单的数据类

data class Foo(val x: Int, val y: Int) {

operator fun plus(other: Foo) : Foo = Foo(x + other.x, y + other.y)

}

fun main(args: Array) {

// 使用的时候

val f1 = Foo(10, 20)

val f2 = Foo(30, 40)

// 直接用+运算符代替plus函数,事实上会调用plus函数

println(f1 + f2) // 打印内容为Foo(x=40, y=60)

}

也可以使用扩展函数对运算符进行重载,如下所示:

// 自定义复数运算符 重载运算符

/**

  • @param real 实部

  • @param image 虚部

*/

class Complex(var real: Double, var image: Double) {

override fun toString(): String {

return “real: r e a l i m a g e : real image: realimage:{image}i”

}

}

// 使用扩展方法 进行运算符重载

operator fun Complex.plus(other: Complex): Complex {

return Complex(this.real + other.real, this.image + other.image)

}

operator fun Complex.plus(other: Double): Complex {

return Complex(this.real + other, this.image)

}

operator fun Complex.plus(other: Int): Complex {

return Complex(this.real + other, this.image)

}

operator fun Complex.minus(other: Complex): Complex {

return Complex(this.real - other.real, this.image - other.image)

}

fun main(){

// 运行 自定义复数例子

val complex1 = Complex(3.0, 2.0)

val complex2 = Complex(2.0, 3.0)

//使用

println((complex1 + complex2).toString())

println((complex1 + 1).toString())

println((complex1 + 1.2).toString())

println((complex1 - complex2).toString())

}

除了上述的加减之外,kotlin还支持其他类型的运算符重载,具体可上,官网查看。

Demo:为String实现四则运算

// 为string实现四则运算

// minus 减

operator fun String.minus(right: Any?): String {

val str = right?.toString() ?: “”

return this.replaceFirst(str, “”)

}

// times

operator fun String.times(right: Int): String {

return (1…right).joinToString(“”) { this }

}

// div 除

operator fun String.div(right: Any?): Int {

val str = right?.toString() ?: “”

// windowed 返回给定大小的窗口的快照列表,这些快照沿着给定步骤的字符序列滑动,其中每个快照都是一个字符串。 count 返回为true的个数

return windowed(str.length, 1) {

it == str

}.count { true }

}

fun main() {

val str = “hello world world”

// minus

println(str - “hello”)

// times

println(“*” * 20)

// div

println(str / “l”)

}

2.kotlin中辍表达式 infix


中辍表达式使用infix标记

那什么是中辍表达式呢?

在第一章学习的时候,我们知道Pair是一个对象 包含两个值,frist以及second 。源码如下所示:

public data class Pair<out A, out B>(

public val first: A,

public val second: B

) : Serializable {

/**

  • Returns string representation of the [Pair] including its [first] and [second] values.

*/

public override fun toString(): String = “($first, $second)”

}

如何快速生成Pair呢? 如下所示

val pair1: Pair<Int, Int> = 2 to 3

这个to就是一个中辍表达式,定义源码如下:

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

仿照上方源码,我们自定义一个中辍表达式,如下:

// 定义中辍表达式

infix fun String.rotate(count: Int): String {

val index = count % this.length

return this.substring(index) + this.substring(0, index)

}

fun main(){

// 使用自定义的中辍表达式

val s = “helloworld” rotate 5

println(s)

}

//运行结果为

worldhello

四、Lambda表达式

==============================================================================

1.kotlin匿名函数


kotlin普通函数以及kotlin匿名函数对比

//一个普通函数

fun func(){

println(“hello”)

}

//一个匿名函数

fun(){

println(“hello”)

}

//匿名函数的引用

val func = fun(){

println(“hello”)

}

//对引用的匿名函数调用

func()

2.匿名函数的类型


kotlin匿名函数的类型与普通函数一致

val func : () -> Unit = fun(){

println(“hello”)

}

3.Lambda表达式的定义,java与kotlin对比


示例如下所示(其中java的实例,指的是从java8开始):

//java

Runnable lambda = () -> {

System.out.println(“hello”);

}

//kotlin

val lambda = {

println(“hello”)

}

面试宝典

面试必问知识点、BATJ历年历年面试真题+解析

学习经验总结

(一)调整好心态
心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
对于一名程序员来说,技术知识方面是非常重要的,可以说是重中之重。要面试大厂,自己的知识储备一定要非常丰富,若缺胳膊少腿,别说在实际工作当中,光是面试这一关就过不了。对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
点击传送门,即可获取!

AA9E1oZu-1715671926750)]

学习经验总结

(一)调整好心态
心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
对于一名程序员来说,技术知识方面是非常重要的,可以说是重中之重。要面试大厂,自己的知识储备一定要非常丰富,若缺胳膊少腿,别说在实际工作当中,光是面试这一关就过不了。对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
点击传送门,即可获取!

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值