Kotlin基本特性

目录

函数

if

when

循环

面向对象 

继承

主构造函数

接口

修饰符

​编辑数据类

单例类

Lambda编程

集合

lambda用法

常见函数式API

空指针

判空辅助工具

字符串内嵌表达式 

函数

fun add1(a:Int,b:Int):Int{
    return a+b
}

fun add2(a:Int,b:Int):Int = a+b // 只有一句的可以写成赋值的形式

if

fun func(a:Int,b:Int): Int {
    var ret:Int = if(a>b){
        a
    }
    else b
    return ret
}

if语句有返回值,也可以写成赋值的形式:

fun func1(a:Int,b:Int):Int = if (a>b) a else b

when

fun getstring(str:String) = when(str) {
    "jack" -> 1
    "mike" -> 2
    else -> 3
}

when也有返回值,用法类似switch。

循环

    for(i in 1..10) // 左闭右闭区间
        println(i)
    for(i in 1 until 10) // 坐闭右开区间
        println(i)
    for(i in 1..10 step 2) // 每次+2
        println(i)
    for(i in 10 downTo 1) // 降序
        println(i)
    for(i in 10 downTo 1 step 2) // 降序+2
        println(i)

面向对象 

继承

open class Base
{
    var a:Int = 0
}
class dervice : Base()
{
    var b:Int = 0
}
fun main() {
    var base = Base()
    base.a = 1
    var der = dervice()
    der.a = 2
}

加上open关键字才能被继承 

主构造函数

open class Base(val aa:Int,val bb:Int)
{}
class dervice(val a:Int,val b:Int): Base(a,b)
{
    init {
        println("init")
    }
}
fun main() {
    val der = dervice(2,3)
    println(der.a)
}

主构造函数没函数体,但是需要其他操作可以写在init里面。若想调用父类的构造函数,可以在Base()里传参。

接口

interface JAY
{
    fun jay(name:String)
    fun chou(name:String)
}
class jaychou : JAY
{
    override fun jay(name: String) {
        println(name)
    }
    override fun chou(name: String) {
        println(name)
    }
}
fun main() {
    val jc = jaychou()
    jc.jay("Jay")
    jc.chou("Chou")
}

也存在默认的接口,即没有自己实现就调用默认的。

修饰符


数据类

数据类存在的意义:数据类 Data class 存在的意义是什么?_data class must have at least one primary construc-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/xiaokangss/article/details/130712827

data class Savadata(var name:String,var number:Int){}

data class比class 多实现了 toString()、hashCode()、equals()、copy()、componentN()方法。但是kotlin系统会默认帮我实现而不需要像JAVA那样重新这些方法。
hashCode()、equals()是用来比较对象内容是否相同,多用于HashMap等容器中;toString()是用来打印对象内容;copy()实现了复制功能;componentN()提供了快速访问元素的功能。data class只是是kotlin提供的具有常用数据model功能的类,用于提升开发效率。

单例类

object sig {
    fun test(){
        println("test")
    }
}
fun main() {
   sig.test()
}

不需要提供静态变量和静态方法,系统会自动帮我们生成。

Lambda编程

集合

val list = listOf("apple","banana","pear")
fun main() {
   for(i in list)
   {
       println(i)
   }
}

用listOf来一次性将list元素给add进去,避免了多次add,简化了代码。 不过只适用于不可变集合。针对可变集合使用mutableListOf。同样的,针对set也是一样。可以调用setOf。而map除了可以map["apple"] = 1之外,可以使用mapOf:

val map = mapOf("apple" to 1,"pear" to 2)
fun main() {
   for(i in map)
   {
       println(i.key + i.value)
   }
}

lambda用法

val list = listOf("apple","banana","pear")
val map = mapOf("apple" to 1,"pear" to 2)
fun main() {
   var maxnumber = list.maxBy { it.length }
    println(maxnumber)
}

上述代码求最长的单词。也可以用lambda:

fun main() {
   //var maxnumber = list.maxBy { it.length }
    var maxnumber = list.maxBy { i:String -> i.length }
    println(maxnumber)
}

lambda格式:{ 参数名1:参数类型,参数名2:参数类型 -> 函数体 } 

常见函数式API

map(对元素进行任意的映射转化)

fun main() {
    var newlist = list.map{it.toUpperCase() }
    for(i in newlist){
        println(i)
    }
}
// 将小写转化为大写

