Kotlin基础

news2024/9/19 10:48:12

Kotlin基础

  • 一.Kotlin介绍
    • 1.诞生
    • 2.Kotlin与JVM
    • 3.为什么学习kotlin?
    • 4.Kotlin跨平台特性
  • 二.变量+常量+类型+条件语句+函数
    • 1.声明变量
    • 2.内置数据类型
    • 3.只读变量
    • 4.类型推断
    • 5.编译时常量
    • 6.条件语句:表达式
    • 7.String模板
    • 8.函数
  • 三.匿名函数+函数类型+高阶函数(重点)
    • 1.匿名函数
    • 2.函数类型与隐式返回
    • 3.函数参数
    • 4.it关键字
    • 5.匿名函数类型推断(简写代码,只有匿名函数有,具名函数没有)
    • 6.lambda表达式(重点面试必问)
    • 7.高阶函数(重点面试必问)
    • 8.内联函数(重点面试必问)
    • 9.lambda和匿名内部类接口回调
  • 四.null安全与异常
    • 1.null安全
    • 2.异常
  • 五.字符串操作+数字类型+标准库函数
    • 1.字符串操作
    • 2.数字操作
    • 3.标准库函数
  • 六.集合:List+Set+Map
    • 0.数组
    • 1.List
    • 2.Set
    • 3.Map
  • 七.对象+接口+抽象类
    • 1.定义类创建对象
  • 八.泛型
  • 九.扩展
  • 十.函数式编程
  • 十一.Kotlin与java互操作
  • 十二.协程

一.Kotlin介绍

1.诞生

在这里插入图片描述

2.Kotlin与JVM

在这里插入图片描述

3.为什么学习kotlin?

在这里插入图片描述

4.Kotlin跨平台特性

在这里插入图片描述

二.变量+常量+类型+条件语句+函数

1.声明变量

在这里插入图片描述

2.内置数据类型

没有基本数据类型,只有引用类型,但是编译器会将部分引用类型编程成基本数据类型,看编译后的字节码文件。
在这里插入图片描述
在这里插入图片描述

3.只读变量

在这里插入图片描述

4.类型推断

在这里插入图片描述

5.编译时常量

在这里插入图片描述

6.条件语句:表达式

在这里插入图片描述

7.String模板

在这里插入图片描述

8.函数

(1)函数头
在这里插入图片描述
(2)函数参数
在这里插入图片描述
(3)Unit函数
在这里插入图片描述

三.匿名函数+函数类型+高阶函数(重点)

1.匿名函数

在这里插入图片描述

2.函数类型与隐式返回

在这里插入图片描述
函数类型格式:(输入参数类型)->返回类型

  • 无输入参数也无返回值:() -> Unit
  • 无输入参数返回值为String类型:()->String
  • 输入参数为String类型,返回值是String类型:(String)->String

3.函数参数

在这里插入图片描述

4.it关键字

在这里插入图片描述

5.匿名函数类型推断(简写代码,只有匿名函数有,具名函数没有)

在这里插入图片描述
在这里插入图片描述

6.lambda表达式(重点面试必问)

在这里插入图片描述

7.高阶函数(重点面试必问)

参数为函数类型或者返回值为函数类型的函数为高阶函数
(1)定义参数为函数类型的函数

fun main(){
    //1。匿名函数
    val printUserChinese = {username:String,age:Int->
        "姓名=$username 年龄=$age"
    }
    val printUserEnglish = {username:String,age:Int->
        "name=$username age=$age"
    }
    //2。将匿名函数作为参数
    println(show("姚甜雪",18,printUserChinese))
    println(show("姚甜雪",18,printUserEnglish))
    //3。简写
    println(show("姚甜雪",19,{ username: String, age: Int ->
        "简写username=$username 简写age=$age"
    }))
    //4。最终简写
    println(show("姚甜雪",19) { username: String, age: Int ->
        "简写username=$username 简写age=$age"
    })
    //5。温故it
    var countL = "helloll".count() {
        it == 'l'
    }
    println(countL)
}
//printUser:参数名称  (String,Int)->String:参数类型是函数 输入参数是String,Int,输出参数是String
fun show(username:String,age:Int,printUser:(String,Int)->String):String{
    return printUser(username,age)
}

(2)定义返回值为函数类型的函数

8.内联函数(重点面试必问)

在这里插入图片描述

9.lambda和匿名内部类接口回调

在这里插入图片描述

四.null安全与异常

1.null安全

    //1.可空性
    var str:String? = "abc"
    str = null
    //2.安全调用操作符
    str?.toString()
    //3。非空断言操作符
    str!!.toString()
    //4.使用let函数的安全调用(经常使用):不为null时调用里面的
    str?.let {
        if(it.isNotBlank()){//不为""
            it.capitalize()//转大写
        }else{
            "abc"
        }
    }
    //5.空合并操作符:如果为空执行右边,如果不为空执行左边
    str = str ?: "demo"
    println(str)
    //6.let和空合并结合使用
    str =  str?.let {
        it.capitalize()
    } ?:"demo"

