Kotlin学习系列——Kotlin 基础语法

r囧r小猫 2023-06-25 10:16 87阅读 0赞

一.介绍

  1. JetBrains公司根据多年Java平台开发经验,认为Java有一定局限性和问题,
  2. 由于要向后兼容,这些问题很难得到解决,因此他们开发了Kotlin语言!
  3. Kotlin是基于JVM的新编程语言,和GroovyScalaClojure等语言类似,被称为JVM语言!
  4. 因为它们都编译成.clas字节码文件,可在java虚拟机JVM上运行!
  5. Kotlin特点:
  6. Kotlin兼容Java,与Java 100%互相调用,并具备诸多Java尚不支持的新特性!
  7. Java更安全,更简洁,更现代化,更强大!
  8. 既面向对象又有函数式结构,支持高阶函数、操作符重载、字符串模板和lambda等!
  9. Kotlin比最成熟竞争者Scala简单易学,可轻松引入到现有java项目中!
  10. 此外,还可编译成JavaScript代码, Kotlin也可与JavaScript互操作!
  11. Kotlin历史:
  12. KotlinJetBrains公司在2010年开发,2011年开源:http://github.com/JetBrains/kotlin
  13. 2016年发布1.0版,20174月发布1.1.2版!
  14. Kotlin语言的开发团队,目前大约40人,Andrey Breslav还是Kotlin语言的首席设计师!
  15. JetBrains公司对Kotlin愿景:
  16. 用同一种语言,接多平台的不同应用的端对端开发,
  17. 包括全栈Web应用、AndroidiOS客户端、嵌入式/物联网等!
  18. 谷歌Android团队和JetBrains公司关系密切,Android Studio就是基于IntelliJ IDEA社区版开发!
  19. 谷歌和JetBrains公司为Kotlin成立一个非盈利基金会,Kotlin语言的开发,还是JB为主导!
  20. 谷歌在I/O 2017大会宣布:将Kotlin语言作为Android开发的一级编程语言!
  21. Android Studio 3.0预览版已支持Kotlin
  22. 下载AS3.0预览版后,打开现有Java文件,在Code菜单中选择Convert Java File to Kotlin File,
  23. AS会添加Kotlin依赖,然后把Java代码转成Kotlin代码!
  24. 1
  25. 2
  26. 3
  27. 4
  28. 5
  29. 6
  30. 7
  31. 8
  32. 9
  33. 10
  34. 11
  35. 12
  36. 13
  37. 14
  38. 15
  39. 16
  40. 17
  41. 18
  42. 19
  43. 20
  44. 21
  45. 22
  46. 23
  47. 24
  48. 25
  49. 26
  50. 27
  51. 28

二.Kotlin基础语法

官方文档: http://kotlinlang.org/docs/reference/basic-syntax.html

1.Kotlin注释

  1. Java一样,Kotlin支持行注释和块注释,
  2. Java不同的是,Kotlin块注释可嵌套
  3. // 这是行注释
  4. /* 这是块注释 */
  5. 1
  6. 2
  7. 3
  8. 4

2.定义包名

  1. 包名位于源码文件顶部,与java相同!
  2. 但源码文件可在任意目录,不需要匹配包名
  3. package com.demo
  4. import java.util.*
  5. 1
  6. 2
  7. 3
  8. 4

3.定义函数

①.函数有两个Int参数,返回Int类型

  1. // 变量: 变量类型
  2. fun sum(a: Int, b: Int): Int {
  3. return a + b
  4. }
  5. // main函数,和java的main方法一样,作为程序入口
  6. fun main(args: Array<String>) {
  7. // 调用sum函数
  8. println(sum(3, 5))
  9. }
  10. 1
  11. 2
  12. 3
  13. 4
  14. 5
  15. 6
  16. 7
  17. 8
  18. 9
  19. 10

②.函数表达式推断返回类型

  1. fun sum(a: Int, b: Int) = a + b
  2. fun main(args: Array<String>) {
  3. println(sum(3, 5))
  4. }
  5. 1
  6. 2
  7. 3
  8. 4
  9. 5

