Kotlin學習筆記1_基礎語法
阿新 • • 發佈:2018-12-13
1. What’s Kotlin?
– 引自百度百科 Kotlin 是一個用於現代多平臺應用的靜態程式語言,由 JetBrains 開發。 Kotlin可以編譯成Java位元組碼,也可以編譯成JavaScript,方便在沒有JVM的裝置上執行。 Kotlin已正式成為Android官方支援開發語言。
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