首页 > 其他分享 >kotlin基础知识

kotlin基础知识

时间:2023-10-11 23:55:18浏览次数:34  
标签:10 val Int kotlin 基础知识 println else 表达式

一、if的使用

1、if和java不一样的是:if是有结果的表达式

函数的返回值可以是:return if (a > b) a else b; 类似于java的 return a > b? a : b; 可能是这个原因所以kotlin没有这个三目运算符

 

二、函数体

kotlin除了循环外,大部分控制结构都是表达式体

1、函数体分为:代码块体和表达式体,带括号的是代码块,不带的则是表达式

// 代码块体
fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

// 表达式体
fun max(a: Int, b: Int) = if (a > b) a else b

如果我们要在if和else里面做更多的事情,可以增加括号如下所示

fun max(a: Int, b: Int) = if (a > b) {
    println("a>b")
    a // 因为是表达式,所以不能用:return a
} else {
    println("b>a")
    b // 因为是表达式,所以不能用:return b
}

如果使用return则会报错:error: returns are not allowed for functions with expression body.

 注意:这里表达式体没有显示写出来是因为可以从表达式中推导出对应的返回类型,所以表达式的结果类型一定要一致

 

三、变量

1、声明变量总是以关键字开始

val answer = 42

val answer: Int = 42

如上所示一个是显示类型声明,一个是省略类型声明;因为kotlin大部分都是表达式,所以等号右边是一个表达式,kotlin可以根据表达式的结果推出answer是Int类型

2、关键字val 类似于java中的final,只能进行一次初始化所以如下的方式都是可行的

    val c = 10
    val c: Int = 10
    val c = if (a > b) a else b
    val c: Int
    // 在之后的操作中对c进行初始化
    c = if (a > b) a else b  // 或者:if (a > b) c = a else c = b

如上的4种初始化方式都是可行的

 

四、类自定义访问器

当我们要描述类的特征或者属性时候,更倾向于把它声明成属性;比如:

class Rectangle(val height: Int, var width: Int) {
    val isSequare: Boolean
    get() {
        return height == width
    }
}

这里就把isSequare声明为属性val,通过get的方法获取对应的值;这里使用函数的方式:fun isSequare() = height == width 也是可以的,没有太大的区别。

 

五、枚举

这里用两个枚举的例子来说明枚举的结构

enum class Color {

RED, GREEN, BLUE

}

 

enum class Color(val r: Int, val g: Int, val b: Int) {

RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255); // 注意,这里必须有分号

fun rgb() = (r * 256 + g) * 256 + b

}

println(Color.BLUE.rgb())

如上有两种方式,一种是带成员变量一种是不带成员变量

都是以enum class 开头

 

六、when表达式

首先要注意的是:when也是一种表达式,可以有表达式的结果

when 有两种方式:一种是有参数一种是没有参数

interface Expr
class Num(val value: Int): Expr
class Sum(val left: Expr, val right: Expr): Expr

fun eval1(e: Expr): Int =
    when(e) { // 有参数e
        is Num -> e.value
        is Sum -> eval1(e.left) + eval1(e.right)
        else -> throw IllegalArgumentException("Unknown expression")
    }

fun eval2(e: Expr): Int = when { // 不带任何参数,那么下面的每个判断都需要是bool类型
    e is Num -> e.value
    e is Sum -> eval2(e.left) + eval2(e.right)
    else -> throw IllegalArgumentException("Unknown expression")
}

 

七、数列区间

0到100:0..100

0到99: 0 until 100

100到0: 100 downTo 0

表示步长:step

fun testRange() {
    for (i in 0..10) { // 0到10
        print("$i ")
    } // 0 1 2 3 4 5 6 7 8 9 10
    println()
    for (i in 0..10 - 1) { // 0到9
        print("$i ")
    } // 0 1 2 3 4 5 6 7 8 9 
    println()
    for (i in 0 until 10) { // 0到9
        print("$i ")
    } // 0 1 2 3 4 5 6 7 8 9 
    println()
    for (i in 0..10 step 2) {// 0到10步长为2
        print("$i ")
    } // 0 2 4 6 8 10 
    println()
    for (i in 10 downTo 0) { // 10到0
        print("$i ")
    } // 10 9 8 7 6 5 4 3 2 1 0 
    println()

    for (i in 10 downTo 0 step 2) { // 10到0,步长为2
        print("$i ")
    } // 10 8 6 4 2 0 
    println()
}