③.函数返回类型Unit

  1. // Unit类似java的void, $表示取变量值
  2. fun printSum(a: Int, b: Int): Unit {
  3. println("sum of $a and $b is ${a + b}")
  4. }
  5. fun main(args: Array<String>) {
  6. printSum(3, 5)
  7. }
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7
  15. 8

④.函数可省略返回类型Unit

  1. fun printSum(a: Int, b: Int) {
  2. println("sum of $a and $b is ${a + b}")
  3. }
  4. 1
  5. 2
  6. 3

4.定义局部变量

①.只读变量val(只能赋值一次,之后不可变)

  1. fun main(args: Array<String>) {
  2. val a: Int = 1 //立即初始化
  3. val b = 2 //Int类型可被推断出来
  4. val c: Int //没有初始化,必须写类型
  5. c = 3 //延迟初始化
  6. println("a = $a, b = $b, c = $c")
  7. }
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7

②.可变变量var

  1. fun main(args: Array<String>) {
  2. var x = 5 //Int类型可被推断出来
  3. x += 1 //x变量可以改变
  4. println("x = $x")
  5. }
  6. 1
  7. 2
  8. 3
  9. 4
  10. 5

5.字符串模板

  1. fun main(args: Array<String>) {
  2. var a = 1
  3. val s1 = "a is $a" // 简单变量模板
  4. val s2 = "replace: ${s1.replace("is", "was")}" // 表达式模板
  5. println(s1)
  6. println(s2)
  7. }
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7

6.条件表达式

①.条件if

  1. fun maxOf(a: Int, b: Int): Int {
  2. if (a > b) {
  3. return a
  4. } else {
  5. return b
  6. }
  7. }
  8. fun main(args: Array<String>) {
  9. println(maxOf(3, 5))
  10. }
  11. 简写if表达式
  12. fun maxOf(a: Int, b: Int) = if (a > b) a else b
  13. fun main(args: Array<String>) {
  14. println(maxOf(3, 5))
  15. }
  16. 1
  17. 2
  18. 3
  19. 4
  20. 5
  21. 6
  22. 7
  23. 8
  24. 9
  25. 10
  26. 11
  27. 12
  28. 13
  29. 14
  30. 15
  31. 16
  32. 17
  33. 18

②.条件when

  1. fun describe(obj: Any): String =
  2. when (obj) {
  3. 1 -> "One"
  4. "Hello" -> "Greeting"
  5. is Long -> "Long"
  6. !is String -> "Not a string"
  7. else -> "Unknown"
  8. }
  9. fun main(args: Array<String>) {
  10. println(describe(1))
  11. println(describe("Hello"))
  12. println(describe(1000L))
  13. println(describe(2))
  14. println(describe("other"))
  15. }
  16. 1
  17. 2
  18. 3
  19. 4
  20. 5
  21. 6
  22. 7
  23. 8
  24. 9
  25. 10
  26. 11
  27. 12
  28. 13
  29. 14
  30. 15
  31. 16

7.可能空值时,检查null

  1. 当可能为null值时,引用变量必须添加?标记
  2. fun parseInt(str: String): Int? {
  3. return str.toIntOrNull()
  4. }
  5. 1
  6. 2
  7. 3
  8. 4

8.类型检查和自动转换

  1. is运算符可检查一个变量是否为某类型的实例
  2. 如果一个不可变的局部变量或属性是指定类型,则不需要显式转换:
  3. fun getStringLength(obj: Any): Int? {
  4. if (obj is String) {
  5. // Any类型自动转换为String类型
  6. return obj.length
  7. }
  8. return null
  9. }
  10. 上面代码,也可写成下面
  11. fun getStringLength(obj: Any): Int? {
  12. if (obj !is String) return null
  13. return obj.length
  14. }
  15. 1
  16. 2
  17. 3
  18. 4
  19. 5
  20. 6
  21. 7
  22. 8
  23. 9
  24. 10
  25. 11
  26. 12
  27. 13
  28. 14
  29. 15

9.循环