filter(过滤元素)

fun main() {
    var newlist = list.filter { it.length<=4 }
    for(i in newlist){
        println(i)
    }
}
// 筛选字母数量小于等于4的元素
fun main() {
    var newlist = list.filter { it.length<=4 }.map{it.toUpperCase()}
    for(i in newlist){
        println(i)
    }
}
// 也可以配合map使用

any(是否存在一个元素满足条件)

all(是否全部元素都满足条件)

var ret1 = list.all{it.length>=3}
var ret2 = list.any{it.length>=5}

空指针

kotlin在编译时期就把会存在空指针问题的情况就提前报错。为了防止区别哪些变量可以为空,设置了在类型后面加上?的形式。

fun test(num:Int?){
    if(num!=null){
    }

} // 表示num可为空,并且一般需要加上判空

判空辅助工具

字符串内嵌表达式 

class test{
    var i = 1
}
fun main(){
    println("555${test().i}") // 执行结果5551
}

当表达式只有一个变量是,大括号也可以省略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/613951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架&#xff0c;它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件&#xff0c;也可以在类被加载入虚拟机之前动态改变类行为&#xff0c;ASM从类文件中读入信息后能够改变类行为&#xff0c;分析类信息&#xff…

KBU1010-ASEMI新能源专用KBU1010

编辑&#xff1a;ll KBU1010-ASEMI新能源专用KBU1010 型号&#xff1a;KBU1010 品牌&#xff1a;ASEMI 封装&#xff1a;KBU-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;10A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a;4…

yum、rpm相关命令-工具手册

1.rpm文件: 1.1安装rpm文件: rpm -ivh kde-select.rpm23 #--nodeps强制安装,无视环境缺少依赖的检查 rpm -ivh --nodeps kde-select.rpm #--force --replacefiles可以无视rpm的冲突去强制替换(如两个rpm的安装路径相同了会有冲突) rpm -ivh --nodeps --force --replacef…

解析Linux键盘组合键产生信号的完整过程:从硬件中断到信号发送

前言 每一个了解Linux的都知道这样一个知识&#xff0c;CtrlC组合键能够终止一个进程。 个人了解进程相关知识之后知道&#xff0c;一个进程被终止只会有有三种情况&#xff1a; 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码运行异常&#xff…

FreeRTOS【2】配置文件

1.开发背景 基于上一篇指引&#xff0c;移植了 FreeRTOS 到系统核心移植到了工程中&#xff0c;但是有很多功能没有配置&#xff0c;下面介绍常用的配置。 2.开发需求 配置 FreeRTOS 常用功能 3.开发环境 window10 MDK STM32F429 FreeRTOS10.3.1 4.实现步骤 4.1 配置文…

【QT】初始QT

目录 一.背景1.GUI开发的各种技术方案2.什么是框架3.QT支持的系统4.QT的版本5.QT的优点6.QT的应用常见 二.环境搭建1.认识QTSDK中的重要工具2.使用QT Creator创建项目3.项目解释(1)main.cpp(2)widget.h(3)widget.cpp(4)widget.ui(5)Empty.pro(6)临时文件 三.初始QT1.Hello Worl…

YOLOv8预测流程-原理解析[目标检测理论篇]

接下来是我最想要分享的内容&#xff0c;梳理了YOLOv8预测的整个流程&#xff0c;以及训练的整个流程。 关于YOLOv8的主干网络在YOLOv8网络结构介绍-CSDN博客介绍了&#xff0c;为了更好地介绍本章内容&#xff0c;还是把YOLOv8网络结构图放在这里&#xff0c;方便查看。 1.前言…

以太网技术介绍

随着通信和计算机技术的不断发展&#xff0c;无论是骨干网还是接入网&#xff0c;以太网都已成为应用场景最多&#xff0c;应用范围最广泛的技术之一。对于初次应用以太网的读者&#xff0c;本文主要给出以太网技术的基础知识&#xff0c;并对以太网涉及的部分协议进行简要说明…

找不到msvcr120.dll无法执行代码?几种方法一键修复msvcr120.dll难题

电脑出现“找不到msvcr120.dll无法执行代码”是什么情况&#xff1f;msvcr120.dll文件是Microsoft Visual C Redistributable的一部分&#xff0c;它是应用程序在Windows操作系统上正常运行所必需的动态链接库文件之一。因此&#xff0c;缺少了msvcr120.dll文件&#xff0c;相应…

