开始学习走路之"Hello world!"
# java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
# kotlin
fun main(args: Array<String>) {
println("Hello wolrd!")
}
上述为分别使用Java和Kotlin语言编写的"Hello World!" 程序,
相比而言,Kotlin更为简洁,接下来我就为大家解释一下这段代码:
- fun 用来声明一个函数,后接函数名.
- main 代表函数名为main,且为入口函数.
- args: Array<String> 前面为参数,冒号后面为参数类型.
- println 代表打印并换行
函数
在上面我们已经看到了怎么声明一个没有返回值的函数,那么如何声明一个有返回值的函数呢?返回类型应该放在哪里呢?如下:
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
函数的声明以关键字fun开始,后面紧跟函数名称.
这个例子中的函数名称是max,接下来括号里面的是参数列表.
参数列表后面跟着返回类型,它们之间用一个冒号隔开.
函数声明
注:
在Kotlin中,if是表达式而不是语句.
表达式和语句的区别在于,表达式有值,并且能作为另一个表达式的一部分使用.
而语句总是包围着它的代码块中的顶层元素,并且没有自己的值.
在Java中,所有的流程控制结构都是语句.
而在Kotlin中,除了循环(for,do和do/while)以外大多数流程控制结构为表达式.
另外一方面,Java中的赋值操作是表达式.而在Kotlin中反而是语句.
表达式函数体
由于上述代码的函数体部分是由单个表达式构成的,可以用这个表达式作为完整的函数体,并去掉括号和return语句:
fun max(a: Int, b: Int): Int = if (a > b) a else b
甚至于更为简化的省掉返回类型
fun max(a: Int, b: Int) = if (a > b) a else b
注:只有表达式函数体的返回类型可以省略.
变量
在Java中声明变量的时候会以变量类型开始,后面解释变量名.
在Kotlin中是行不通的,因为许多变量声明的类型都可以省略.
所以在Kotlin中以关键字开始,然后是变量名字,最后可以加上变量类型(也可以不加).
val question = "How old are you"
val answer = 42
val ontherAnswer: Int = 42;
如变量没有初始化器,也就是没有复制,则必须制定变量的类型.
val name: String
name = "starfall"
可变变量与不可变量
声明变量的关键字有两个:
- val(value) : 不可变引用.使用val声明的变量不能再舒适化之后再次赋值.对应java中的final变量.
- var(variable) : 可变引用.变量的值可以改变.对应普通非final变量.
默认的情况下,应该尽可能的使用val关键字来声明所有的Kotlin变量,仅在必要的时候换成var.
在定义了val变量的代码块执行期间,val变量只能进行唯一一次初始化.但是,如果编译器能确保只有唯一一条初始化语句会被执行,可以根据条件使用不同的值来初始化它.例如:
val message: String
if(true){
message = "true"
}else{
message = "false"
}
注:尽管val引用自身是不可变的, 但是它指向的对象可能是可变的.例如:
val languages = arrayListOf ("Java")
languages.add("Kotlin")
使用var关键字允许变量改变自己的值,但是类型不能更改.
字符串模板
修改"Hello World!" 如下:
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello,$name!")
}
上述代码在声明了一个变量name,并且在后面的字符串字面值中使用了它.和许多脚本语 言一样.Kotlin允许在字符串字面值中引用局部变量,只需要在变量名称前面加上字符$,等价于Java中的字符串连接.
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello,${args[0]}!")
}
使用${} 插入args数组中的第一个元素.
fun main(args: Array<String>) {
println ("Hello, ${if (args.size > 0) args[0] else "someone"}!")
}
还可以在双引号中直接嵌套双引号,只要它们处在某个表达式的范围内(即花括号内):
网友评论