服务器之家

服务器之家 > 正文

Kotlin 基本语法实例详解

时间:2020-11-04 16:34     来源/作者:匆忙拥挤repeat

基本语法示例

实例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package com.stone.basic.syntax
 
/**
 * desc :
 * author: stone
 * email : aa86799@163.com
 * time : 27/05/2017 11 01
 */
class BasicSyntax {
 
  //Function having two Int parameters with Int return type:
  public fun sum(a: Int, b: Int): Int {//访问修饰符 省略时,默认为 public
    return a + b
  }
 
  //Function having three Int parameters with Int return type:
  fun sum(a: Int, b: Int, c: Int) = a + b + c
 
  //Function returning no meaningful value:
  fun printSum(a: Int, b: Int): Unit {//Unit为无类型,类似java中的void,可以省略
    println("sum of " + a + " and " + b + " is ${a + b}")
    println("sum of $a and $b is ${a + b}") //在双引号中 直接用 $符操作变量  与上句等价
  }
 
  fun assignVarible() {
    val a: Int = 1 // immediate assignment  val = 本地只读变量 即不可变 immutable
    val b = 2 // `Int` type is inferred 自动类型推断
    val c: Int // Type required when no initializer is provided
    c = 3 // deferred assignment
 
    var x = 1 // Mutable variable:
    x++
 
    val s1 = "x is $x" // simple name in template:
    val s2 = "${s1.replace("is", "was")}, but now is $x" // arbitrary expression in template:
    println(s2)
  }
 
  fun maxOf(a: Int, b: Int): Int {
//    return a > b ? a : b; //原java中的三目运算符 不可用
 
    if (a > b) return a
    else return b
  }
 
  //fun maxOf(a:Int, b: Int):Int
  fun minOf(a: Int, b: Int): Int = if (a < b) a else b
 
  //字符串转int
  private fun parseInt(str: String): Int? {// ? 表示可以为空
    return str.toIntOrNull(8)//参数为 进制数(radix), 不传默认为10  转换错误 返回null
  }
 
  fun getBaseSyntax(name: String?): BasicSyntax? { // ? 表示可以为空
//    checkNotNull(name) // 参数不能为空的 检测函数
    return BasicSyntax()
  }
 
  fun printProduct(arg1: String, arg2: String) {
    val x1 = parseInt(arg1)
    val x2 = parseInt(arg2)
    if (x1 == null) return
    if (x2 == null) return
    println(x1 * x2)
  }
 
  //is operator
  fun getStringLength1(obj: Any): Int? { //Any 是任何Kotlin类的超类
    if (obj is String) {// 类似java中的 instanceof
// `obj` is automatically cast to `String` in this branch
      return obj.length
    }
// `obj` is still of type `Any` outside of the type-checked branch
    return null
  }
 
  // !is
  fun getStringLength2(obj: Any): Int? {
    if (obj !is String) return null
    return obj.length
  }
 
  fun getStringLength3(obj: Any): Int? {
    if (obj is String && obj.length > 0)
      return obj.length
    return null
  }
 
  //Using a for loop
  fun foreachItems() {
//    val items = listOf<String>("apple", "banana", "kiwi")
    val items = listOf("apple", "banana", "kiwi")
    for (item in items) {//in operator
      println("item is $item")
    }
    for (index in items.indices) {//indices 索引 type: Collection
//      println("item at $index is ${items.get(index)}")
      println("item at $index is ${items[index]}") //使用[index] 而不用 .get(index)
    }
  }
 
  //Using when expression
  fun describe(obj: Any): String =
      when (obj) {//when 中 必须 有一个else
        1 -> "One"
        "Hello" -> "Greeting"
        is Long -> "Long"
        !is String -> "not a string"
        else -> "Unknown"
      }
 
  //Using ranges 如果在if中 check的是一个数值,且使用了 in operator
  fun range() {
    val x = 10; val y = 9 //同一行中使用 ; 来分隔
    if (x in 1..y + 1) {//使用 .. 来表示范围  最后转换成 x in 1..10
//    if (x in (1..(y + 1))) {//如此解释 执行顺序 没问题 最后转换成 x in 1..10
//    if (x in ((1..y) + 1)) {如此解释 执行顺序 不行  最后转换成 x in 10
      println("fits in range")
    }
 
    for (x in 1..5) {//include 5
 
    }
 
    for (x in 1..10 step 2) {//x+=2  x is in {1, 3, 5, 7, 9}
      println("rang 1..10 step 2: $x")
    }
 
    for (x in 9 downTo 0 step 3) {//x=9, x>=0 x-=3
      println("x in 9 downTo 0 step 3: $x")
    }
 
    for (x in 0 until 10 step 2) {//until 10 : not include 10
      println("x in 1 until 10: $x")
    }
  }
 
  //Checking if a collection contains an object using in operator:
  fun contains() {
    val list = listOf("a1", "a2", "a3") //不可变list
    when {// 匹配到一个条件 其它 就不再匹配
      "a4" in list -> println("壹")
      "a5" in list -> println(list.size)
      "a3" in list -> println("the index is ${list.indexOf("a3")}")
    }
  }
 
  //Using lambda expressions to filter and map collections:
  fun collectionsLambda() {
//    val list = mutableListOf<Int>() //可变list
//    for (i in 1 ..10) {
//      list.add(i)
//
//    }
 
    val list = (1..10).toList() //上面的 简写
    list.filter { it % 2 == 0 }.map { it * 3 }.forEach(::println)
//   list.filter { it % 2 == 0 }.map { it * 3 }.forEach{ println("item is $it")}
  }
}
 
fun main(args: Array<String>) {
  var base = BasicSyntax()
 
  base.printSum(10, 20)
 
  base.assignVarible()
 
  var min = base.minOf(10, 20)
  println("min number is $min")
 
  base.getBaseSyntax(null)
 
  base.printProduct("1", "kk")
  base.printProduct("33", "66")
 
  println(null) //直接输出了 null 字符串
 
  base.foreachItems()
 
  println(base.describe(2))
 
  base.range()
 
  base.contains()
 
  base.collectionsLambda()
 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/jjwwmlp456/article/details/72780787

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
返回顶部