Sora惊艳亮相:AI技术掀起创作革命,影视产业迎来新风貌!

Sora平台近期发布了名为"Sora首次印象"的更新&#xff0c;为用户带来了令人瞩目的变化。该更新不仅展示了Sora平台的发展方向&#xff0c;还介绍了其在电影制作、广告宣传等领域的潜在应用。 同时&#xff0c;Sora的首席执行官Sam Altman与好莱坞影视工作室进行了会…

电火灶是燃气灶吗?节能、环保效果怎么样?

随着科技的进步&#xff0c;厨房中的传统设备也逐步被新型、高效且环保的设备所替代。电火灶&#xff0c;作为一种新型的电火烹饪设备&#xff0c;逐渐进入人们的视野。那么&#xff0c;电火灶是否与传统的燃气灶有所区别&#xff1f;其节能与环保效果又如何呢&#xff1f;下面…

精益生产咨询公司:深入探讨其独特魅力与核心竞争力

精益生产咨询公司&#xff0c;作为专注于帮助企业实现精益转型和效率提升的专业机构&#xff0c;在现代工业生产中扮演着不可或缺的角色。这些公司不仅具备深厚的行业经验和专业知识&#xff0c;还能够根据企业的实际情况和需求&#xff0c;提供个性化的解决方案和持续的支持服…

stm32f103c8t6之4x4矩阵按键

基于普中精灵开发板 1、矩阵按键原理 当我们需要使用较多的按键时&#xff0c;单片机的IO口可能不够用,这是就需要使用矩阵按键。 对应IO口如下&#xff1a; 步骤解析&#xff1a; 1、全部按键都没有按下时&#xff0c;全行IO为低电平&#xff08;全列对应的IO设置为下拉低…

maven mirrorOf的作用

在工作中遇到了一个问题导致依赖下载不了&#xff0c;最后发现是mirror的问题&#xff0c;决定好好去看一下mirror的配置&#xff0c;以及mirrorOf的作用&#xff0c;以前都是直接复制过来使用&#xff0c;看了之后才明白什么意思。 过程 如果你设置了镜像&#xff0c;镜像会匹…

基于Springboot+Vue的Java项目-车辆管理系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

网易云新玩法:教你赚取第一桶金!

在现今的音乐应用市场中&#xff0c;有几款软件备受广大用户的青睐。 其中&#xff0c;QQ音乐、酷狗音乐以及网易云音乐都是大家耳熟能详的名字。 这些平台不仅提供了丰富的音乐资源&#xff0c;还具备了许多便捷的功能&#xff0c;使得用户们能够享受到更为优质的音乐体验。…

Covalent Network(CQT)通过 “新曙光” 计划实现重要里程碑,增强以太坊时光机,提供 30% 的年化质押收益率

Covalent Network&#xff08;CQT&#xff09;作为集成超过 280 条区块链&#xff0c;并服务于超过 2.8 亿个钱包的领先结构化数据基础设施层&#xff0c;宣布了其战略计划 “新曙光” 中的一个重要进展。随着网络升级并完成了准备工作的 75%&#xff0c;这将为即将部署的以太坊…

Jsp+Servlet实现图片上传和点击放大预览功能(提供Gitee源码)

前言&#xff1a;在最近老项目的开发中&#xff0c;需要做一个图片上传和点击放大的功能&#xff0c;在Vue和SpringBoot框架都有现成封装好的组件和工具类&#xff0c;对于一些上世纪的项目就没这么方便了&#xff0c;所以需要自己用原生的代码去编写&#xff0c;这里分享一下我…

Nextcloud私有云盘-重新定义云存储体验

Nextcloud私有云盘-重新定义云存储体验 1. 什么是Nextcloud ​ Nextcloud是一个开源的云存储和协作平台&#xff0c;旨在为个人用户、企业和团队提供安全、隐私保护的数据存储和共享解决方案。它允许您在不同设备之间同步、共享文件&#xff0c;提供了强大的协作工具和应用生…

C++初阶之stack,queue,priority_queue的使用和模拟以及仿函数的创建和使用

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.stack,queue,priority_queue简介以及代码模拟 1.1 stack …