kotlin学习

article/2025/9/20 6:12:51

140-手写事件变换操作符之Rx操作符总结(Derry老师)_哔哩哔哩_bilibili 

视频链接:导学_哔哩哔哩_bilibili

一、环境搭建

1、工具安装与环境配置

官网地址: Download Android Studio & App Tools - Android Developers

安装步骤就不一一介绍了

新建过程如下(新建一个多tab的):

然后就会自动下载依赖库了

2、介绍项目工程结构

 项目可以选择project模式(可以现实所有的文件), 默认的android模式只会显示安卓相关的文件

 

 

 模块app下面的gradle文件的作用:

根目录下gradle文件的作用: 声明在编译过程中需要使用到的一些插件 

  

3、实践:构建出第一个app

(1)构建方法:

(2)找到安装包

二、开发语言

函数类型&隐式返回

匿名函数不要写return, 最后一行就是返回值

只要匿名函数是一个入参的, 就带有一个it

 

上面的方式需要手动写定返回值, 下面的可以自动推断返回值

匿名函数的类型推断

 lambda表达式学习

 在函数中定义参数是函数的函数

 

 之前用Java的方式

 

函数内联学习

如果函数使用lambda作为参数, 就需要声明成内联, 如果此函数, 不是用内联, 在调用端会生成多个对象来调用造成性能损耗.如果此函数使用内联,相当于C++ #define 宏定义 宏替换.会把代码替换到调用处, 调用处没有任何函数开辟, 对象开辟的损耗.

小结: 如果函数使用lambda, 尽量使用inline关键字, 这样内部会做优化, 减少函数开辟、对象开辟的损耗.

函数引用

lambda属于函数类型的对象需要把普通函数变为函数类型的对象-函数引用, 所以上面main函数里面的调用需要改为 

 函数类型的对象, 也可以通过先接收这种

kotlin函数类型作为返回类型 

 匿名函数与具名函数

 只有一个参数可以使用it

 匿名函数,没有名字

 具名函数: 有具体的名字

使用Java实现具名和匿名函数

匿名函数

 具名函数

kotlin语言的可控性特点

kotlin语言在编译期间就控制了空指针异常

        第一种情况: 默认是不可空类型, 不能随意给null, 不能是非空类型String的值

        第二种情况: 声明时指定为可空类型: 有?可以给null

kotlin的安全调用操作符 

capitalize() 让字符串的首字母变为大写

 使用带let的安全调用

 kotlin中的非空断言符操作特点

 !!不管是不是null都执行(那么为null会崩溃)

如果100%能保证是有值的才能使用断言!!

对比使用if判断null值的情况 

 kotlin空合并操作符 

 异常处理与自定义异常特点

 语言的先决条件函数 

 substring

split操作 

 replace完成加密解密操作

加密操作:

 解密操作:

==与===比较操作 

name1和name3常量池的位置不同, 所以为false ;name1和name2的引用一样所以为ture(指向常量池中的同一个位置) 

字符串遍历操作  

不想使用it可以定义一个参数覆盖it

 数字类型的安全转换函数

以后字符串有整型相关的转换尽量使用toIntOrNull()

 Double转Int与类型格式化

apply内置函数

 apply一般使用他的链式调用, 不是返回值的方式

let内置函数 

 内置函数的总结:

 run内置函数

 

 匿名的方式写

 with内置函数 

also内置函数 每个区间做的事情和返回值没有关系

 takeIf内置函数

 小结: 一般大部分情况下, 都是takeIf + 空合并操作符 = 一起使用

takeUnless 

 

三、集合

List创建与元素获取 

 可变List集合

mutator函数学习

List集合遍历 

解构语法过滤元素 

 用_内部可以不接收赋值,节约一点性能

Set创建与元素获取 

可变Set集合 

集合转换与快捷函数

数组类型

 Map的创建

 读取Map的值

遍历Map学习 

可变Map集合学习 

 语言的定义类和Filed关键字学习

 计算属性与防范竞态条件

 防范竞态条件: 当你调用成员可能为null, 可能为空值就必须采用防范竞态条件, 这个是KT编程的规范化

主构造函数 

 p.show()

主构造函数里定义属性

次构造函数: 先调用主构造之后再调用次构造

 构造函数中默认参数学习

初始化块学习

临时类型在init中可以使用,但是在普通函数中不能直接使用

构造初始化顺序

延迟初始化lateinit: 用的那一刻再去加载, 使用之前去手动的加载

惰性初始化by lazy

 饿汉式没有任何懒加载的特点

 懒加载

初始化陷阱一: init函数和类成员是同时执行的关系, 所以下面的顺序会导致程序崩溃

初始化陷阱二: new的时候调用主构造函数, 主构造函数没有获取到info所以会导致程序崩溃

初始化陷阱三

修正:

