Kotlin-小抄(一)入门与基础语法

  • kotlin特性:

    • Kotlin是一种基于JVM的静态类型编程语言
    • 与Java及JVM的完全互操作性
    • 多平台:适合Android、浏览器和本地系统编程
    • 语法简洁不咿嗦(便于学习)
    • 富于表现力和高效的生产力
    • 支持类型推断 例如,我们可以只写 val number=23 编译器会推断这 Int;
    • 可以使用数据类 data class )以极简的方式创建 POJO;
    • 运算符重载相当简单
    • 快速、 方便地扩 置类、自定义类的函数与属性;
    • 区分可空类型和不可空类型。直接在编译期语法层面检查可空类型 提供空安全 保障;
    • Kotlin 含有功能丰富的集合类 StreamAPI;
    • 集成扩展了简单实用的文件 I/ 、正则匹配、线程等工具类;
    • 提供了实用强大的函数式编程支持 一等函数支持, Lambda 达式、高阶函数等;
    • 能够轻松、方便地创建 DSL;
    • 使用更加轻量级的协程进行并发编程
    • IntelliJIDEA 发工具 一等支持;
    • Android 开发有 Android Studio 内置原生支持
    • 提供的 Anko 库( https: //github com/Kotlin/anko )使 Android 开发速度更快。
  • Kotlin是设计运行在JVM上的语言,可以加载到JVM中执行文件中指定操作的字节码,下图 直观所示:

在这里插入图片描述

  • 学习工具:

  • 先运行一个重要的HelloWorld

fun main(args:Array<String>){
    println("Hello World")
    println(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date()));
}
  • 通过这个HelloWorld可以看出Kotlin使用fun声明方法,而且可以推断语句分行结束,也可以使用Java的API,下面将详细学习Kotlin语法
基础语法:
  1. 变量与标识符

    • 在Kotlin中所有的变量都是引用类型没有Java的基本数据类型了,Kotlin变量分为val(不可变类型)和var(可变类型)
    • val 只读类型,仅能一次赋值,与Java中的final关键字相同, 尽量使用val可以带来可预测的行为和线程安全等特点。
    • var是可写的,在生命周期中可以被多次赋值
      在这里插入图片描述就会报错error can not be reassigned,从此图可以看出kotlin具有变量类型推断的能力,提供了不少方便
  2. 关键字与修饰符:

    • Kotiin 中的修饰符关键字主要分为 类修饰符、成员修饰符 访问权限修饰符、协变逆变修饰符、函数修饰符、属性修饰符、参数修饰符、具体化类型修饰符等
类修饰符
类修饰符说明
abstract抽象类
final不可被继承final类
enum枚举类
open可继承open类
annotation注解类
sealed密封类
data数据类
访问权限修饰符
访问权限修饰符说明
private私有,仅当前类可以访问
protected当前类以及继承该类的可访问
public默认值,对外可访问
internal模块内可访问
属性修饰符
属性修饰符说明
const常量修饰符
协变逆变修饰符
协变逆变修饰符说明
in消费者类型修饰符out T等价于?extends T
out生产者类型修饰符,in T等价于?super T
函数修饰符
函数修饰符说明
tailrec尾递归
operator运算符重载函数
infix中缀函数
inline内联函数
external外部函数
suspend挂起协程函数
参数修饰符
参数修饰符说明
vararg变长参数修饰符
noinline不内联函数修饰符
crossinline限制Lambda表达式直接非局部return返回
具体化类型修饰符
具体化类型修饰符说明
reified具体化类型参数
流程控制语句:
* 分支语句(if,when)
* 循环语句(for, while)
* 跳转语句(return、break、continue、throw)
if表达式
  • if…else语句是控制程序流程的最基本的形式,其中else是可选的。在Kotlin中,if是一个表达式,即他会返回一个值(跟Scala一样)。代码示例如下:
  • if的分支可以是代码块,最后的表达式作为该块的值:
  • 例如:
var max = if(a>b){
        a
    }else{
        b
    }
if实现三元表达式:
  • if(true) 1 else 0
when表达式:
  • 类似于switch…case表达式,when会对所有的分支进行检查直到有一个条件可以被满足
    var input = Scanner(System.`in`);
    var obj = input.next();
    when(obj){
//        0,1,2,4,5,6,7,8 -> println("${obj}=>这是一个数字");
        "hello" -> println("${obj}==>这是hello")
        else -> println("${pbj}===>Java中的default")
    }
  • 在when中也可以使用in和!in来检查一个值是否在一个区间和集合中:
fun fact(n:Int):Int{
    var result = 1
    when(n){
        0, 1 -> result = 1;
        else ->result = n*fact(n-1)
    }
    return result;
}
for循环:
  • for循环可以对任何提供迭代器(iterator)的对象进行遍历:
for(item in collection){
    println(item);
}
  • 通过索引遍历一个数组:
for(i in array.indices){
    println(array[i]);
}    
或者
for((index, value) in array.withIndex()){
    println($index, $value);
}
  • 使用range
for(i in 1..10){
    println(i);
}
或者
(1..10).forEach{
    prineln(it);
 }   
  • eg:
fun sumFact(n:Int):Int {
    var sum = 0;
    for (i in 1.rangeTo(n)) {
        sum += fact(i);
    }
    return sum;
}
  • while循环:
 while与dowhile和C语言和Java相同
  • break和continue也和C语言和Java中的含义相同

  • return 返回:

    • 可以和Java一样使用
fun sum(a: Int,b:Int):Int{
    return a + b;
}
* 在Kotlin中可以使用函数字面量来获取函数的返回值 
* 函数字面量:Kotlin中可以直接使用“=”符号返回一个函数的值
//在Kotlin中可以使用函数字面量来获取函数的返回值
fun sum(a:Int, b:Int) = a + b
//不一样的使用方式
val sumf = fun(a:Int,b:Int) = {a+b}
这时需要使用sumf(1,1).invoke()来获取返回值,因为此时为一个Lambda表达式
标签:
  • 可以使用标签来控制return,break,continue语句的跳转到的位置
val intArray = inArrayOf(1, 2, 3, 4, 5)
intArray.forEach here@{//跳转到该处
    if(it==3) return@here
    println(it);
}
throw表达式
  • Kotlin中throw是表达式,他的类型是特殊类型Nothing, 类似与void
    • 一般使用Nothing来标记无返回的函数
    • 如果把一个throw表达式的值赋值给一个变量,需要显示声明类型为Nothing
val ex:Nothing = throw Exception("nothing")
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值