①.循环for

  1. fun main(args: Array<String>) {
  2. val items = listOf("apple", "banana", "kiwi")
  3. for (item in items) {
  4. // 直接变量每一项
  5. println(item)
  6. }
  7. }
  8. 上面代码,也可写成下面
  9. fun main(args: Array<String>) {
  10. val items = listOf("apple", "banana", "kiwi")
  11. for (index in items.indices) {
  12. // 遍历下标,输出相应项
  13. println("item at $index is ${items[index]}")
  14. }
  15. }
  16. 1
  17. 2
  18. 3
  19. 4
  20. 5
  21. 6
  22. 7
  23. 8
  24. 9
  25. 10
  26. 11
  27. 12
  28. 13
  29. 14
  30. 15
  31. 16

②.循环while

  1. fun main(args: Array<String>) {
  2. val items = listOf("apple", "banana", "kiwi")
  3. var index = 0
  4. while (index < items.size) {
  5. println("item at $index is ${items[index]}")
  6. index++
  7. }
  8. }
  9. 1
  10. 2
  11. 3
  12. 4
  13. 5
  14. 6
  15. 7
  16. 8

10.范围in运算符

  1. 检查数字是否在指定范围内
  2. fun main(args: Array<String>) {
  3. val x = 3
  4. val y = 5
  5. if (x in 1..y+1) {
  6. println("$x在指定范围内")
  7. }
  8. if (0 !in 1..y+1) {
  9. println("0超出范围")
  10. }
  11. }
  12. 用于迭代/循环
  13. fun main(args: Array<String>) {
  14. for (x in 1..3) {
  15. print(x)
  16. }
  17. println("***")
  18. for (x in 1..5 step 2) {
  19. println(x)
  20. }
  21. println("***")
  22. for (x in 5 downTo 1 step 2) {
  23. println(x)
  24. }
  25. }
  26. 执行结果如下:
  27. 1
  28. 2
  29. 3
  30. ***
  31. 1
  32. 3
  33. 5
  34. ***
  35. 5
  36. 3
  37. 1
  38. 1
  39. 2
  40. 3
  41. 4
  42. 5
  43. 6
  44. 7
  45. 8
  46. 9
  47. 10
  48. 11
  49. 12
  50. 13
  51. 14
  52. 15
  53. 16
  54. 17
  55. 18
  56. 19
  57. 20
  58. 21
  59. 22
  60. 23
  61. 24
  62. 25
  63. 26
  64. 27
  65. 28
  66. 29
  67. 30
  68. 31
  69. 32
  70. 33
  71. 34
  72. 35
  73. 36
  74. 37
  75. 38
  76. 39

11.集合

  1. 迭代集合(循环遍历)
  2. fun main(args: Array<String>) {
  3. val items = listOf("apple", "banana", "kiwi")
  4. for (item in items) {
  5. println(item)
  6. }
  7. }
  8. 检查集合是否包含一个对象
  9. fun main(args: Array<String>) {
  10. val items = setOf("apple", "banana", "kiwi")
  11. when {
  12. "orange" in items -> println("juicy")
  13. "apple" in items -> println("apple is fine too")
  14. }
  15. }
  16. 集合函数lambda表达式(过滤,排序,循环遍历)
  17. fun main(args: Array<String>) {
  18. val fruits = listOf("banana", "avocado", "apple", "kiwi")
  19. fruits
  20. .filter { it.startsWith("a") }
  21. .sortedBy { it }
  22. .map { it.toUpperCase() }
  23. .forEach { println(it) }
  24. }
  25. 1
  26. 2
  27. 3
  28. 4
  29. 5
  30. 6
  31. 7
  32. 8
  33. 9
  34. 10
  35. 11
  36. 12
  37. 13
  38. 14
  39. 15
  40. 16
  41. 17
  42. 18
  43. 19
  44. 20
  45. 21
  46. 22
  47. 23
  48. 24
  49. 25
  50. 26

发表评论

表情:
评论列表 (有 0 条评论,87人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Kotlin学习-基础语法

    写在前面 因为实验室需要,需要将原来的桌面应用程序改成安卓端的程序,所以正好使用kotlin进行开发。 主要内容 > 基础知识 Kotlin 是一种在 Java