美文网首页kotlin
Kotlin零基础入门

Kotlin零基础入门

作者: MengkZhang | 来源:发表于2019-06-03 22:22 被阅读0次

kotlin中文api网站

简介

话说俄罗斯的程序员觉得Java语言用起来不牛逼也不方便,于是开始搞事情,发明了即牛逼又方便Kotlin用于提高生产效率,那帮俄罗斯的哥们儿在一个叫科特林的岛上编程,所以语言叫Kotlin。


image.png

Eclipse下安装Kotlin插件

help -> Eclipse Marketplace ->find ->Kotlin 安装 重启即可


image.png

Kotlin编写第一个程序

fun main(args: Array<String>) {
    println("Hello Kotlin")
}

这个没啥分析头。先背下来 背下来

变量和输出

Kotlin的变量类型
Byte
Short
Int
Long
Float
Double
String

Kotlin的自动类型推断

fun main(args: Array<String>) {
    
    var i = 9
    
    i = 9999
    
    //超过了int的范围 编译报错
    i = 9999999999999
    
    //Kt推断这是一个长整形
    var j = 9999999999999
    
    //Kt推断这是一个字符串
    var s = "hahha"
    
    println(i)
    
}

Kotlin的显示数据声明

fun main(args: Array<String>) {
    
    //Kotlin的显示数据声明
    
    var i: Int = 9
    
    i = 9999
    
    var j:Long = 9999999999999
    
    var s:String = "hahha"
    
    println(i)
    println(j)
    println(s)
    
}

常量的定义val(value)

    //常量的定义 常量value不能被再次赋值
    val number = "NO.8888"

总结:

var声明变量

val声明常量

不同的数据类型用不同的容器保存

Kotlin会通过等号后面的值自动推断数据类型

可以用显示的指定数据类型

常见的容器类型

Byte

Short

Int

Long

Float

Double

String

函数

Kotlin函数编写规则

fun 函数名(参数名:参数类型):返回值类型 {
函数体
}

fun main(args:Array<String>):Unit {
}

Unit表示没有返回值,可以省略不写

fun main(args:Array<String>) {
    print1star()
    print2star()
    print3star()
    print2star()
    print1star()
}

fun print1star() {
    println("  *  ")
}

fun print2star() {
    println(" *** ")
}

fun print3star() {
    println("*****")
}

简易计算器

fun main() {
    val add = add(2,2)
    val jian = jian(2,2)
    val cheng = cheng(2,2)
    val chu = chu(2,2)
    println("add = " + add)
    println("jian = " + jian)
    println("cheng = " + cheng)
    println("chu = " + chu)
}

fun add(a: Int, b: Int): Int {
    return a + b
}

fun jian(a: Int, b: Int): Int {
    return a - b
}

fun cheng(a: Int, b: Int): Int {
    return a * b
}

fun chu(a: Int, b: Int): Int {
    return a / b
}

kotlin1.3的main()函数可以不传参数

Kotlin环境配置(仿照JDK的安装配置)

1,在GitHub上下载kotlin-compiler

2,配置环境:Kotlinc的安装目录
KOTLIN_HOME
D:\work\Kotlin\kotlinc

在path中添加:
%KOTLIN_HOME%\bin

3,在CMD终端下输入kotlinc命令


Kotlin命令交互式终端编程

C:\Users\zhang>KOTLINC
Welcome to Kotlin version 1.1.2 (JRE 1.8.0_121-b13)
Type :help for help, :quit for quit
>>> 4>6
false
>>> Math.pow(2.0,2.0)
4.0
>>> Math.sqrt(6.0)

Kotlin字符串模板 ${XXX}

fun main() {
    var one = createDayliLife("春熙路")
    println(one)
}

fun createDayliLife(placeName: String): String {
    var temple = """
        今天天气晴朗,我去${placeName}玩,
        首先映入眼帘的是${placeName} ${placeName.length}个大字
    """
    return temple
}

程序运行结果

        今天天气晴朗,我去春熙路玩,
        首先映入眼帘的是春熙路 3个大字

Kotlin条件控制语句if else

fun shuai(score: Int): String {
    if (score > 80) {
        return "这是一个帅哥"
    } else {
        return "这不是一个帅哥"
    }
}

调用

    var score = 79
    println(shuai(score))

比较两个数中的最大数

fun max(a: Int,b: Int): Int{
    if (a > b) {
        return a
    } else {
        return b
    }
}

调用:

    var a = 5
    var b = 10
    println("${a}和${b}中最大的数是${max(a,b)}")

Kotlin中字符串比较

    var name1 = "andy"
    var name2 = "Andy"
    println(name1 == name2)
    println(name1.equals(name2))
    println(name1.equals(name2,true))
    println(name1.equals(name2,false))

结果哦

false
false
true
false

Kotlin空值处理

默认参数是非空,在编译时不能够传null,加上?号表示参数可以为空,可以传null

//默认参数是非空,在编译时不能够传null,加上?号表示参数可以为空,可以传null
fun heat(str: String?): String {
    return "热${str}"
}

调用

println(heat(null))

