kotlin 学习笔记

Tessent IJTAG ICL:从规范到实践的硬件描述语言指南 本文深入解析Tessent IJTAG ICL语言在硬件测试中的应用,从规范到实践提供全面指南。通过模块化设计、网络提取与编辑等实战技巧,帮助工程师高效构建标准化测试网络,显著提升芯片测试效率与覆盖率。特别分享TDR/SIB/TAP的ICL实现方法及调试策略,适用于SoC、车载芯片等复杂场景。 阅读详情

kotlin
一、Kotlin之变量用法


    1.kotlin变量的声明方式与Java中声明变量有很大的区别,而且必须使用var或val关键字。其中:

        var: 用此关键字声明的变量表示可变变量,即可读且可写。相当于Java中普通变量
        val: 用此关键字声明的变量表示不可变变量,即可读且不可写。相当于Java中用final修饰的变量
        基础用法
        定义格式: 关键字 变量名: 数据类型 = xxx
            变量
                //立即初始化
                var var_a: Int = 10

                //推导出类型
                var var_b = 5

                //没有初始化的时候,必须声明类型
                var var_c: Float
                var_c = 12.3f
            
            常量
                //立即初始化
                val val_a: Int = 100

                //推导出类型
                val val_b = 50
                
                
     2.每一行代码的结束可以省略掉分号    
     
     3.延迟初始化属性
        指当程序在第一次使用到这个变量(属性)的时候在初始化。
        使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
        必须是只读变量,即用val声明的变量。
        
二、Kotlin之常量的用法    

        Kotlin中只用val修饰还不是常量,它只能是一个不能修改的变量。那么常量怎么定义呢?
        其实很简单,在val关键字前面加上const关键字
        即:

            const val NUM_A = 6
            其特点:const只能修饰val,不能修饰var
        声明常量的三种正确方式

        在顶层声明
        在object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
        在伴生对象中声明
        
        // 1. 顶层声明
        const val NUM_A : String = "顶层声明"

        // 2. 在object修饰的类中
        object TestConst{
            const val NUM_B = "object修饰的类中"
        }

        // 3. 伴生对象中
        class TestClass{
            companion object {
                const val NUM_C = "伴生对象中声明"
            }
        }