2.异常

五.字符串操作+数字类型+标准库函数

1.字符串操作

 /*****字符串******/
    //字符串截取
    val index = NAME.indexOf("o")
    val str = NAME.substring(0 until index )
    println(str)
    //切割
    val data = NAMES.split(",")
    println(data[0])
    //切割解构语法
    val (n1,n2,n3) =  NAMES.split(",")
    println("$n1 $n2 $n3")
    //替换
    val strr = "xiaoming,danni,xiaohong!"
    val str2 = strr.replace(Regex("[xio]")){
        when(it.value){
            "x"-> "1"
            "i"-> "2"
            "o"-> "3"
            else->it.value
        }
    }
    println(str2)
     //==和===:==判断内容 ===判断地址
    val str3 = "Jason"
    val str4 = "Jason"
    println(str3 == str4)//true
    println(str3 === str4)//true
    val str33 = "Jason"
    val str44 = "jason".capitalize()
    println(str3 == str4)//true
    println(str3 === str4)//false
    //遍历
    strr.forEach {
        println("$it")
    }

2.数字操作

在这里插入图片描述

  	/*****数字类型安全转换******/
    //val number:Int = "8.98".toInt()//报错
    // println(number)
    val number1:Int? = "8.98".toIntOrNull()
    println(number1)
    /*****Double转Int数字格式化******/
    println(8.985678.toInt())
    println(8.985678.roundToInt())//四舍五入
    val s:String = "%.2f".format(8.985678)//保留2位小树
    println(s)

3.标准库函数

(1)apply
在这里插入图片描述
(2)let
在这里插入图片描述
(3)run
在这里插入图片描述
执行函数引用,效果更加明显
在这里插入图片描述
(4)with
在这里插入图片描述
(5)also
在这里插入图片描述
(6)takeIf
在这里插入图片描述

(7)takeUnlesstzz

六.集合:List+Set+Map

0.数组

在这里插入图片描述

1.List

(1)List的创建和取值
在这里插入图片描述
(2)可变列表
在这里插入图片描述
(3)mutator函数
在这里插入图片描述
(4)集合遍历
在这里插入图片描述
(5)解构
在这里插入图片描述

2.Set

(1)Set集合的创建和取值
在这里插入图片描述
(2)可变集合
在这里插入图片描述

3.Map

(1)Map集合的创建
在这里插入图片描述
(2)读取map
在这里插入图片描述
(3)遍历
在这里插入图片描述
(4)可变集合
在这里插入图片描述

七.对象+接口+抽象类

1.定义类创建对象

八.泛型

九.扩展

十.函数式编程

十一.Kotlin与java互操作

十二.协程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于OKD(OpenShift)中组件资源介绍和命令行操作的一些笔记

写在前面 参加考试,会陆续分享一些 OpenShift 的笔记博文内容为 openshift 常见 API 资源对象介绍,包括所特有的 Route,IS,DC,BC 等。学习环境为 openshift v3 的版本,有些旧这里如果专门学习 openshift &a…

第一节 ogre源码编译与安装

一. 电脑环境要求 本机使用的编译环境为:系统为Windows 10, Microsoft Visual Studio Enterprise 2019,版本 16.11.26,cmake-3.18.6-win64-x64 这些为基本的操作环境自己可以从网上下载安装。 二. 依赖环境下载 DirectX SDK &a…

Blade项目的IDE支持

Blade是一个C/C构建工具,详细介绍见Blade构建工具。虽然功能强大,但是缺少IDE支持。本文介绍如何在Blade项目中使用IDE的智能提示、自动补全、自动跳转等特性。 1.VSCode VSCode的C/C插件(ms-vscode.cpptools)提供了C/C代码的智能提示、自动补全和调试…

Java编程设计语言-集合类

API(application programming interface)是JDK的重要组成部分,API提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口,可以帮助开发者方便、快捷地开发Java程序 集合在程序设计中是一种重要的是数据结构,Java中提…

数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6)

数据湖Iceberg-简介(1) 数据湖Iceberg-存储结构(2) 数据湖Iceberg-Hive集成Iceberg(3) 数据湖Iceberg-SparkSQL集成(4) 数据湖Iceberg-FlinkSQL集成(5) 数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6) 数据湖Iceberg-Flink DataFrame集成(7) 数据湖Iceberg-FlinkSQL-…

Linux离线状态下在anaconda中安装pytorch

1. 下载与安装说明 下载地址(按安装方法选取) bz2压缩包下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/?CM&ODwhl包下载 torch、torchversion、torchaudio下载地址:https://download.pytorc…

【OS】Linux Process Memory的探究

【OS】Linux Process Memory的探究 前言 刷B站刷到了南大OS的课程&#xff0c;不得不说酒吧舞的教育水平真滴高&#xff0c;狠狠的看了一些关于进程地址相关的课程。 进程地址空间 1.导言 先导入两个问题&#xff1a; 如下的程序会输出什么&#xff1f; #include<stdio…

