Kotlin的快速入门

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 }
原文地址:https://www.cnblogs.com/zach0812/p/11428871.html