语言的继承与重载的open关键字: kotlin里面默认都是private的, 需要用open打开, 子类才能继承

类型转换

智能类型转换

Any超类学习: 超类(kotlin中任何类都会隐式继承any类)

对象声明学习

对象表达式学习

具名实现

 Java实现 KT[对象表达式]

 Java最简洁的方式

伴生对象学习: 凡是写到companion里面的都是静态的

嵌套类学习

内部类: 默认情况下kt内部类不能访问外部的类, 需要增加修饰符inner成为内部类才能访问外部类

嵌套类

数据类学习

copy函数学习

 

解构声明学习

运算符重载

枚举类学习

枚举类定义函数学习

 

代数数据类型

密封类学习: sealed

数据类使用条件

语言的接口定义

语言的接口的默认实现

抽象类学习 和java相同

定义泛型类学习: 传什么类型都会做类型推断

泛型函数

泛型变换实战

 map函数模仿RXjava操作

泛型类型约束学习

限定为Person之后: 下面截图注释掉的就都有问题会报错

vararg关键字(动态参数)

[]操作符学习

out-协变学习: 想要所有的泛型都能被修改 就用in, 想要不被修改用out

协变: 父类泛型声明处, 可以接收子类泛型具体处

 

用Java实现in-逆变学习

Java实现使用in和out

 out

reified关键字

定义扩展函数

超类上定义扩展函数: 超类的扩展函数在任何地方都可以调用(谨慎使用)泛型扩展函数

string类型输出长度

显示调用时间 显示调用者类型

标准函数与泛型扩展函数

扩展let函数

扩展属性

示例:

可控类型扩展函数

infix关键字

定义扩展文件

文件一

文件二 结果:

重命名扩展学习

apply函数详解

DSL学习: 定义一个规则进行输入输出

applyFile函数

main函数中进行 调用

 变换函数-map

就是把匿名函数最后一行的返回值加入一个你的集合, 新集合的泛型是R,并且返回新集合

变换函数-flatMap

输出 list.flatmap

过滤函数-filter

 介绍filter

返回给map和返回给flatmap的效果是不同的

 

合并函数-zip

使用函数式编程

Java的写法

 kotlin方式

kotlin函数式编程真牛逼👍

互操作性和可控性

 Java和kotlin的交互

        Java文件

        kotlin文件

单例模式

饿汉式

        Java版本

        kotlin版本 

 懒汉式: 要用的时候再加载

        Java​​​​​​​

 

        kotlin

 懒汉式实现+安全管理版本(上面的方式多线程就会出现问题)

        同步锁的方式

                 Java

                kotlin         双重校验安全

                Java 同步锁+同步代码块

 

                kotlin lazy的模式实现

注解@JvmName与Kotlin: 在编译器环节修改名字,必须写在包名的外面

Java 版本

        主函数中调用 修改名字

        main函数

注解@JvmField与kotlin : 背后会剔除私有代码成员, 可以直接调用

注解@JvmOverloads与kotlin: kotlin代码加上这个注解后Java可以用kotlin的默认参数

注解@JvmStatic与kotlin的关系: 源码会在外面封装一个函数, 使Java可以直接调用ktlin参数

java调用kotlin中的函数

 也可以使用注解的方式,可以达到和kotlin同样的效果直接调用

手写事件变换操作符之create、中转站、map

 

手写事件变换操作符之总结与简化代码

结果流向最后

手写事件变换操作符之observer

结果流向最后再显示出来(对中转站进行函数扩展)

手写事件变换操作符之Rx操作符总结

android kotlin的空检测机制

android kotlin的cal与var类型推断

android kotlin的函数 class里面的函数叫函数,外面fun打头的也叫函数

unit类型可以写也可以不写

 


http://chatgpt.dhexx.cn/article/bgCv5LUR.shtml

相关文章

转载自张俊林的博客,人工智能

张俊林 转载自张俊林博客,非常感谢博主 (本文2016年发表于《程序员》杂志) 随着深度学习技术的快速进展,人工智能时代的序幕已经揭起,目前深度学习在图像处理方面的能力已经接近人,甚至在某些方面已经超过…

kotlin入门学习文档

kotlin入门学习文档 前言:本文会着重对比java和kotlin,方便Java选手理解 提前总结:kotlin在服务端应用本质上是基于Java进行的改进,底层都是由JVM翻译成底层语言,我们只需要关注kotlin本身的代码,无需担心…

阿里架构师开源《Kotlin入门教程指南》+《高级Kotlin强化实战》

对于有Java基础的程序员来说,Kotlin是一门非常容易上手的编程语言,也是一门必须掌握的编程语言。Java代码在运行前需要编译生成一种特殊的class文件,然后Java虚拟机会识别并解释这些class文件,而Kotlin作为一种新的编程语言&#…

Kotlin编程实战——类与对象(05)