三、Kotlin之注释

    Kotlin中的注释几乎和Java没什么区别。唯一的区别在于Kotlin中的多行注释中可以嵌套多行注释,
    而Java中是不能的。

        单行注释  两个斜杠开头表示单行注释(//)
        多行注释(块注释) 以斜杠加星号开头(/*),同时以星号加斜杠结尾(*/),

 

四、数值类型


    1、Kotlin中的数字的内置类型(接近与Java),其关键字为:

        Byte=> 字节 => 8位
        Short => 短整型 => 16位
        Int => 整型 => 32位
        Long => 长整型 => 64位
        Float => 浮点型 => 32位
        Double => 双精度浮点型 => 64位
        eg:
        var a: Byte = 2
        var b: Short = 2
        var c: Int = 2
        var d: Long = 2L         //长整型由大写字母L标记
        var e: Float = 2f        //单精度浮点型由小写字母f或大写字符F标记
        var f: Double = 2.0
        
        2、进制数

        二进制数
        八进制数(Kotlin不支持)
        十进制数
        十六进制数
        例:

        var g = 0x0F            //十六进制数
        var h = 0b00001011      //二进制数
        var k = 123             //十进制数
        // ps:Kotlin不支持八进制数
        
        3、数字类型字面常量的下划线

        作用:分割数字进行分组,使数字常量更易读
            val oneMillion = 1_000_000
            val creditCardNumber = 1234_5678_9012_3456L
            val socialSecurityNumber = 999_99_9999L
            val hexBytes = 0xFF_EC_DE_5E
            val bytes = 0b11010010_01101001_10010100_10010010

            println("oneMillion => $oneMillion")
            println("creditCardNumber => $creditCardNumber")
            println("socialSecurityNumber => $socialSecurityNumber")
            println("hexBytes => $hexBytes")
            println("bytes => $bytes")
            输出结果为:

            oneMillion => 1000000
            creditCardNumber => 1234567890123456
            socialSecurityNumber => 999999999
            hexBytes => 4293713502
            bytes => 3530134674
            
        4、装箱与拆箱

            装箱与拆箱
            在Kotlin中,存在数字的装箱,但是不存在拆箱。因为Kotlin是没有基本数据类型的,Kotlin是万般皆对象的原则。
            故不存在和Java中的类似int是数据类型,Integer是整型的引用类型。
            
            两个数值的比较
            判断两个数值是否相等(==),判断两个数值在内存中的地址是否相等(===),
            其实上面的装箱操作之后其内存中的地址根据其数据类型的数值范围而定
            
            val numValue: Int = 128    
            val numValueBox: Int? = numValue

            /*
                比较两个数字
             */
            var result: Boolean
            result = numValue == numValueBox
            println("numValue == numValueBox => $result")  // => true,其值是相等的

            result = numValue === numValueBox
            /*
              上面定义的变量是Int类型,大于127其内存地址不同,反之则相同。
              这是`kotlin`的缓存策略导致的,而缓存的范围是` -128 ~ 127 `。
              故,下面的打印为false
            */
            println("numValue === numValueBox => $result")  
            输出结果为:

            numValue == numValueBox => true
            numValue === numValueBox => false
            
五 布尔类型(Boolean)
    1、关键字

        Boolean关键字表示布尔类型,并且其值有true和false

    2、逻辑操作符(与Java相同)

        ' || ' => 逻辑或(或者)
        ' && ' => 逻辑与(并且)
        ' ! ' => 逻辑非(取反)
六 字符型(Char)
    1、关键字

    Char为表示字符型,字符变量用单引号(‘ ’)表示。并且不能直接视为数字,不过可以显式转换为数字。
        
    2、显示转换为其他类型
    字符型的变量不仅可以转换为数字,同时也可转换为其他类型
    例:

    var var1 = char1.toByte()
    var var2 = char1.toInt()
    var var3 = char1.toString()
    var var4 = char1.toFloat()
    var var5 = char1.toShort()
四、字符串类型(String)
    1、关键字

        String表示字符串类型。其是不可变的。所以字符串的元素可以通过索引操作的字符:str[index]来访问。可以使用for循环迭代字符串:
        其中str[index]中的str为要目标字符串,index为索引    
    2、 字符串字面量

    在Kotlin中, 字符串字面量有两种类型:

    包含转义字符的字符串 转义包括(\t、\n等),不包含转义字符串的也同属此类型
    包含任意字符的字符串 由三重引号(""" .... """)表示
    
    可以使用trimMargin()函数删除前导空格 ,默认使用符号(|)作为距前缀,当然也可以使用其他字符。例:右尖括号(>)、左尖括号(<)等。
    
    3、字符串模板

        使用字符串模板的符号为($)。在$符号后面加上变量名或大括号中的表达式
        例:

        val text1: String = "我来了!"
        var text2: String = "$text1 kotlin"
        var text3: String = "$text2 ${text1.length} 哈哈!!!!"
        
五、数组型(Array)
    Kotlin中数组由Array<T>表示,可以去看看源码实现,里面就几个方法
        创建数组的3个函数
            arrayOf()  创建一个数组,参数是一个可变参数的泛型对象
            arrayOfNulls() 用于创建一个指定数据类型且可以为空元素的给定元素个数的数组
            工厂函数(Array())
    
    4、原始类型数组

        Kotlin还有专门的类来表示原始类型的数组,没有装箱开销,它们分别是:
        ByteArray => 表示字节型数组
        ShortArray => 表示短整型数组
        IntArray => 表示整型数组
        LongArray => 表示长整型数组
        BooleanArray => 表示布尔型数组
        CharArray => 表示字符型数组
        FloatArray => 表示浮点型数组
        DoubleArray => 表示双精度浮点型数组
   

二、for语句
        Kotlin废除了Java中的for(初始值;条件;增减步长)这个规则。但是Kotlin中对于for循环语句新增了其他的规则,来满足刚提到的规则。
        for循环提供迭代器用来遍历任何东西
        for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
        1、新增的规则,去满足for(初始值;条件;增减步长)这个规则

        1.1、递增

        关键字:until
        范围:until[n,m) => 即大于等于n,小于m
        
        1.2、递减

        关键字:downTo
        范围:downTo[n,m] => 即小于等于n,大于等于m ,n > m
        
        1.3、符号(' .. ') 表示递增的循环的另外一种操作

        使用符号( '..').
        范围:..[n,m]=> 即大于等于n,小于等于m
        和until的区别,一是简便性。二是范围的不同。
        
        1.4、设置步长

        关键字:step
        
        2、迭代

        for循环提供一个迭代器用来遍历任何东西。
        for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
        2.1、遍历字符串
        
        
        
        2.4、使用数组的withIndex()方法遍历

        例:

        var arrayListTwo = arrayOf(1,3,5,7,9)
        for ((index,value) in arrayListTwo.withIndex()){
            println("index => $index \t value => $value")
        }
        
        2.5、使用列表或数组的扩展函数遍历

        数组或列表有一个成员或扩展函数iterator()实现了Iterator<T>接口,且该接口提供了next()与hasNext()两个成员或扩展函数
        其一般和while循环一起使用
        
        例:

        var arrayListThree = arrayOf(2,'a',3,false,9)
        var iterator: Iterator<Any> = arrayListThree.iterator()

        while (iterator.hasNext()){
            println(iterator.next())
        }
        
三、when语句
    在Kotlin中已经废除掉了Java中的switch语句。而新增了when(exp){}语句。
    when语句不仅可以替代掉switch语句,而且比switch语句更加强大
        3.1、when语句实现switch语句功能

        例:

        when(5){
            1 -> {
                println("1")
            }
            2 -> println("2")
            3 -> println("3")
            5 -> {
                println("5")
            }
            else -> {
                println("0")
            }
        }
        3.2、和逗号结合使用,相当于switch语句中的不使用break跳转语句

        例:

        when(1){
             // 即x = 1,2,3时都输出1。
            1 , 2 , 3 -> {
                println("1")
            }
            5 -> {
                println("5")
            }
            else -> {
                println("0")
            }
            }
            
        3.4、 检查值是否存在于集合或数组中

        操作符:
        (in) 在
        (!in) 不在
        限定:只适用于数值类型
        例:

        var arrayList = arrayOf(1,2,3,4,5)
        when(1){
            in arrayList.toIntArray() -> {
                println("1 存在于 arrayList数组中")
            }
            in 0 .. 10 -> println("1 属于于 0~10 中")
            !in 5 .. 10 -> println("1 不属于 5~10 中")
            else -> {
                println("都错了 哈哈!")
            }
        }
        
        3.5、检查值是否为指定类型的值

        操作符
        是(is)
        不是(!is)
        值得注意的是,Kotlin的智能转换可以访问类型的方法和属性
        例:

        when("abc"){
            is String -> println("abc是一个字符串")
            else -> {
                println("abc不是一个字符串")
            }
        }

        // 智能转换
        var a: Int = 2
        when(a){
            !is Int -> {
                println("$a 不是一个Int类型的值")
            }
            else -> {
                a = a.shl(2)
                println("a => $a")
            }
        }

 

OpenClaw Docker 安装与部署教程,环境隔离不冲突技术指南 本文介绍了使用Docker容器化部署OpenClaw的完整教程。首先通过流程图详细说明了Docker环境检测流程,包括系统支持性检查、Docker安装状态验证、版本检测和服务配置等步骤。然后提供了Windows、macOS和Linux(Ubuntu/CentOS)系统下的Docker安装指南,涵盖从下载、安装到权限配置的全过程。最后介绍了OpenClaw官方镜像的拉取方法以及自定义镜像构建的Dockerfile示例。该教程适用于开发和生产环境,利用Docker实现环境隔离和快速部署。 阅读详情

相关推荐

CVAT实战:从零搭建高效数据标注流水线

本文详细介绍了如何使用CVAT搭建高效的数据标注流水线,从环境部署到团队协作,再到数据流转和质量把控,全面覆盖了数据标注的各个环节。CVAT作为一款开源的数据标注工具,支持多人协作和丰富的标注类型,特别适合遥感图像等复杂场景的标注需求。通过实战案例和技巧分享,帮助读者快速掌握CVAT的核心功能,提升标注效率。

weixin_30555125的博客 397

Kotlin withIndex

返回一个惰性Iterable,它将原始数组的每个元素包装成一个IndexedValue,其中包含。

qq_27494201的博客 385

AS5600磁编码器选型与安装避坑指南:磁铁形状、间隙距离到底怎么选?(附实测数据)

本文详细解析了AS5600磁编码器的选型与安装要点,包括磁铁形状、间隙距离等关键参数的选择,并附有实测数据支持。特别针对Arduino和I2C接口的应用场景,提供了硬件选型和机械安装的实用指南,帮助开发者避免常见陷阱,提升系统精度和稳定性。

weixin_27038245的博客 287

Kotlin 编程的小技巧

在 Android 使用 Kotlin 编写清晰的代码对于可维护性和协作是非常重要的。

chuyouyinghe的专栏 204

IPMItool 控制风扇转速

然后手动设置风扇,最后一位0x1e为设置30%的转速(16进制)。最后4位 0x0f 表示15%,0x0a,表示10%,不建议小于10%,因为10%已经很静音了 如果再小怕不能控温,烧毁硬件。首先停止服务器的自动风扇控制,最后一位0x00表示停止自动风扇控制,0x01为开启自动风扇控制。首先开启主板上的ipmi 设置好 用户名密码。此过程可以在网上搜索,有很多的资料可以参考。解压只有在目录里面有ipmltool。下面是一些常用的修改温度命令。

m0_37970303的博客 5059

Bellhop水声信道模型的仿真

Bellhop是一种基于射线追踪的水声信道模型,广泛用于预测水下环境中的声压场。它通过模拟声波在水中的传播路径,计算声场分布,适用于复杂的水下通信场景。

yt94832的博客 1312

Kotlin控制流

if、for、when、跳转的使用

我的博客 884

H3C设备VRF配置实战:5步搞定多业务网络隔离(附排错技巧)

本文详细介绍了在H3C设备上配置VRF(虚拟路由转发)实现多业务网络隔离的实战方法。通过五步配置流程,从创建VPN-instance、绑定接口到配置独立路由表,帮助网络工程师在单台设备上构建逻辑隔离的企业级网络,并分享了高级路由配置与常见排错技巧。

gold8的专栏 936

在 Kotlin 中使用 forEach 循环时如何获取数组的当前索引?

在 Kotlin 中使用 forEach 循环时如何获取数组的当前索引

转载和创作优秀的博客 1654

Calibre :Standard Verification Rule Format(SVRF) Manual (1-2)

摘要:SVRF规则文件是用于Calibre和ICverify工具的脚本文件,包含层定义、规则检查、注释、预处理指令等元素。规则文件支持全局/局部层定义、隐式层操作,以及条件编译指令(#DEFINE/#IFDEF等)。宏功能(DMACRO/CMACRO)可实现代码复用,支持参数化层操作和嵌套调用。预处理指令支持版本控制(#IFDEFCALIBRE_VERSION)和环境变量默认值设置(#PRAGMAENV)。宏中的层名具有局部作用域,可通过特殊语法实现全局层名指定,LOCAL()修饰符可创建调用作用域内的唯一

u013620135的博客 1334

[VCS]门级仿真及SDF反标

摘要:门级仿真在STA工具普及后仍是验证的重要环节,主要用于检查SDC完备性、异步电路时序、网表完整性及为功耗分析提供波形。门级仿真分为不带时序反标的前仿和带SDF反标的后仿,后仿需加载SDF文件提供精确延时信息。VCS提供多种仿真选项控制时序检查行为,SDF反标可通过命令或系统函数实现。后仿需特别注意关闭notimingcheck选项以确保时序检查有效性,并建议检查SDF反标报告和波形验证延时一致性。

元直的博客 9789

Kotlin——初级篇(四):控制语句详解

在前面 的章节中讲解了Kotlin语言中的数据类型、变量与常量的定义。不了解请参见前面的内容: Kotlin——初级篇(三):数据类型详解。 Kotlin——初级篇(二)常量、变量、注释。 下面详细为大家讲解Kotlin中的控制语句使用。不得不说其和Java中还是有很多不一样的地方。 目录 一、if语句 在Kotlin中的if语句和Java还是还是有一定的区别的,它能在Java中更灵活,...

weixin_30260399的博客 276

OpenSpec 完全指南 config.yaml文件

不管是项目内还是全局存放,自定义工作流都要遵守以下规则,否则会导致OpenSpec无法识别,新手一定要记牢:一个文件夹 = 一个工作流:工作流文件夹的名称,就是中schema字段要填写的名称;每个工作流文件夹必须包含:这是工作流的核心定义文件,没有它,OpenSpec无法识别这个工作流;模板文件统一放templates/目录:如果需要自定义生成文件的模板(比如统一的提案模板、任务模板),就放在工作流文件夹下的templates/里,OpenSpec会自动识别;

h a 6 6 6 c k 为 你解决复杂难题! 1418

Kotlin学习笔记

Kotlin学习笔记

qq_40783389的博客 318

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Kotlin学习笔记一:Kotlin基础

Kotlin基础 首先来个经典的Hello World fun main(args : Array<String>) { println("Hello World") } 关键字 fun 用来声明一个函数 参数类型写在名称后面,变量声明也一样 函数可以定义在文件的最外层,不用非放在类里 数组是一个类 使用 println 代替了 System.out.println。Kot...

苟浩的博客 612

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

kotlin学习笔记2

kotlin学习笔记2

安在野 217

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

学习笔记-Kotlin

前些年的kotlin学习笔记,工作中没有实际使用到,仅此笔记用于有需要时翻阅回忆。

linqingf的专栏 1173

Kotlin的学习笔记1

1.Kotlin学习笔记1 新建立项目kotlin,HelloWorld.kt的文件名称 1.1.运行结果 1.2函数的声明 fun 函数名称(参数) { 函数体 } 1.3 注释 // 和/**/ 和C语言一样的。 1.4 变量 var 变量名:数据类型 1.5 变量赋值 var c:Int=1 类型名 描述 占用空间 例子 By...

keny-大成的博客 134

Kotlin学习笔记、思维导图

王智博 736

kotlin学习笔记之一:基础语法

年前看boss直聘,很多安卓开发岗位需要熟练kotlin开发,为了年后找工作和以后开发效率提升,春节假期开始了kotlin的学习,主要教材是《Kotlin 实战》kotlin in action这本书,这几天有时间顺便把阅读笔记整理下,这里是前三章内容的回忆和笔记整理。 1、kotlin代码在java中访问:文件名+Kt.fun名称,文件名可以通过注解指定名称:@file:JvmNam...

weixin_34327761的博客 156

Kotlin学习笔记二:Kotlin的类型系统

Kotlin的类型系统 基本数据类型和其他基本类型 Java把基本类型和引用类型区分开,基本类型存值,引用类型存地址,还提供了基本类型的包装类型,比如:Integer等。Kotlin并不区分基本类型和引用类型,用的全是一个类型。 val i: Int = 1 val list: List<Int> = listOf(l, 2, 3) 上面的 i 在最后会编译成Java的int, 对于...

苟浩的博客 546

kotlin学习笔记

运算符: 判断一个类是不是另一个类的实例, 有智能类型转换,不用手动强制转换。方法会将传入的参数当作正则表达式, 可以使用转义字符区别。拓展函数: 给现有类添加新的方法,不能访问类的私有成员。顶层函数: 定义在代码文件顶部的函数, 相当于。: 有序集合,​​不可变, 不支持修改,没有。语句,可以有返回值,但是如果有返回值,必须有。也是可变集合,无序,不允许重复元素,无索引。: 定义常量,定义后不可更改,相当于。中的方法可以独立存在, 方法可以嵌套。,不能强制转换,不是同一个继承关系。

2301_80165178的博客 505

kotlin学习笔记(1)kotlin实体类创建以及get set方法使用

【代码】kotlin学习笔记(1)kotlin实体类创建以及get set方法使用。

yundashi168.com 1871

Kotlin进阶学习笔记01

Kotlin进阶学习笔记 从源码分析学习Kotlin,知其然、知其所以然。 通用基础语法学习Kotlin官网或快速语法学习笔记 1. Why Kotlin 之官方说辞 简洁Concise:data class、lambda、快速单例类object 安全Safe:Nullable类型区分,自动推断 //区分nullable var str:String//不同于String? str=null//编译则报错,因为String类型非空,任何可空类型需要?符号,比如String? //避免N

志威梦优快云博客 997

【Kotlin】基本语法学习笔记

Kotlin基础语法

XiaoWu0629的博客 715

Kotlin学习笔记--Kotlin之语言基础

Kotlin极简教程学习笔记--Kotlin基础(一)Kotlin简介Kotlin语言基础1.包2.变量2.1声明变量2.2变量类型推断2.3变量类型检测2.4字符串与模板表达式3流程控制语句3.1 if3.2when3.3 for循环 while 循环 Kotlin简介 Kotlin是一门静态类型编程语言,支持JVM平台、Android 平台等等支持与Android、java 完全互操作。 Ko...

fanlc的博客 579
上一篇: 微信小程序 学习笔记
下一篇: MacBook 跳到行尾、行首、Home和end快捷键
束千凡
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值