声明包名

包名应该在源文件顶部

package my.demo import java.util.* // ...

包名不要求和必须和文件夹相同的目录,比如一个kotlin源文件路径为src/main/java/com/demo/test.kt,那么包名可以是com.demo.test1 也可以是任意其他的,这点和java不同,java包名必须和代码相对目录相同。 详情 Packages

定义函数

下面这个函数有2个Int类型的参数和Int类型的返回值:

fun sum(a: Int, b: Int): Int { return a + b
}

函数表达式自动推断返回类型:

fun sum(a: Int, b: Int) = a + b

函数没有返回值(java语法里面的void方法):

fun printSum(a: Int, b: Int): Unit {
  print(a + b)
}

Unit 也返回类型可以省略:

public fun printSum(a: Int, b: Int) {
  print(a + b)
}

详情 Functions

定义局部变量

赋值一次(只读,类似java语法中final修饰的变量)的变量:

val a: Int = 1 val b = 1 // 自动推断为 Int 类型 val c: Int // 如果没有初始化需要提供类型 c = 1 // 明确的赋值 c = 2 // 会编译出错,val修饰的变量只能赋值一次!

可变变量:

var x = 5 
x += 1 

详情 Properties And Fields

String 模板

fun main(args: Array<String>) { if (args.size() == 0) return print("First argument: ${args[0]}")
}

详情 String templates

条件表达式

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

使用if 表达式

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

详情 if-expressions

使用null和检查null

一个引用必须明确可以为null时才有可能为null(如果没有明确声明可以为null,那么强行赋值为null会编译出错!)

如果不能转换成Int 可能返回null:

fun parseInt(str: String): Int? { // ... }

调用可能返回null的函数:

fun main(args: Array<String>) { if (args.size() < 2) {
    print("Two integers expected") return } val x = parseInt(args[0]) val y = parseInt(args[1]) //输出 `x * y` 可能会抛出异常,因为x、y可能为null if (x != null && y != null) { //x和y都经过了非null检查 print(x * y)
  }
}

或者

// ... if (x == null) {
    print("Wrong number format in '${args[0]}'") return } if (y == null) {
    print("Wrong number format in '${args[1]}'") return } // ... print(x * y)

详情 Null-safety

类型检测和自动类型转换

is 关键字检测是否类型相同,如果要检测一个只读的局部变量或属性的特定类型,没有必要明确地强制转换:

fun getStringLength(obj: Any): Int? { if (obj is String) { // 在这个if范围内`obj` 自动转换为 `string` 类型 return obj.length
  } // 在外面`obj` 还是`Any`类型 return null }

或者

fun getStringLength(obj: Any): Int? { if (obj !is String) return null // 这里 `obj` 自动转换成 `String` 类型 return obj.length
}

甚至

fun getStringLength(obj: Any): Int? { // 在`&&`后面`obj` 将自动转换成 `String` 类型 if (obj is String && obj.length > 0) return obj.length return null }

详情 ClassesType casts

for 循环

fun main(args: Array<String>) { for (arg in args)
    print(arg)
}

或者

for (i in args.indices)
  print(args[i])

详情 for loop

while 循环

fun main(args: Array<String>) { var i = 0 while (i < args.size())
    print(args[i++])
}

详情 while loop

when 表达式

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

详情 when expression

ranges

检查一个数字在某个范围内使用in 操作符:

if (x in 1..y-1)
  print("OK")

检查一个数字不在某个范围内:

if (x !in 0..array.lastIndex)
  print("Out")

遍历ranges:

for (x in 1..5)
  print(x)

详情 Ranges

集合

遍历集合:

for (name in names)
  println(name)

检查集合里是否包含某个对象用in 操作符:

if (text in names) // 和names.contains(text)一样 print("Yes")

集合高阶函数使用:

names .filter { it.startsWith("A") } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) }


	
色迷迷 哭 呕吐 大笑 口水 微笑 啵一个 发怒

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项