如上是区间的使用方式,主要是用在for循环

上面的for 有个关键字:in

这里in是表示是否在区间中,如果表示不在区间中则在in前面加感叹号:!in

注意:感叹号和in是连在一起的,中间不能有空格

标签:10,val,Int,kotlin,基础知识,println,else,表达式
From: https://www.cnblogs.com/czwlinux/p/17756155.html

相关文章

  • [C语言快速入门] 基础知识和基本数据类型
    [C语言快速入门]基础知识和基本数据类型这里主要的知识点主要来自这两个教学视频:史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】_哔哩哔哩_bilibiliC语言基础入门_C3程序猿_哔哩哔哩_bilibili这本书:《CPrimerPlus(第6版)中文版》在本文开篇之前,想简单写一下关于......
  • 【20230613】【Python基础教程】第一章 基础知识
    第一章基础知识I1.4数字与表达python3.x会进行一些浮点数的计算点击查看代码print(1/2)#浮点计算print(1//2)#整除实现结果只保留整数部分print(1%2)#取余保留余数print(2**3)#幂函数结果如下:点击查看代码0.50181.4.1长整型数python3.x......
  • Docker容器基础知识
    Docker容器基础知识Docker是一个流行的用Go语言开发的开源项目,基于Linux内核的cgroup、namespace及AUFS等技术,对进程进行封装隔离,由Dotcloud公司开发。Docker已成为容器行业的事实标准。Docker是众多容器实现中最流行的技术,是容器技术的事实标准,其他知名的还有:rkt, Podman......
  • Kotlin协程的异常处理
    捕获异常Kotlin协程中执行的代码如果可能发生异常,最简单直接的办法也是可以通过try-catch语句来捕获异常GlobalScope.launch{try{println(1/0)}catch(e:Exception){//cancatchexception}}但try-catch只能捕获该协程代码块中......
  • 逆向基础知识
    逆向基础知识1.逆向分析HelloWorld程序源码#include<Windows.h>#include<stdio.h>intmain(intaggc,TCHAR*argv[]){MessageBox(NULL,L"HelloWorld!",L"www.baidu.com",MB_OK);return0;}2.查找main函数......
  • Babel基础知识
    Babel中文官网Babel入门教程-阮一峰Babel博客教程-姜瑞涛Bilibili--系列Babel视频学习教学1.介绍1.1简介Babel是一个JavaScript编译器。Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧......
  • 解题过程中的基础知识积累
    1、求任意进制:vector<int>vec;while(1){vec.push_back(m%n);//短除法求任意进制。if(m/n==0) break;m/=n;}2、枚举法求最大公约数://求sum与a的最大公约数。for(inti=a;i>=1;--i)//从最大数往前循环。{ if(sum%i==0&&a%i==0)//枚举......
  • 模块化基础知识
    1简介1.1模块将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。块的内部数据/实现是私有的,只是向外暴露一些接口(方法)与外部其它模块通信一个模块的组成:私有的数据:内部的变量私有的行为(操作数据):内部的函数向外暴露n个行为1.2模块......
  • js1之基础知识
    1简介1.1计算机语言计算机语言指用于人与计算机之间通讯的语言,它是人与计算机之间传递信息的媒介。总的来说,可以分成机器语言,汇编语言和高级语言三大类。实际上计算机最终所执行的都是机器语言,它是由“0”和“1”组成的二进制数,二进制是计算机语言的基础。0=000000001=00......
  • MongoDB基础知识
    1.简介MongoDB官方文档菜鸟教程1、NoSQL(NotOnlySQL),不仅仅是SQL,主要是指非关系型数据库,是对不同与传统的关系型数据库的数据管理系统的统称2、NoSQL用于超大规模数据的存储,这些类型的数据存储吧需要固定的模式,无需多余的操作就可以横向扩展1.2NoSQL和RDBMS的区分......