Kotlin基础

1.函数

a.语句式函数

fun 函数名称(参数列表):返回类型{
      函数体
}

b.表达式函数

fun 函数名称(参数列表):返回类型 = 表达式
fun 函数名称(参数列表) = 表达式

fun main(args:Array<String>){
    println(max1(4,5))
}

fun max1(a:Int,b:Int) = if(a>b) a else b

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

2.变量

a.不可变变量:val

b.可变变量:var

3.字符串模板

a. ${变量名}

b. ${表达式}

fun main(args:Array<String>){
    val name = if (args.size > 0) args[0] else "Kotlin"
    println("Hello,${name}")
}

4.类

a.简单类

class Person (val name : String)

b.属性

只读属性:val
可变属性:var

class Person (
    val name : String
    var isMarried: Boolean
)

c.自定义访问器

class Rectangle(val height:Int,val width:Int) {
    val isSquare:Boolean
        get() {return height == width}
        //get() = height == width
}

d.使用类

val rectangle = Rectangle(41,42)
println(rectangle.isSquare)

5.枚举

a.简单枚举

enum class Color {
    RED,ORANGE,YELLOW,GREEN,BLUE,INDIGO,VIOLET
}

b.带属性枚举

enum class Color (val r:Int,val g:Int,val b:Int){
    //注意分号
    RED(255,0,0),ORANGE(255,165,0),BLUE(0,0,255);

    fun rgb() = (r * 256 +g) * 256 + b
}

使用
println(Color.RED.rgb())

6.when

a.使用when选择正确枚举值

fun getMnemonic(color:Color) =
        when (color){
            Color.RED -> "Red"
            Color.ORANGE -> "Orange"
            Color.BLUE -> "Blue"
        }

println(getMnemonic(Color.BLUE))

b.一个when上合并多个分支

fun getMnemonic(color:Color) =
        when (color){
            Color.RED,Color.ORANGE -> "OrangeRed"
            Color.BLUE -> "Blue"
        }

c.在when结构中使用任意对象

fun mix(c1:Color,c2:Color) = 
        when(setOf(c1,c2)){
            setOf(Color.RED,Color.BLUE) -> Color.BLUE
            setOf(Color.RED,Color.ORANGE) -> Color.ORANGE
            else -> throw Exception("error")
        }

d.when不带参数下分支条件是布尔表达式

fun mix(c1:Color,c2:Color) = 
        when{
            (布尔条件式1) -> Color.BLUE
            (布尔条件式2) -> Color.ORANGE
            else -> throw Exception("error")
        }

e.智能转换:合并类型检查和转换

背景:

数值求和

interface Expr
class Num(val value:Int) : Expr
class Sum(val left:Expr,val right:Expr) : Expr
java风格下求值函数
fun eval(e:Expr): Int {
    if(e is Num) {
        val n = e as Num
        return n.value
    }
    if(e is Sum){
        return eval(e.left) + eval(e.right)
    }
    throw IllegalAccessException("Unknown Expression")
}
重构1: 不用return(if有返回值)
重构2:用when替换if
fun eval(e:Expr): Int =
    when (e){
        is Num ->{
            e.value
        }
        is Sum ->{
            eval(e.left) + eval(e.right)
        }
        else ->
            throw IllegalAccessException("Unknown Expression") 
    }
技巧:代码块作为if和when的分支

7.迭代

a.迭代数字:区间和数列

闭区间

使用..运算符表示区间 val oneToTen = 1..10

迭代带步长的区间(100 downTo 1 是递减数列,步长step为2)

for(i in 100 downTo 1 step 2){}
不包含结束值的半闭合区间

for(x in 0 until size) 等同于 for(x in 0 .. size - 1)

b.迭代map

fun interMap(){
    val binaryReps = TreeMap<Char,String>()

    for (c in 'A'..'F'){
        val binary = Integer.toBinaryString(c.toInt())
        binaryReps[c] = binary
    }

    for((letter,binary) in binaryReps){
        println("$letter = $binary")
    }
}

c.使用in检查集合和区间成员

fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
fun recognize(c: Char) = when(c) {
    in '0'..'9' -> "digit!"
    in 'a'..'z', in 'A'..'Z' ->"letter!"
    else -> "don't know!"
}

8.异常

throw

throw是一个表达式

try,catch,finally

try,catch都是表达式

fun readNumber(reader: BufferedReader): Int? {
    try {
        val line = reader.readLine()
        return Integer.parseInt(line)
    }
    catch (e: NumberFormatException){
        return null
    }
    finally {
        reader.close()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值