kotlin语法总结(二)

Kotlin基础语法(二):控制语句 一、if语句 在Kotlin中的if语句和Java还是还是有一定的区别的,它能在Java中更灵活,除了能实现Java写法外,还可以实现表达式(实现三元运算符),及作为一个块的运用。 1、传统写法(同Java写法一样) 例: var numA = 2 if (numA == 2){ println("numA == $numA => true") }else{ println("numA == $numA => false") } 输出结果为: numA == 阅读详情

上一章地址

kotlin语法总结(一)

文章目录


前言

这章接着上一章语法总结继续讲解,主要讲kotlin和java不一样的地方


(40)嵌套类

(41)数据类 data class 提供toString,equals,hashCode个性化实现,==符号比较值,为每个属性生成operator修饰的componentN()方法,支持解构,生成copy方法,方便对象复制

class playerScore(val experience:Int,val level:Int) {
    operator fun component1() = experience
    operator fun component2() = level
}

fun main() {
    //解构
    val(x,y) = playerScore(1,2)
    println(x)
    println(y)
}
  • 数据类必须有至少一个参数数的主构造函数
  • 数据类的主构造函数参数必须是val或var
  • 数据类不能使用abstract、open、sealed和inner修饰
data class dataTest(var x:Int, var y:Int){
    val isInB = x>0 && y>0
}

(42)枚举类 enum class

(43)运算符重载
在这里插入图片描述

(44)密封类·sealed class(一种特殊的抽象类)

  • 密封类的直接子类必须和密封类在同一个文件中
  • 密封类的间接子类可以在不同文件中

(45)接口 interface,所有的属性和函数实现都需要override关键字

interface Moveable{
    var maxSpeed : Int
        get() = (0..4).shuffled().last()
        set(value) {}
    var wheel : Int
    fun move(moveable: Moveable):String
}

