Kotlin学习笔记一基础语法
2018-03-04 16:19
429 查看
一,函数:fun 函数名(参数名:参数类型):返回值类型{
函数体
}1. fun 是函数的声明,固定写法
2.main方法是程序的入口fun main(args:Array<String>){
println("hello kotlin");
}3.返回值类型:Unit,代表无返回值,可以省略不写
二,常见数据类型:
Byte,Short,Int,Long,Float,Double,String(怎么没有Boolean和Char)
类型推断(Type inference) : kotlin会通过类型推断自动推断数据类型
var 声明变量 val声明常量
字符串模版"${name}喜欢吃汤圆"
三,if判断,when表达式,空值处理kotlin里面,默认参数是不允许传null,参数加上?代表可以接受null。这样就在程序编写时,避免了空指针异常。
四,loop和range是啥?字符串转数字?尾递归优化?var width = 0 ..99 (width的取值是[0,99],闭区间,包含0和99)
实际上就是把
var height = 1 until 100 // [1,100) 半开区间,包含1,不包含100
字符串转数字var a ="12"var b =12a = b.toString()//把数字b转成字符串存进ab = a.toInt() //把字符串a转成数字存进b
关键字step步长,从第一个数开始,每隔3个步长取值for(i in1..5step3)print(i)// 输出 14
倒序输出是downTo//倒序输出5 4 3 2 1 0for( i in 5 downTo 0 ){ println(i) }
集合API:reversed反转集合 count集合总数
★java中如果递归次数太多,会造成StackOverflowError,kotlin中利用尾递归优化解决
五,一些思想:面向对象,封装,继承,抽象类和多态,接口和抽象类
父类中open修饰的方法,才可以被子类重写
★接口是事物的能力,抽象类是事物的本质。
六,委托和代理 kotlin代理接口by委托是把事情托付给别人或别的机构办理
代理是指以他人的名义,在授权范围内进行对被代理人直接发生法律效力的法律行为。代理的产生,可以是受他人委托。
星期一,星期二,星期三,星期四,星期五,星期六,星期日
}
fun main(args:Array<String>){
println(Week.星期五)
}
八,印章类, Sealed class 子类类型有限的class
abstract类的子类可以使任意类型,sealed的子类限定了,只能是类中已定义的。
印章类和枚举的区别:
★Sealed class 更在意类型,枚举更在意数据。
九,闭包Closure???
让函数成为编程语言中的一等公民
让函数具有对象所具有的能力(封装)
让函数具有状态
所有:函数、Lambda、if语句、for、when,都可以称之为闭包。通常情况下,我们所说的闭包是 Lambda 表达式下面if 语句是一个闭包。
自执行闭包就是在定义闭包的同时直接执行闭包,一般用于初始化上下文环境。 例如:
十,编程方式 函数式编程
OOP面向对象编程
FP 函数式编程
AOP 面向切面编程 Aspect Oriented Programming
PO 面向过程编程 Procedure Oriented
函数式编程的优点:
简洁,方便理解
方便程序修改和扩展
十一,高阶函数
一个用函数作为参数或者返回值的 函数
maxBy函数 获取最大值
minBy函数 获取最小值
filter函数 过滤指定条件 接收参数是一个布尔表达式
map函数 某些属性映射成新的集合
any函数 结果是boolean类型,判断是否满足给定的条件
count函数 统计满足条件的个数
find函数 查找第一个满足条件的数据
groupBy函数 按条件分组
十二,DSL (领域特定语言Domain Specify Language)
扩展函数 :List<T>.myFunction(参数:参数类型){} 给list集合扩展一个myFunction方法
中缀表达式 infix :infix修饰的方法,可以用空格代替点来调用方法,是代码可读性提高
函数体
}1. fun 是函数的声明,固定写法
2.main方法是程序的入口fun main(args:Array<String>){
println("hello kotlin");
}3.返回值类型:Unit,代表无返回值,可以省略不写
二,常见数据类型:
Byte,Short,Int,Long,Float,Double,String(怎么没有Boolean和Char)
类型推断(Type inference) : kotlin会通过类型推断自动推断数据类型
var 声明变量 val声明常量
字符串模版"${name}喜欢吃汤圆"
三,if判断,when表达式,空值处理kotlin里面,默认参数是不允许传null,参数加上?代表可以接受null。这样就在程序编写时,避免了空指针异常。
四,loop和range是啥?字符串转数字?尾递归优化?var width = 0 ..99 (width的取值是[0,99],闭区间,包含0和99)
实际上就是把
..看做是方法名,调用 0 的
rangeTo方法,传入 99 作为参数,会返回一个闭区间对象
var height = 1 until 100 // [1,100) 半开区间,包含1,不包含100
字符串转数字var a ="12"var b =12a = b.toString()//把数字b转成字符串存进ab = a.toInt() //把字符串a转成数字存进b
关键字step步长,从第一个数开始,每隔3个步长取值for(i in1..5step3)print(i)// 输出 14
倒序输出是downTo//倒序输出5 4 3 2 1 0for( i in 5 downTo 0 ){ println(i) }
//step和downTo混合使用 for( i in 5 downTo 1 step 3) print(i)//输出52
集合API:reversed反转集合 count集合总数
★java中如果递归次数太多,会造成StackOverflowError,kotlin中利用尾递归优化解决
//累加计算 fun main(args: Array<String>){ var result =0L print(ollAdd(100000))//栈溢出异常 print(ollAdd2(100000,result))//正常输出结果 } fun ollAdd(num :Int):Int{ println("第${num}次运算") return if (num==1) { 1 }else num+ollAdd(num-1) } tailrec fun ollAdd2(num :Long,result:Long):Int{ println("第${num}次运算,运算结果$result") return if (num==0L) { 1 }else ollAdd2(num-1,num+result) }
五,一些思想:面向对象,封装,继承,抽象类和多态,接口和抽象类
父类中open修饰的方法,才可以被子类重写
★接口是事物的能力,抽象类是事物的本质。
六,委托和代理 kotlin代理接口by委托是把事情托付给别人或别的机构办理
代理是指以他人的名义,在授权范围内进行对被代理人直接发生法律效力的法律行为。代理的产生,可以是受他人委托。
//洗碗的接口 interface IWashBowl{ fun washing() } //大头儿子类,具备洗碗方法,一次挣一块钱 class BigHeadSon : IWashBowl{ override fun washing(){ println("我是大头儿子,我在开心的洗碗,1次赚一块钱") } } //小头爸爸也具备洗碗能力,洗一次碗挣10块钱,但是但是小头爸爸让大头儿子去洗, class SmallHeadFather:IWashBowl by BigHeadSon(){ override fun washing() { println("我是小头爸爸,我在开心的洗碗,1次赚十块钱") BigHeadSon().washing() print("我看着儿子把碗洗完了") } }七,枚举enum class Week{
星期一,星期二,星期三,星期四,星期五,星期六,星期日
}
fun main(args:Array<String>){
println(Week.星期五)
}
八,印章类, Sealed class 子类类型有限的class
abstract类的子类可以使任意类型,sealed的子类限定了,只能是类中已定义的。
印章类和枚举的区别:
★Sealed class 更在意类型,枚举更在意数据。
九,闭包Closure???
让函数成为编程语言中的一等公民
让函数具有对象所具有的能力(封装)
让函数具有状态
所有:函数、Lambda、if语句、for、when,都可以称之为闭包。通常情况下,我们所说的闭包是 Lambda 表达式下面if 语句是一个闭包。
fun main(args: Array<String>) { test } val test = if (5 > 3) { print("yes") } else { print("no") }
自执行闭包就是在定义闭包的同时直接执行闭包,一般用于初始化上下文环境。 例如:
{ x: Int, y: Int -> println("${x + y}") }(1, 3)
十,编程方式 函数式编程
OOP面向对象编程
FP 函数式编程
AOP 面向切面编程 Aspect Oriented Programming
PO 面向过程编程 Procedure Oriented
函数式编程的优点:
简洁,方便理解
方便程序修改和扩展
十一,高阶函数
一个用函数作为参数或者返回值的 函数
maxBy函数 获取最大值
minBy函数 获取最小值
filter函数 过滤指定条件 接收参数是一个布尔表达式
map函数 某些属性映射成新的集合
any函数 结果是boolean类型,判断是否满足给定的条件
count函数 统计满足条件的个数
find函数 查找第一个满足条件的数据
groupBy函数 按条件分组
十二,DSL (领域特定语言Domain Specify Language)
扩展函数 :List<T>.myFunction(参数:参数类型){} 给list集合扩展一个myFunction方法
中缀表达式 infix :infix修饰的方法,可以用空格代替点来调用方法,是代码可读性提高
相关文章推荐
- Kotlin 博客 基础语法学习笔记
- Kotlin 学习笔记(二)—— 基础语法
- kotlin学习笔记-2-基础语法
- Kotlin学习笔记-基础语法
- Kotlin基础语法学习笔记
- Kotlin 入门基础语法学习笔记
- Kotlin学习笔记之基础语法
- Kotlin学习笔记1-1 入门-语法基础
- Python学习笔记一(Python基础语法)
- JavaScript学习笔记 - 进阶篇(1)- JS基础语法
- 第五天02 JAVA基础语法(认识对象)(学习笔记)
- Python系列学习笔记(二)——基础语法规则
- Python学习笔记3-基础语法学习
- Swift 3.0 学习笔记-1-基础语法
- 【学习笔记】python的基础语法
- PHP学习笔记--第二章:语法基础
- Python3 学习笔记2_基础语法_20180210
- JAVA学习笔记——JAVA基础语法(八)
- Java学习笔记——java语法基础
- PHP学习笔记2-php基础语法