hello ,world
最简单的一段
fun main(){
println("Hello, World!")
}
对比下 Java 的 hello,world ,简直不要太爽
public class Hello{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
有点 Java 体系下的 Python 那味道了
println 和Java System.out.println 相同
变量
关键词:
- val 声明常量
- var 声明变量
现在不需要在定义变量前确定数据类型了,还有点不适应
fun main(){
val a = 1
var b = 2
println("" + a + " " + b)
}
特别注意: 如果一个 prinln 语句里面需要输出多个变量,需要像上面这样做,在前面手动添加双引号表示一个输出的开头
当然,kotlin 中也可以显示地声明数据类型,如果像上面这样,没有声明数据类型,数据类型则会被自动推导出,大部分情况下是够用的,像 Python 一样,部分情况需要自己声明的还是需要去声明
**有一个与 Java 中的不同点:**数据类型的名字虽然一样,但是开头必须大写,因为底层实现不一样,kotlin 使用的是类封装的数据类型,像 string 类那样,这个需要注意
例如:Java 中的 int ,kotlin 中则是 Int,以及 double 与 Double
常用运算
逻辑运算和其他语言差不多
函数
格式:
fun Function(a1: Int, a2: Double): Int{
return 0
}
- fun 关键字
- 紧跟着的是函数名
- 后面的括号里面,形参名字:数据类型,形参名字和数据类型使用冒号一一对应
- 最后是返回值
与 Python 的不同:
语法糖:
什么是语法糖? 可以理解为一些小彩蛋
fun Function(a1: Int, a2: Double) = 表达式
当 函数里面的内容较少的时候,可以这么用,因为表达式的结果肯定是一个确定的数据类型,所以,返回值的类型都不用写上去了
逻辑控制
if 语句们
包括,if ,else, else if 用法跟 C 语言一样
注意点:
- if 的表达式可以有返回值
- 花括号里面的东西可以只有一个数字
- 还可以直接在函数的 return 里面写
fun a():Int{
return if ( 2 > 3){
1
}else{
2
}
}
像下面这么写,也是没有问题的
如果 b 的数值大于 c 则将 b 的数值作为返回值,否则是 c ,直接省去了 return
fun a():Int{
return if ( b > c ){
b
}else{
c
}
}
switch
kotlin 中使用 when ,而没有 switch
when 的括号中,可以传入任意类型的参数
fun b(number: Int){
when (number){
1 -> "a"
2 -> "b"
}
}
格式: when (表达式){ 表达式_1n -> 表达式_2n }
for 循环
for (循环变量 in 起点 until 终点 step 步长)
for (i in 1 until 10 step 2){
}
使用 until 最终会循环到 终点 - 1 的位置,就像 i < n 那样
如果步长为 1 还可以这么写
for (i in 1..10){
}
如果在里面添加 println( i ) 可以看到输出的结果为 1 到 10
类和对象
类的定义与实例化
最简单的如下
class Test_class {
}
如果需要被继承,需要在 class 前面加上 open
open class Test_class {
}
继承某个类呢?
class Test_class : 被继承的类的名称(){
}
实例化的过程和 Java 中一样
类名 对象名 = new 类名(构造函数的参数列表)
构造函数:
kotlin 里面有主构造函数,还有次构造函数,是不是听起来和其他语言有很大差别,有点诡异,别多想,先往下看
下面使用的是主构造函数
class Test_class(val a: Int, val b: Int) {
init {
println(a)
println(b)
}
}
init 表示的是构造函数的函数体,相当于 Python 中的__init__
问题来了:如果我需要根据传入参数的个数,进行不同的初始化,怎么办?
使用,次构造函数
而且,需要对函数参数的个数进行重新设计
??? 为什么
先看一段 C++ 的构造函数
Test_class(int a)
Test_class(int a, int b)
Test_class(int a, int b,int c)
在 C++ 中,可以利用函数的重载,对传入参数个数的不同的情况,针对性地进行初始化
在 kotlin 中,有这么一个原则:次构造函数被调用前,主构造函数必须被调用
是不是马上就想到 kotlin 中,构造函数的参数怎么设计了呢?
- 主构造函数的参数个数最小化
- 次构造函数进行拓展
所以,主构造函数设计一个参数 a 即可,对 b,c 这些参数,再针对性地进行设计其他参数的次构造函数
也就是:宁少勿多
对了,次构造函数是这么用的:
class Test_class(val a: Int, val b: Int) {
init {
println(a)
println(b)
}
constructor(参数列表){
}
}
接口
跟 Java 里面的一样,函数不能有函数体,整个东西是高度抽象的
interface a{
函数名()
}
访问范围控制符
和 Java 中的一样,Java 中有一个 default 而 kotlin 中,默认(没显示地写出来的时候)的是 public
|