1.Package
同Java一样,定义package
package my.demo
import java.util.*
源文件里所有的内容都在文件头定义的包里,如果文件头没有定义包,那么所有内容属于没有名字的“default” package
package foo.bar
fun baz() {}
class Goo {}
baz
的全名叫foo.bar.baz()
, Goo
的全名为foo.bar.Goo
2.Import
同Java的语法类似,import 可以带上as取别名
import bar.Bar as bBar
import
除了可以引用类,还可以引用
- top level function和properties,
- 单例的方法 和属性
- 枚举常量
没有import static
3.定义函数
fun sum(a: Int, b: Int): Int {
return a + b
}
如果函数只有一个表达式可以写成
fun sum(a: Int, b: Int) = a + b
如果不要返回值,则写为Unit
,或者省略
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
或者
fun printSum(a: Int, b: Int) {
print(a + b)
}
4.定义局部变量
只读变量为val
修饰,只能被赋值一次,可读可写变量用var
修饰,不写type的变量必须被初始化:
val a: Int = 1
val b = 1 // `Int` type is inferred
val c: Int // Type required when no initializer is provided
c = 1 // definite assignment
5.String template
fun main(args: Array<String>) {
if (args.size == 0) return
print("First argument: ${args[0]}")
}
6. 如果一个引用有可能为null,需要在type后加个?,比如以下函数就有可能返回null
fun parseInt(str: String): Int? {
// ...
}
7其他
for-loop
fun main(args: Array<String>) {
for (arg in args) {
print(arg)
}
}
//或者遍历index
for (i in args.indices) {
print(args[i])
}
while-loop
fun main(args: Array<String>) {
var i = 0
while (i < args.size) {
print(args[i++])
}
}
range
if (x in 1..y-1) {
print("OK")
}
in可以遍历collection,也可以检查元素是否在collection里
for (name in names) {
println(name)
}
if (text in names) { // names.contains(text) is called
print("Yes")
}