!!表示不为空

    println("请输入第一个数字:")
    val num1 = readLine()
    println("请输入第二个数字:")
    val num2 = readLine()

    //!!表示不为空
    var numm1: Int = num1!!.toInt()
    var numm2:Int = num2!!.toInt()
    println("${num1}+${num2}的和为${numm1 + numm2}")

结果

请输入第一个数字:
2
请输入第二个数字:
3
2+3的和为5

Kotlin的when表达式

有点像Java的switch case但又更加简洁强大

//10分 满分 9干得不错 8还可以 7分还需要努力 6分刚及格 其他 需要加油哦
fun gradeStu(score: Int) {
    when(score) {
        10 -> println("10分 满分")
        9 -> println("9干得不错")
        8 -> println("8还可以")
        7 -> println("7分还需要努力")
        6 -> println("6分刚及格")
        else -> println("需要加油哦")
    }
}

调用

gradeStu(9)

结果

9干得不错

Kotlin中的loop和range

计算从1到100的和

    //定义了一个1到100的数组
    var nums = 1 .. 100
    var result = 0
    for (num in nums) {
        print("${num},")
        result = result + num
    }
    println("结果是${result}")

两边都是闭区间
var nums = 1 .. 100 //[1,100]
左闭右开
var nums2 = 1 until 5

    var nums2 = 1 until 5
    for (num in nums2) {
        print("${num},")  //1,2,3,4,
    }

step

    var num3 = 1 .. 16
    for (num in num3 step 2) {
        print("${num},")  //1,3,5,7,9,11,13,15,
    }

list和map

list

    var list = listOf("买鸡蛋","买大米","买水果","买杜蕾斯")
    for ((i,e) in list.withIndex()) {
        println("${i}   ${e}")
    }

结果

0   买鸡蛋
1   买大米
2   买水果
3   买杜蕾斯

map

    var map = TreeMap<String,String>()
    map["good"] = "好好"
    map["study"] = "学习"
    map["day"] = "天天"
    map["up"] = "向上"
    println(map["study"])  //学习

函数和函数式表达式

fun main() {
    var x = 2
    var y = 3
    println(add1(x, y)) //5
    println(add2(x, y)) //5

    //把函数表达式赋值给i
    var i = { x: Int, y: Int -> x + y }

    var result = i(x, y)
    println(result)

    var j: (Int, Int) -> Int = { x, y -> x + y }

    var result2 = j(x,y)
    println(result2)

}

fun add2(x: Int, y: Int): Int = x + y

fun add1(x: Int, y: Int): Int {
    return x + y
}

默认参数和具名参数

求圆的面积

val PI = 3.14f

fun getArea(pi: Float, r: Float):Float {
    return pi * r * r
}
fun getArea2(pi: Float = PI, r: Float):Float {
    return pi * r * r
}

调用

    var r = 2.0f
    println(getArea(PI,r))//默认参数

    println(getArea2(r = r))//具名参数

字符串和整形转换

    var a = "13"
    var b = 13
    
    a = b.toString() //字符串转整形
    b = a.toInt()    //整形转字符串

异常处理

    println("请输入第一个数字:")
    val num1 = readLine()
    println("请输入第二个数字:")
    val num2 = readLine()

    try {
        //!!表示不为空
        var numm1: Int = num1!!.toInt()
        var numm2:Int = num2!!.toInt()
        println("${num1}+${num2}的和为${numm1 + numm2}")
    } catch (e:Exception) {
        println("请输入正确的数据")
    }

结果

请输入第一个数字:
1
请输入第二个数字:
a
请输入正确的数据

递归

计算5的阶乘

fun fac(num: Int): Int {
    if (num == 1) {
        return 1
    } else {
        return num * fac(num - 1)
    }
}
println(fac(5))

计算100的阶乘,它的结果已经超过了Int和Long的范围,用BigInteger来解决

fun facBig(num:BigInteger):BigInteger {
    if (num == BigInteger.ONE) {
        return BigInteger.ONE
    } else {
       return num * facBig(num - BigInteger.ONE)
    }
}
    var bigNum = BigInteger("100")
    println(facBig(bigNum))

结果:

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

累加的操作:从1加到100

fun oldAdd(num: Int): Int {
    if (num == 1) {
        return 1
    } else {
        return num + oldAdd(num - 1)
    }
}
println(oldAdd(100)) //5050

如果递归算100000的累加和,Java是做不到的报错StackOverflowError
解决方案:

Kotlin的尾递归优化tailrec

告诉计算机 让它计算100000次

//尾递归优化
tailrec fun oldAdd(num: Int,result: Int): Int {
    println("这是倒数第${num}次运算----结果为${result}")
    if (num == 0) {
        return 1
    } else {
        return oldAdd(num - 1,result + num)
    }
}
    var res = 0
    println(oldAdd(100000,res)) //
//    这是第1次运算----结果为705082703
//    这是第0次运算----结果为705082704

相关文章

网友评论

    本文标题:Kotlin零基础入门

    本文链接:https://www.haomeiwen.com/subject/jzshxctx.html