Kotlin总览

kotlin是我学习的第四门语言了(c,JavaScript,Java),目前初学的感觉,他和JavaScript是差不多的。作为谷歌的亲儿子,还是可以认真学习下的,相信其他的google出品的如go应当也是差不多的

语言特点

  1. 无需分号结尾语句
  2. 自动类型推测
  3. 当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。

基础语法

  1. 定义
    package my.example
  2. 导入
    import my.demo.*

与Java不同,目录与包的结构无需匹配:源代码可以在文件系统的任意位置。

程序入口(main方法)

fun main() {
    println("Hello world!")
}

变量

var a:Int=1

常量

val a:Int
a = 1

const

未被const修饰的属性只能被 get of set 方法调用,而不能直接调用。而const修饰的属性是可以被直接调用的,实际上是等同于Java中的 public static final。

const 只允许在top-level级别(file 级别)和object中声明

函数

关键字 fun
基本结构:
fun + 函数名+参数列表+返回值类型(可不加,默认为Unit类似void)

注意
1 函数可只由一条语句构成,这是一种简写的状态,js中也有类似写法,如:

fun hasPrefix(x:Any) = x is String

fun hasPrefix(x:Int):Int = if(x > 2) x else 2

fun hasPrefix(x:Any) = when(x){
  is String -> true
  else -> false;
}

字符串拼接

使用 实现字符串拼接, +变量名,或${方法调用}

NULL检查机制

我想这里其实是一个很好的设计,很好的对引用的对象如变量,函数返回值在取Null值得行为这一层面上进行了分类。

  1. 允许为空 + ?,若为空,那么此条表达式不做处理直接返回
  2. 不允许为空 + !!,为空则抛出异常 kotlin.KotlinNullPointerException

类型检测及自动类型转换

个人觉得这是个很巧妙的设计,虽然还不知道有什么用…总的来说,kotlin可以使用is或 !is 关键字判断引用类型,类似于Java的instance of,巧妙的是,如果成功的is了,或者逻辑上能够缩小引用的类型范围了,那么会自动转型成对应的类型。

example:

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做过类型判断以后,obj会被系统自动转换为String类型
    return obj.length 
  }

  //在这里还有一种方法,与Java中instanceof不同,使用!is
  // if (obj !is String){
  //   // XXX
  // }

  // 这里的obj仍然是Any类型的引用
  return null

#### 区间范围
这对我是一个全新概念,表示一个区间范围(等差数列集合),参考:
https://www.kotlincn.net/docs/reference/ranges.html

只能用例子实验了:

for(i in 1..10) {
      print(i.toString()+" - ")
    }
    println()
    for(i in 10 downTo 1) {
        print(i.toString()+" - ")
    }
    println()
    for(i in 1..10 step 2) {
        print(i.toString()+" - ")
    }
    println()
    for(i in 10 downTo 1 step 2) {
        print(i.toString()+" - ")
    }

条件语句

与其他的语言中的if使用所不同的是,我们也可以把 IF 表达式的结果赋值给一个变量。因此kotlin里是没有三元操作符的,完全可以通过if else条件语句替代。需要注意的是,需要换行

code

fun main() {
    var a:Int = 3;
    var b:Int = 2;
    var c = if(a > b) {
        println("i choos a")
        a}
           else  {
        println("i choos b")
        b}
    println(c)

分支语句

在kotlin中使用when替代switch

fun main() {
    var num:Int = 3;
    when(num) {
        3 -> println(3333)
        2 -> println(2222)
    }
}

值得注意的是,他与switch又不是相同的,在我看来算是一个优化版的switch了,如下:

 public static void main(String[] args) {
        int num = 3;
        switch (num){
            case 3: {
                System.out.println(3333);
            }
            case 2: {
                System.out.println(222);
            }
        }
    }

Java代码会输出 3333 2222。其实一直以来,我就觉得switch中需要额外手动break就是一个过度设计,kotlin解决了这个问题,实际上他更加体现了分支这个词的含义;

  1. 无需break判断的主语,如果没有传入参数,那么则需要我们自行确定主语如:
fun hasPrefix(x:Any) = when(x){
  is String -> true
  else -> false;
}
等于
fun hasPrefix(x:Any) = when {
  x is String -> true
  else -> false;
}
  1. 不一定需要传入参数,如果传入了参数假设是x,那么x默认为条件

循环语句

for循环

for可分为2种:

  1. 基于迭代器:
    针对collection集合的遍历将会使用collection内置的iteator迭代器
  2. 遍历数组索引

while循环

发布了40 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41332728/article/details/104482891