class Car(
    _name:String,
    override var wheel : Int = 4
):Moveable{
    override var maxSpeed: Int
        get() = super.maxSpeed
        set(value) {}
    override fun move(moveable: Moveable): String {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

(46)抽象类 abstract

abstract class Gun(val range:Int){
    abstract fun pullA():String
}

class AK47(val pr:Int):Gun(400),Moveable{

    override fun move(mo: Moveable): String {
        TODO("not implemented")
    }

    override val max: Int
        get() = super.max
    override var wheel: Int
        get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
        set(value) {}
    override fun pullA(): String {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

(47)泛型

class fanXing5<T:Human>(vararg item:T){
    var ab = false
    private var sub : Array<out T> = item

    fun tech(index: Int):T?{
        return sub[index].takeIf { ab }
    }

    //return -> R
    //业务:取元素时把元素进行修改T->R
    fun <R>tech(index: Int,suba:(T) -> R):R?{
        return suba(sub[index]).takeIf { ab }
    }
    //a[i] --> a.get(i)
    operator fun get(index: Int):T? = sub[index]?.takeIf { ab }
}
  • operator:运算符重载
  • 父类泛型对象可赋值给子类泛型对象:
  • 子类泛型对象可赋值给父类泛型对象:

(48)扩展函数:不直接修改类定义的情况增加类的功能,封装频率使用较高的代码,字节码中被编译成静态方法

fun Any.easyPrint01() = println(this)
fun Any.easyPrint02():Any{
    println(this)
    return this
}
fun <T> T.easyPrint03():T{
    println(this)
    return this
}

(49)扩展属性

val String.numVowels
    get() = count { "aeiou".contains(it) }

(50)infix中缀函数

  • map中1 to "one"就是中缀表达式
  • 使用infix的条件(1)只有一个参数(2)方法前加infix(3)成员方法或者扩展方法

(51)DSL领域特定语言,android中可代替xml动态实现布局(非必要),kotlin中实现DSL需要两样东西

  • 扩展函数

  • 带接收者的Lambda表达式build:StringBuilder.()->Unit

      (调用者类型.(参数类型)->返回值类型)
    

(52)函数式编程:变换、过滤、合并

  • 变换:map和flatMap
fun main() {
    val animals = listOf("a","b","c")
    //不可变副本在链上函数间的传递
    val babys = animals
        .map { animal -> "A baby $animal" }
        .map { baby -> "aaa $baby" }
    println(animals)
    println(babys)

    val animalLength = animals.map { it.length }
    println(animalLength)

    val flat = listOf(listOf("111","123","123"), listOf("111","45","435")).flatMap { it.filter { it.contains("1") } }
    println(flat)

    val aa = listOf("123","211","3234").filter { it.contains("1") }
    println(aa)
}
  • 过滤 filter
    val num = listOf(3,4,5,6,7,8,9,11,13)
    val pri = num.filter { number ->
    (2 until number).map { number%it }.none { it==0 }
}
    println(pri)
  • 合并 zip fold reduce
    val aa = listOf("123","211","3234")
    val bb = listOf(1,2,3)
    val cc = aa.zip(bb).toMap()
    println(cc)

    //fold函数
    val ee = listOf(1,2,3,4).fold(2){acc,num ->
        println(acc)
        acc + (num*3)
    }
    println(ee)

优点:

  • 累加变量隐式定义
  • 函数运算结果会自动赋值给累加变量,降低出错率
  • 执行新任务函数很容易添加到调用链上,都兼容Iterable类型

(53)惰性集合:序列(Sequence)

Sequences 序列接口强大在于其操作的实现方式。序列中的元素求值都是惰性的,所以可以更加高效使用序列来对数据集中的元素进行链式操作 (映射、过滤、变换等), 而不需要像普通集合那样,每进行一次数据操作,都必须要开辟新的内存来存储中间结果。

  • 中间操作:如果返回的是一个 Sequence 那么这就是一个中间操作,操作被延迟,在末端操作被调用时,才会输出提示

  • 末端操作:执行原来中间操作的所有延迟计算

  • 创建序列:(1)list.asSequence()
    (2)val num = generateSequence(0){it+1}
    (3)val numOnce = num.constrainOnce()一次性序列

  • 数据量越大,性能越好

  • 优化原理:不会开辟空间保存中间值,只算出结果

  • 实例化对应的 Sequence 子类对象,每个子类对象重写了 Sequence 接口中的 iterator () 抽象方法,内部实现根据传入的迭代器对象中的数据元素,加以变换、过滤、合并等操作,返回一个新的迭代器对象。这就能解释为什么序列中工作原理是逐个元素执行不同的操作,而不是像普通集合所有元素先执行 A 操作,再所有元素执行 B 操作。

(54)协程:轻量级线程

  • 为什么不用线程? 回调地狱:callBack里嵌套callback,代码可读性差
  • 协程以后将会单独开一章讲解
Kotlin基本语法(二) kotlin 函数 阅读详情

相关推荐

手把手教你用STM32单片机DIY一个简易PLC(附完整电路图与PCB文件)

本文详细介绍了如何利用STM32单片机DIY一个简易PLC控制器,涵盖硬件设计、电路图解析、PCB布局优化及固件框架实现。通过完整的电路图和PCB文件,帮助读者从元器件选型到工业级优化,逐步构建可靠的PLC系统,特别适合工业自动化爱好者和学习者实践。

weixin_42527160的博客 570

Kotlin学习(二)Kotlin基础语法

学习一门语言,我总是会先学习一下基本的语法。因为并不急着应用Kotlin去开发项目,所以,还是有很多的时间去学习。今天,简单的总结一下Kotlin的基本语法。

zhaojun的博客 2万+

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。

weixin_29284657的博客 227

学习Kotlin语法(二)

经过上一章节,我们对Kotlin基础语法有了大致的了解,了解了什么是基本类型、集合、控制流程、函数、类、空安全,接下来我们将更近一步的去了解Kotlin的相关知识,本章节将详细的学习Kotlin中面向对象编程(OOP)的相关知识。类Kotlin中的类是使用关键字class声明的: 类声明由类名、类头(指定其类型参数、主构造函数和其他一些东西)和用花括号括起来的类体组成。页眉和正文都是可选的;如果类没有主体,则可以省略花括号。 构造函数(主构造函数)Kotlin中的类有一个主构造函数,可能还有一个或多个辅

m0_56334538的博客 2370

STM32H743 LAN8720网口配置避坑指南:用CubeMX v6.5.0快速搞定LWIP+FreeRTOS

本文详细介绍了使用CubeMX v6.5.0配置STM32H743与LAN8720网口的LWIP+FreeRTOS方案,涵盖硬件连接、时钟配置、ETH外设初始化及LWIP协议栈调优等关键步骤。特别针对常见陷阱提供解决方案,帮助开发者快速实现稳定网络通信,适用于嵌入式网络开发场景。

weixin_33739523的博客 356

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2883

Kotlin-基础语法练习二

Kotlin程序由表达式和语句组成:表达式用于计算值,语句用于执行操作。代码块通过大括号{}组织代码,常用于函数和控制结构。文章详细介绍了Kotlin的if表达式,包括基本语法、if-else语句、if-else-if阶梯表达式以及嵌套if结构,并通过具体示例展示了各类条件判断的用法。同时阐述了语句(单语句与多语句)和代码块的概念,说明了控制流在Kotlin编程中的重要性。所有语法均配有流程图和完整代码示例,帮助理解Kotlin的条件逻辑实现方式。

weixin_47905944的博客 1093

手动测试台架搭建,让你的车载测试更轻松

如果你也在经常进行车载测试,就知道有时候手头的设备并不能完全满足需求。 在我之前的测试中,发现了一些问题,但是却找不到根本原因。于是,我开始思考如何打造一个更为完美的手动测试台架,让测试变得更加轻松。 经过不断地实践和调试,我终于成功搭建出了一个能够满足自己需求的测试台架。现在,我想和大家分享这个搭建的经验,希望能够帮助到在车载测试领域工作的小伙伴们,让你们的测试更加准确、高效!

weixin_67553250的博客 1万+

Kotlin语法基础篇(二)

Kotlin语法基础篇(二) 文章目录Kotlin语法基础篇(二)一、数据类型二、布尔类型三、Char类型四、字符串五、数组Array 优快云 Github 任何计算机编程语言,其基础与核心都离不开数据结构与算法,以及内存模型等。kotlin也是一种jvm语言,类似于java的数据类型,但是区别也比较明显。 一、数据类型 kotlin中没有java的那种基础数据类型,在kotlin中,一切皆对...

志威梦优快云博客 299

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进

本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。

weixin_42539414的博客 294

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 440

【深入kotlin】 - 基础语法(二)

Import 同 Java 一样,位于同一包内的 class 不需要 import,否则需要 import。但可以指定别名: import com.example.xxx as zzz 将 xxx 导入,并重命名为 zzz。 判断 if 比 swift 中有所扩展。比较特别的地方是支持三目运算(swift 中时 ? : 三目运算符): a = if(c==b) c else b 甚至可以使用多行语句,最后一句的表达式自动返回(不需要 return): str = if(a<0) { printl

kmyhy的专栏 2213

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

Kotlin基础语法(二)

*下面是lambda形式定义的加法操作:x : Int , y : Int -> x + y } /*由于支持类型推导,我们可以采用两种方式进行简化:*/ // 方式一: val sum1 = {x : Int , y : Int -> x + y } // 方式二: val sum2 :(Int , Int) -> Int = {x , y -> x + y } //现在总结一下Lambda的语法 /* 1、⼀个Lambda表达式必须通过{}来包裹;

乐褀的博客 291

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

kotlin基础语法②

/ 自定义 getter:计算面积(没有幕后字段)get() = width * height // 每次访问 area 时都会重新计算// 自定义 setter:校验宽度不能为负数field = value // field 指代幕后字段(存储实际值)} else {println("宽度不能为负数!")println(rect.area) // 输出 15.0(调用 area 的 getter)rect.safeWidth = -2.0 // 触发 setter 校验,打印提示。

weixin_42943416的博客 273

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

(二)kotlin基础语法概述

记录学习过程,用简短的话描述核心价值。 本文主要对kotlin的一些基本知识进行简单的介绍。 1、函数 kotlin中,代码末尾不需要分号(;)结束, 用fun声明一个函数,以下是声明一个无返回值的函数: /** * fun:声明一个函数 */ fun main(args: Array<String>) {//参数名字冒号接上参数的类型 println("Hello wor...

追yi流年 788

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Kotlin语法手册(二)

Kotlin语法手册(二) 在使用kotlin时,由于掌握的不够牢靠,好多时候也还是Java编程的习惯,浪费了kotlin提供的语言特性,方便性,间接性,在阅读一些Android开源库的时候,由于好多都是kotlin语法编写的,看的比较费劲,还得去查阅kotlin的语法,比较不方便,故把kotlin的语法记录下来,方便查阅温故,巩固自己的基础知识。 函数操作符 总数操作符 any 如果至少有一个元素符合给出的判断条件,则返回 true val list = listOf

gf785803055的专栏 342

Kotlin开发之旅《二》—Kotlin的基本语法

如果对Kotlin不太了解的童鞋们,请参考 Kotlin开发之旅《一》— 初学者Kotlin基础必备 Kotlin成为Android开发首选语言——你绝对不能错过的 今天关于来学习Kotlin的基本语法。Java to Kotlin 主要语法,以便于你快速认识 Kotlin 这门语言 1、变量的声明 定义局部变量 次赋值(只读)的局部变量 val a: Int = 1 // ⽴即赋值 ...

weixin_34270606的博客 330

Android Kotlin 基础语法(二)

一、前言: 从这篇文章开始,正式进入 Kotlin 的学习,只要学过 java 的同学,能很好的理解 Kotlin 语法,虽不同,但有相似之处。 不敢有丝毫的懈怠,但怀有无比的信心! 二、基础语法: 1. Kotlin 文件 Kotlin 文件以 .kt 为后缀。 Kotlin 中分号可以省略不写。 2. 包声明 代码文件的开头一般为包的声明: package com.runoob.main...

weixin_39069034的博客 195

Kotlin—基本语法(二)

本篇含有小量的实战练习,下面的数据类型,强烈建议你在IDE手动练习,请勿复制!!! 一、数据类型 在Android中使用Kotlin编写的代码会靠Java虚拟机,所以数据类型最终被编译成为Java数据类型。 所以先简单的说一下Java的数据类型 1.Java的数据类型 Java语言的数据类型分为:基本类型和引用类型。基本类型变量在计算机中保存的是数值,当赋值或作为参数传递给函数...

光临天下 587

kotlin 基本语法(二)

十二, kotlin控制语句 1, if else 语句 // 传统用法 var max = a if (a &lt; b) max = b // 使用 else var max: Int if (a &gt; b) { max = a } else { max = b } // 作为表达式 val max = if (a &gt; b) a else b //类...

wqc910605的博客 280

Kotlin基础语法 二、变量与常量

1. 变量的声明 kotlin变量的声明必须使用var或val关键字。其中: var: 用此关键字声明的变量表示可变变量,即可读且可写(可以被多次赋值)。相当于Java中普通变量 val: 用此关键字声明的变量表示不可变变量(也叫只读变量、运行期常量),即可读但不可写(不能重新赋值)。基本相当于Java中用final修饰的变量。 标准定义格式: var或val 变量名: 数据类型 = xxx 注意: ) 常量与变量都可以没有初始化值,但是在引用前必须初始化。如果没有初始化,必须指明数据类型。 如果是类的变

weixin_43864176的博客 2298

小白Kotlin入门语法(二)

继续来一起学习Kotlin基础吧~~ Kotlin常量与变量 常量 在Kotlin中什么是常量 val me:String = “helloworld”,val =value,val它是值类型。类似Java的final,不能重复赋值。 例如: //运行时常量 val x= getX() //编译器常量 const val x = 2 变量 什么是变量,var ...

码蛋蛋 309

Kotlin语法(二)基础语法

1.   新建类         定义类使用class关键字;另外跟Java类似,包的定义和引用要放到文件头。         注:Kotlin文件名称可以跟定义的类名称不同。         如:文件名称为TestKotlinClass.kt,类名称为KotlinClass         packagecom.test.kotlin   class Kotl

tangxl2008008的专栏 1989

Kotlin学习二:Kotlin基本语法

Kotlin文件以.kt为后缀 包声明 //包定义 package com.biyou.main //引用库文件 import java.util.* //类定义 class KotlinClass {} //方法定义 fun KotlinMethod() {} 和java一样,Kotlin一般也需要定义包名,不过不定义包名也不会报错,也会生成相应的class文件,默认为defa...

lixpjita39的专栏 321
上一篇: kotlin语法总结(一)
下一篇: Jetpack中各个组件简介
浮空over
博客等级 码龄7年 6粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值