《Kotlin核心编程》热身篇——Kotlin基础内容总结

1 Kotlin设计哲学

  1. 目标:更好的Java
  2. 编程方式:面向对象命令式编程+函数式编程(Scala有包括宏)
  3. 一些改良:单例模式,data数据类,NPE,可变性,更多的语法糖,类型推导

2 Kotlin基础语法

2.1 类型声明

  1. 类型声明:类型名放在后面
  2. 方法返回值类型,是否需要显示类型声明:表达式函数体(单行表达式与等号),代码块函数体。需要进行显示类型声明的情况:a、是函数的参数;b、是非表达式定义的函数,返回Unit时可不需显示声明;c、是一个递归的函数;d、公有方法的返回值时,建议显示声明,为了更好的代码可读性及输出类型的可控性。

2.2 var和val

  1. var:varible(变量)
  2. val:varible+final 或者value(值),声明的变量是只读变量,引用不可改变,但引用的对象可以改变。
  3. Kotlin开发原则:优先使用val来声明变量。尽可能采用val、不可变对象及纯函数来设计程序。纯函数:就是没有副作用(就是修改了某处的某些东西)的函数,具备引用透明性。
  4. 使用val声明变量的优势:a、这是一种防御性的编码思维模式,更加安全和可靠,因为变量的值不会被修改(反射技术除外);b、不可变的变量使得程序更容易推理,越是复杂的业务逻辑,优势越大。
  5. 使用var声明变量的优势:a、相比其他实现方式,var有更好的性能,占用内存更少,可以让程序显得直接、易于理解;b、针对于数据结构,可能需要存储大量数据,var更合适。

2.3 高阶函数和Lambda

  1. 函数式语言:函数是头等公民。a、可以在顶层直接定义一个函数;b、可以在函数内部定义一个局部函数;c、可以直接将函数像普通变量一样传递给另一个函数;d、在其他函数内被返回。
  2. 高阶函数:以其他函数作为参数或返回值的函数。它是一种更加高级的抽象机制,极大增强了语言的表达能力。

2.3.1 函数做参数

  1. 函数类型的格式: (Int) -> Unit 。a、通过 -> 符号来组织参数类型和返回值类型,左边是参数类型,右边是返回值类型;b、必须用一个括号来包裹参数类型;c、返回值类型即使是Unit,也必须显示声明。——接收函数
  2. 方法引用:通过 :: 实现对于某个类的方法进行引用。——传入函数
  3. 匿名函数:没有函数名字,传入函数时直接将匿名函数放在需要传入函数的位置。
  4. Lambda表达式:a、一个Lambda表达式必须通过 {} 来包裹;b、如果Lambda声明了参数部分的类型,且返回值类型支持类型推导,那么Lambda变量就可以省略函数类型声明;c、如果Lambda变量声明了函数类型,那么Lambda的参数部分的类型就可以省略;d、如果Lambda表达式返回的不是Unit,那么默认最后一行表达式的值类型就是返回值类型。
  5. fun:a、fun在没有等号、只有花括号的情况下,就是最常见的代码块函数体,如果返回非Unit值,必须带retrun;b、fun带有等号,是单表达式函数体,可以省略return;c、如果是等号+花括号,那么不管是用val还是fun,就是Lambda表达式,Lambda的参数在花括号内部声明。如果左侧是fun,必须通过 () 或invoke来调用Lambda。
  6. 闭包:闭包就是访问外部环境变量的函数。a、闭包是函数;b、闭包能够访问外部环境变量,也能对其进行修改;c、Lambda表达式、匿名函数、函数内部的函数条件语句等都可以理解为闭包

2.3.2 函数做返回值

        柯里化:类似“击鼓传花”游戏,是函数作为返回值的一种典型应用,是为了解决多参数的问题(Lambda演算是函数式语言的基础,然而它要求所有函数都只能接收最多一个参数)。

        大部分场景下,可以用函数作为返回值来代替柯里化的方案。Kotlin中语法糖的存在,使得很少使用柯里化技术。

2.4 面向表达式编程

  1. 表达式和语句:表达式是可以返回值的语句。包括:1;-1;1+1;listOf(1,2,3),lambda表达式;匿名函数表达式和ifelse表达式等。
  2. Unit:Unit类型让函数调用皆为表达式,引入Unit是为替代Java中的void关键字。
  3. 表达式:表达式比语句更安全,杜绝了副作用;有更好的表达能力。
  4. ?:——Kotlin中没有采用三元运算符,这个叫Elvis运算符,用来给一种可空类型的变量指定为空情况下的值。
  5. when表达式:可优化ifelse,类似switch语句
  6. for循环:for(i in 1..10)
  7. 范围表达式:.. 顺序/downTo 倒序/step 步长/until 包左不包右 ;eg:for(i in 10 downTo 1 step 2);for(i in 1 until 10)
  8. in:用来检查一个元素是否是一个区间或集合中的成员。
  9. 中缀表达式:不好理解,更像自然语言。

2.5 字符串的定义和操作

  1. 定义原生字符串:"""。用3个引号定义的字符串,最终的打印格式与代码中所呈现的格式一致。
  2. 字符串模版:${变量}。也可以把表达式通过这种方式插入字符串,如:"Kotlin has ${if("Kotlin".length > 0) "Kotlin".length else "no"} letters. ==> Kotlin has 6 letters.
  3. 字符串判等:== 判断对象内容是否相等;=== 判断对象的引用是否相等。对于原始类型,==与===无差别。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值