Kotlin 快速入门:
Kotlin 的 Hello World :
#hellokotlin.kt fun main(args:Array<String>){ println("hello kotlin!"); }
Kotlin 的 变量和常量 :
1 // eclipse 中运行的快捷键是 ctrl + f11 2 fun main(args:Array<String>){ 3 var i = 18; //变量 4 println(i); 5 6 val number = "No.123456"; //Val is can't be reassigned! //不能再被修改了 7 8 println(number); 9 // number = "No.159"; //此时不可以再被修改了
Kotlin的 常见容器的类型:
1 // eclipse 中运行的快捷键是 ctrl + f11 2 fun main(args:Array<String>){ 3 4 var i = 18; //这时是自动推断类型 5 6 var j:Int = 20; //显式指定j 的类型为Int 7 }
常见数据类型的取值范围:
1 fun main(args:Array<String>){ 2 //Byte 的取值范围 3 println(Byte.MAX_VALUE) 4 println(Byte.MIN_VALUE) 5 6 //Short 的取值范围 7 println(Short.MAX_VALUE) 8 println(Short.MIN_VALUE) 9 10 //Int 的取值范围 11 println(Int.MAX_VALUE) 12 println(Int.MIN_VALUE) 13 14 //Long 的取值范围 15 println(Long.MAX_VALUE) 16 println(Long.MIN_VALUE) 17 }
Kotlin的函数:
一些常见的函数:
(1)main函数:
它是默认执行的第一个程序,
1 fun main(args:Array<String>){ 2 /* 3 * 代码 4 * */ 5 }
(2)println() 函数:
它的作用是向控制台打印括号内的内容。
自定义函数:
1 fun main(args:Array<String>):Unit{ 2 var a = 10 3 var b = 5 4 println(plus(a,b)) 5 println(sub(a,b)) 6 println(mul(a,b)) 7 println(div(a,b)) 8 } 9 fun plus(a:Int,b:Int):Int{ 10 return a+b 11 } 12 fun sub(a:Int,b:Int):Int{ 13 return a-b 14 } 15 fun mul(a: Int,b: Int):Int{ 16 return a*b 17 } 18 fun div(a: Int,b:Int):Int{ 19 return a/b 20 }
Kotlin的boolean:
true 表示真, false 表示假。
1 fun main(args:Array<String>){ 2 var num1 = Math.sqrt(5.0) -Math.sqrt(4.0) 3 var num2 = Math.sqrt(4.0) - Math.sqrt(3.0) 4 5 print(num1>num2) //false 6 }
1 fun main(args:Array<String>){ 2 var num1 = Math.pow(2.0,100.0) //注:类型要是double 3 var num2 = Math.pow(3.0,75.0) 4 5 print(num1>num2) //false 6 }
Kotlin 的字符串模板:
1 fun main() { 2 test() 3 } 4 fun test(){ 5 var name = "Guido" 6 var a = "Life is short,I learn Python! ---${name}" //${} 7 println(a) 8 }
Kotlin 的if else 流程控制:
1 fun test(){ 2 var a = 5 3 var b = 10 4 if (a>b){ 5 println("a比b大") 6 }else{ 7 println("b比a大") 8 } 9 }
1 fun main() { 2 test() 3 } 4 fun test(){ 5 var a = 5 6 var b = 10 7 if (a>b){ 8 println("a比b大") 9 }else if(a==b){ 10 println("a与b相同") 11 } 12 else{ 13 println("b比a大") 14 } 15 }
Kotlin 的字符串比较:
1 fun main() { 2 test() 3 } 4 fun test(){ 5 var str1 = "tom" 6 var str2 = "tom" 7 8 println(str1 == str2) //true 9 println(str1.equals(str2))//true 10 11 var str3 = "Jack" 12 var str4 = "jack" 13 println(str3.equals(str4,true)) //true 表示忽略大小写 14 println(str3.equals(str4,false)) //true 表示忽略大小写 15 16 17 }
Kotlin 的空值处理:
null 也是值,它表示没有东西,没有数据。
1 fun test(str:String):String{ 2 return "Hello "+str 3 } 4 5 fun main(){ 6 var ret = test("Python") 7 println(ret) 8 //上面是正常的 9 // var ret1 = test(null) // 直接就报错了 10 }
1 fun test(str:String?):String{ 2 return "Hello "+str 3 } 4 5 fun main(){ 6 //如果一定要传null 的话 7 //可以在形参的后面加个? 8 var ret = test(null) 9 println(ret) //Hello null 10 }
Kotlin 的When表达式:
类似于c/java 中的switch 语句
1 fun test1(score:Int){ 2 when(score){ 3 10 -> println("满分") 4 9 -> println("优秀") 5 8 -> println("优秀") 6 7 -> println("还可以") 7 6 -> println("及格") 8 else -> println("不及格") 9 } 10 } 11 fun test(){ 12 test1(9) 13 } 14 15 fun main(){ 16 test() 17 }
Kotlin 的Loop 和Range :
1 fun test1(){ 2 ////////////////////////全闭区间///////////////////////////// 3 // var nums = 1 .. 100 //[1-100] 4 // for (num in nums ){ 5 // print("${num}, ") 6 // } 7 ////////////////////////全闭区间///////////////////////////// 8 ////////////////////////左闭右开区间///////////////////////////// 9 // var nums = 1 until 100 //[1-100) 10 // for (num in nums ){ 11 // print("${num}, ") 12 // } 13 ////////////////////////左闭右开区间///////////////////////////// 14 ////////////////////////设置步长///////////////////////////// 15 // var nums = 1 ..16 16 // for(num in nums step 2){ 17 // print("${num}, ") 18 // } 19 ////////////////////////设置步长///////////////////////////// 20 ////////////////////////序列常用的方法///////////////////////////// 21 // var nums = 1 .. 16 22 // var nums2 = nums.reversed() 23 // println(nums2) //16 downTo 1 step 1 24 // for (num in nums2 ){ 25 // print("${num}, ") //16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 26 // } 27 // println(nums.count()) // 总数为: 16 28 ////////////////////////序列常用的方法///////////////////////////// 29 30 } 31 fun test(){ 32 test1() 33 } 34 35 fun main(){ 36 test() 37 }
Kotlin 的List和Map:
List: 类似于Python 中的列表
1 fun test1(){ 2 var lists = listOf<String>("hello","world","python","life") 3 // println(lists) [hello, world, python, life] 4 5 // for(list in lists){ 6 // println(list) 7 // } 8 9 for((idx,value) in lists.withIndex()){ //可以将索引也打印出来 10 println("$idx $value") 11 // println("${idx} ${value}") 12 } 13 14 } 15 fun test(){ 16 test1() 17 } 18 19 fun main(){ 20 test() 21 }
map :类似Python 中的字典
1 import java.util.TreeMap 2 fun test1(){ 3 var map = TreeMap<String,Int>() //要从 java.util.TreeMap 4 map["tom"] = 10 5 map["jane"] = 20 6 map["jack"] = 30 7 map["john"] = 40 8 9 println(map) //{jack=30, jane=20, john=40, tom=10} 10 for((key,value) in map){ 11 println("Nmae: $key Age: $value") 12 } 13 } 14 fun test(){ 15 test1() 16 } 17 18 fun main(){ 19 test() 20 }
Kotlin 的函数式表达式:
当函数体内只有一条return 语句的时候,可以简写:
1 fun add(x:Int,y:Int):Int{ 2 return x+y 3 } 4 5 fun main (args:Array<String>){ 6 var res = add(5,3) 7 println(res) 8 }
简写如下:
1 fun add(x:Int,y:Int):Int = x+y 2 3 fun main (args:Array<String>){ 4 var res = add(5,3) 5 println(res) 6 }
它也可以采用:函数表达式来写:
第一种函数表达式:
1 //fun add(x:Int,y:Int):Int = x+y 2 3 fun main (args:Array<String>){ 4 var i = {x:Int,y:Int -> x+y} //这个就是函数表达式,i 就是函数名 5 var res = i(5,9) 6 println(res) 7 }
第二种函数表达式:
1 fun main (args:Array<String>){ 2 var i = {x:Int,y:Int -> x+y} //这个就是函数表达式,i 就是函数名 3 var res = i(5,9) 4 println(res) 5 6 var j:(Int,Int)->Int = {x,y -> x+y} //在声明j 的时候,就指明它的类型 7 var res2 = j(5,8) 8 println(res2) 9 10 }
Kotlin 函数中默认参数的使用:
1 val Pi = 3.1415926 2 fun getCircleCir(r:Double,PI:Double=Pi):Double{ 3 return 2* PI*r 4 } 5 fun main (args:Array<String>){ 6 7 var cir = getCircleCir(5.0) 8 println(cir) 9 }
Kotlin字符串和数字之间的转换:
1 import kotlin.reflect.typeOf 2 3 fun test(){ 4 var a = "13" 5 var b = a.toInt() 6 7 var c = 13 8 var d = c.toString() 9 } 10 fun main (args:Array<String>){ 11 test() 12 }
Kotlin使用readLine() 获取键盘输入:
1 fun test(){ 2 println("请输入一个数字:") 3 var a = readLine() //readLine() 接收键盘输入 4 println("请输入另一个数字") 5 var b = readLine() 6 7 println("${a} ${b}") 8 var ret = a!!.toInt() + b!!.toInt() //!! 可以避免两个null 相加 9 println(ret) 10 } 11 fun main (args:Array<String>){ 12 test() 13 }
Kotlin 异常处理:
1 2 fun test() { 3 while (true) { 5 println("请输入一个数字:") 6 var a = readLine() //readLine() 接收键盘输入 7 println("请输入另一个数字") 8 var b = readLine() 9 10 println("${a} ${b}") 11 ////////////////////////try - catch 异常处理///////////////////////////// 12 try { 13 var ret = a!!.toInt() + b!!.toInt() 14 println(ret) 15 } catch (e: Exception) { 16 println("请输入数字!!!") 17 } 18 ////////////////////////try - catch 异常处理///////////////////////////// 19 } 20 } 21 fun main (args:Array<String>){ 22 test() 23 }
Kotlin 递归:
1 fun test(num:Int):Int { 2 if(num == 1){ 3 return 1 4 } 5 return num*test(num-1) 6 } 7 fun main (args:Array<String>){ 8 var ret = test(5) 9 println(ret) 10 }
此时如果算100的阶乘 是不行的,将Int 换成Long 也是不行的,
这时可以用下面的 BigInteger来算大的数 。
1 import java.math.BigInteger 2 3 fun test(num:BigInteger):BigInteger { 4 if(num == BigInteger.ONE){ 5 return BigInteger.ONE 6 } 7 return num*test(num-BigInteger.ONE) 8 } 9 fun main (args:Array<String>){ //100的阶乘 10 var ret = test(BigInteger("100")) 11 println(ret) 12 } 13 /* 14 * 输出:933262154439441526816992388562667004907159682643816214685929638952175999 15 * 93229915608941463976156518286253697920827223758251185210916864000000000000000000000000 16 * 17 * */
Kotlin 尾递归优化:
1 // 用递归实现累加 2 fun test(n:Int):Int{ 3 if (n == 1){ 4 return 1 5 } 6 return n+test(n-1) 7 } 8 9 fun main(args:Array<String>){ 10 var res = test(100) //此时如果是 100000 的累加的话就会报出StackOverFlow 栈溢出错误! 11 println(res) 12 }
这时可以用尾递归优化来解决这个问题:
1 tailrec fun test(n:Int,result:Int):Int{ //tailrec 尾递归优化! 2 if (n == 1){ 3 return result +1 4 } 5 return test(n-1,result+n) //尾递归要求返回的直接是函数本身。 6 } 7 8 fun main(args:Array<String>){ 9 var res = test(100000,0) //结果是:705082704 10 println(res) 11 }