Kotlin学习笔记1_基础语法

1. What’s Kotlin?

– 引自百度百科
Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin已正式成为Android官方支持开发语言。

官方地址:http://kotlinlang.org
中文网站:https://www.kotlincn.net

Kotlin和IntelliJ IDEA都出自同一家公司JetBrains , 因此建议使用 IntelliJ IDEA 开发 Kotlin。

2. 基础语法

声明变量

var a = 1 //自动推断类型是Int
a = 2 //OK

val b = 1
b = 2 //Error

var str: String = "hello world"

val m = intArrayOf(1,2,3)
m[0] = 4  //OK

流程控制if 使用

var x = 10
var y = 20

//简化写法
var max = if (x > y) x else y
var min = if (x < y) x else y

max = if (x > y) {
    println("x > y")
    x  //
} else {
    println("x <= y")
    y //
}

min = if (x > y) {
    println("x > y")
    y
} else {
    println("x <= y")
    x
}
println("min : $min , max: $max")

流程控制 for 使用

fun main(args: Array<String>) {
    var array: IntArray = intArrayOf(1,2,3)
    
    //遍历 for(x in y)
    for(item: Int in array) {
        println(item)
    }

    println("========================")
    //获取下标索引
    for(i: Int in array.indices) {
        println("array[$i] = ${array[i]}")
    }
}

定义函数:

//main函数
fun main(args: Array<String>) {
}

//定义一个sum求和函数
fun sum(a: Int, b: Int): Int {
    return a + b
}

//语法糖
fun sum2(a: Int, b: Int) = a + b

//字符串模板
fun myPrint(a: Int, b: Int) {
    println("$a + $b = ${a + b}")
}

//可能返回null的特殊函数
/**
 * 核心在与Int?, 类似Java8的 Optional
 */
fun convertStr2Int(str: String): Int? {
    try {
        return str.toInt()
    } catch (ex: NumberFormatException) {
        return null
    }
}

fun printMultiply(a: String, b: String) {

    var a2Int = convertStr2Int(a)
    var b2Int = convertStr2Int(b)

    //思考为啥这里写会报错
    //println(a2Int * b2Int)

    if (a2Int != null && b2Int != null) {
        println(a2Int * b2Int) //编译器很聪明,因为if判断了,所以不会报错了
    } else {
        println("can't get value")
    }
}

//入参是Any类型
fun convert2UpperCase(str: Any): String? {

    if(str is String) { //自动识别str为字符串
        return str.toUpperCase() //这里不需要强制转换了
    }
    return null
}

convert2UpperCase("hello world")  //  ⇒ HELLO WORLD
convert2UpperCase(123)   // ⇒ null

when 关键字
有点类似switch case 语法,但是when是及时返回结果的。

fun main(args: Array<String>) {

    println(printStr("hello"))
    println(printStr("other"))

    val result1 = describe("Hello")
    println("describe(\"Hello\") is $result1")
    println("=================")

    var a = 6
    var result = when (a) {
        1 -> {
            println("a == 1")
            10
        }
        2 -> {
            println("a == 2")
            2
        }

        3, 4, 5 -> {
            println("a == 3 or a == 4 or a == 5")
            30
        }
        //区间
        in 6..10 -> {
            println("in 6 ... 10")
            40
        }
        else -> {
            println("a is other value")
            50
        }
    }

    println(result)
}

fun printStr(str: String): String {
    when (str) {
        "hello" -> return "HELLO"
        "world" -> return "WORLD"
        "hello world" -> return "HELLO WORLD"
        else -> return "other input"
    }
}

fun describe(obj: Any): String =
        when (obj) {
            1          -> "One"
            "Hello"    -> "Greeting"
            is String  -> "String"
            is Long    -> "Long"
            !is String -> "Not a string"
            else       -> "Unknown"
        }

区间用法
kotlin区间左右都是闭区间

/**
 * range 使用小记
 * Kotlin的区间是左右都是闭区间
 */
fun main(args: Array<String>) {

    val a = 5
    val b = 10

    if(a in 2..b) {
        println("in the range")
    }

    if (a !in 2..3) {
        println("out of the range")
    }

    println("-------------------")
    for(i in 2.rangeTo(10)) {
        println(i)
    }

    println("-------------------")

    for(i in 2..10 step 2) {
        println(i)
    }

    println("-------------------")

    //倒着遍历
    for(i in 10 downTo 2 step 1) {
        println(i)
    }

    var list = listOf("hello", "world", "hello world", "say good bye", "study kotlin")
    //判断是否在区间外
    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    //判断在区间内
    if(0 in 0..list.lastIndex) {
        println("0 is in of range")
    }
	list.filter{ it.length > 5 }.map { it.toUpperCase() }.sorted().forEach(System.out::println)
}

3 . 其他

转义字符特殊处理

fun main(args: Array<String>) {
    var s = "hello world"
    // 对于 """ """ 中的字符串,特殊字符不会转义
    s = """hello \n world \t"""
    println(s)
}

包名的特殊性
目录与包的结构无需匹配,源代码可以在文件系统的任意位置

//包名放在文件的第一行,与目录结构无关,是逻辑的概念
package com.dcj.test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值