axios的使用,axios的get请求、post请求方式、put请求方式

axios (发音&#xff1a;艾克C奥斯)是前端圈最火的、专注于数据请求的库。react/vue官方都推荐使用axios发送ajax请求&#xff0c;是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 node.js 中。 中文官网地址&#xff1a;http://www.axios-js.com/ 英文官网地址&a…

快速下载VScode并配置Python运行环境【详细教程】

快速下载VScode并配置Python运行环境【详细教程】 博主&#xff1a;命运之光 目录 快速下载VScode并配置Python运行环境【详细教程】前言下载vscode第一步vscode官网下载第二步点击下载![请添加图片描述](https://img-blog.csdnimg.cn/1d76c427314b4ddcbd350e0a7e5449d5.png)第…

数据湖Iceberg-FlinkSQL集成(5)

文章目录 数据湖Iceberg-FlinkSQL集成环境准备**Flink与Iceberg的版本对应关系如下**jar包下载地址jar包上传到Flink lib目录下修改flink-conf.yaml配置 创建和使用Catalog创建语法说明Hive CatalogHadoop Catalog配置sql-client初始化文件 DDL语句创建数据库创建表创建分区表使…

ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 0.前言一、安装ROS21.首先将本地的编码格式修改为utf-82.添加ROS2 GPG key3.安装ROS24.设置环境变量 二、简单测试1.Hello ROS&#xff01;2.ROS Turtle 三、总结 0.前言 最近也没找到什么特别感兴趣的小项目&#xff0c;不过偶然间看见ROS2这个东西&#…

中期国际:安卓MT4怎么下载以及下载后需要注意哪些问题

投资现货黄金&#xff0c;需要使用到现货黄金软件。一个简单易用的现货黄金软件&#xff0c;就像是给厨师一把趁手的菜刀&#xff0c;以后的使用会得心应手&#xff0c;投资更加顺利。对于投资者来说&#xff0c;什么现货黄金软件才算是好的呢?小编这里推荐MT4软件。如今不少投…

c++11 标准模板(STL)(std::priority_queue)(四)

适配一个容器以提供优先级队列 std::priority_queue 定义于头文件 <queue> template< class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type> > class priority_queue; priority_queu…

Mysql 查询同类数据中某一数字最大的所有数据

方法一、将时间进行排序后再分组 该表表名为customer, park_id表示园区id&#xff0c;joined_at表示用户的加入时间&#xff0c;created_at表示用户的创建时间。 需求&#xff1a;查出每个园区中&#xff0c;最早加入园区的第一位用户 select * from (select * from custome…

outlook手动配置保姆级别教学

outlook保姆级教学 hello&#xff0c;各位小伙伴&#xff0c;今天呢讲一下outlook的配置&#xff0c;相信啊再次之前也必然看到过其他博主写的&#xff0c;我呢也是前段时间有需求但是网上总是零零散散的。 我呢配置过qq 和126的邮箱这里呢开始教程. 第一步呢首先点击账户的设…

每日一个小技巧:1招教你wav格式如何转换mp3

wav是一种质量较高的音频格式&#xff0c;但它的文件大小通常比较大。为了更方便地分享和存储音频文件&#xff0c;许多人都会选择将其转换为mp3格式。因为mp3格式能够在保持较高音质的同时&#xff0c;尽量降低文件大小&#xff0c;帮助你节省许多磁盘空间。那你们知道wav格式…

Python每日一练(20230425)

目录 1. 多数元素 &#x1f31f; 2. 二叉树的层序遍历 II &#x1f31f;&#x1f31f; 3. 最接近的三数之和 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专…

欧几里得算法、扩展欧几里得算法(特解、应用、通解)

文章目录 1. 欧几里得算法&#xff08;也叫辗转相除法&#xff09;1.1 直接上模拟1.2 几何理解1.3 用代数方法证明 g c d ( a , b ) g c d ( b , a % b ) gcd(a, b) gcd(b, a \% b) gcd(a,b)gcd(b,a%b)1.3.1 左推右&#xff1a; g c d ( a , b ) g c d ( b , a % b ) gcd(a…

Vue 3 第十五章:组件五(内置组件-keep-alive)

文章目录 1. keep-alive1.1. 基本用法1.2. 包含/排除1.3. 最大缓存实例数1.4. <keepAlive> 组件的生命周期 1. keep-alive <keep-alive>组件用于缓存动态组件的实例&#xff0c;以便在它们被切换时保持状态。例如&#xff0c;当我们在一个选项卡中切换不同的视图…

Unity Camera -- (2)相机投影设置

在Editor中调整相机 和场景视图中的其他游戏物体一样&#xff0c;相机本身也可以通过使用移动和旋转工具来进行调整。但这种方式比较难用&#xff0c;调整起来又慢又不精确。我们可以使用Move To View功能来快速调整相机所拍摄的画面。 1. 打开Camera_Projection_Scene&#xf…