一 概述 类与继承属性和字段接口(interface )函数式(SAM)接口可见性修饰符扩展数据类(data class)密封类泛型嵌套类与内部类枚举类对象表达式与对象声明类型别名内联类(inline class)委托委托属性 二 类与继承 类继承(open override )抽象类(abstract)…

推荐系统(十八)Gate网络(一):新浪微博GateNet

推荐系统(十八)Gate网络(一):新浪微博GateNet 推荐系统系列博客: 推荐系统(一)推荐系统整体概览推荐系统(二)GBDTLR模型推荐系统(三)…

专访张俊林:十年程序员的感悟与算法之路

专访张俊林:十年程序员的感悟与算法之路 http://www.csdn.net/article/2015-10-29/2826075 【编者按】程序员的十年之后会怎样?恐怕很多的技术人在入行之初都曾信誓旦旦,不管是走上人生巅峰,还是单纯的对技术的热爱,坚…

张俊林:当前炼制“大语言模型”的两个现象

知乎:张俊林链接:https://zhuanlan.zhihu.com/p/622365988编辑:深度学习自然语言处理 公众号 先说第一个现象。 自从LLaMA和ChatGLM开源后,再加上各种五花八门的“Self Instruct”数据在网上逐渐汇合,大模型两大要素都…

张俊林:推荐系统的下一步

作者 | Clara Deng采访嘉宾 | 张俊林编辑 | Natalie AI 前线导读:NLP 是人工智能中最难的问题之一,对它的研究与落地充满了挑战性。预训练模型 BERT 的出现给自然语言处理领域带来了里程碑式的改变。我们采访了新浪微博机器学习团队 AI Lab 负责人张俊林…

一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作

一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作 提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例…

张俊林:对比学习在微博内容表示的应用

分享嘉宾:张俊林博士 新浪微博 编辑整理:李桂荣 中南财经政法大学 出品平台:DataFunTalk 导读:深度学习的成功往往依赖于海量数据的支持,根据训练数据标记与否,可以分为有监督学习和无监督学习/自监督学习。…

一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作

一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作 提示:最近系统性地学习推荐系统的课程。我们…

张俊林:BERT和Transformer到底学到了什么 | AI ProCon 2019

演讲嘉宾 | 张俊林(新浪微博机器学习团队AI Lab负责人) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 【导读】BERT提出的这一年,也是NLP领域迅速发展的一年。学界不断提出新的预训练模型,刷…

张俊林:GPT-4 模型会开创哪些新的研究方向?

作者|张俊林知乎 整理|蘑菇先生学习记 分享一篇张俊林老师关于GPT-4模型会开创哪些新的研究方向的回答。 引言 在这个历史性的时刻,回答个问题,留下自己作为历史见证人的足迹。先遵循这个问题的主旨,写两句GPT-4开创了…

新浪张俊林:大语言模型的涌现能力——现象与解释

内容来源:ChatGPT 及大模型专题研讨会 分享嘉宾:新浪新技术研发负责人、中国中文信息学会理事 张俊林 分享主题:《大型语言模型的涌现能力:现象与解释》 转载自:https://zhuanlan.zhihu.com/p/621438653 注1&#xf…

张俊林:对比学习研究进展精要

作者 | 张俊林 编辑 | 夕小瑶的卖萌屋 对比学习(Contrastive Learning)最近一年比较火,各路大神比如Hinton、Yann LeCun、Kaiming He及一流研究机构比如Facebook、Google、DeepMind,都投入其中并快速提出各种改进模型:Moco系列、SimCLR系列、…

张俊林:推荐系统排序环节特征 Embedding 建模

每天给你送来NLP技术干货! 分享嘉宾:张俊林博士 新浪微博 编辑整理:刘一全 出品平台:DataFunTalk 导读:随着深度学习在推荐系统应用的发展,特征 Embedding 建模的重要性已经成为共识,同时海量特…

张俊林:从对比学习视角,重新审视推荐系统的召回粗排模型

分享嘉宾:张俊林博士 新浪微博 编辑整理:王岩 开课吧 出品平台:DataFunTalk 导读:今天分享的主题是从对比学习的视角,即从一个不同的角度来看看推荐系统里面的召回和粗排模型。对比学习从去年年中开始比较火&#xff0…

单链表的插入和删除

前言 在上一篇文章(单链表的定义)中我们已经了解了单链表的含义和简单的实现。那么在这篇文章中,我们将要来讲解单链表的插入和删除操作。 按位序插入(带头结点) 我们在上篇文章中已经讲解过,如果想要在…

单链表的定义和表示

一、单链表的存储结构,如下图所示: 定义单链表L的代码段: typedef struct Lnode{ //声明结点的类型和指向结点的指针类型 ElemType data; //结点的数据域 struct Lnode *next; //结点的指针域}Lnode, *Li…