代码整洁之道 - 有意义的命名

记得几年前读了一点代码整洁之道,当时只是粗略的读,里面的内容都忘记了,这次重新读,为了保证不会再忘记里面的内容,特意做了一些笔记,方便查阅 总结 作为一个英文不好的码农,可能最挠头的一件事就是命名了。可是这有是我们每天不得不面对的一个问题,怎么才能取一个好的命名呢?通过读这本书,我认为需要满足以下几点。 足够清楚表达意思,让人一目了然,并且不能有歧义。 尽量短小,如果短名称表达不清楚意思,就加长。 不加无用的前缀,语境 名称之间要有明显的区分 ...

阅读更多

扫盲系列 - kotlin 之协程 Flow 和Channel

Channel 一个队列,并且是并发安全的,他可以用来连接协程,实现不同协程的通信 Flow 是 Kotlin 协程与响应式编程模型结合的产物 delay 不能在 SequenceScope 的扩展成员当中被调用,因而不能在序列生成器的协程体内调用了。 flow 的 执行体内部也可以调用其他挂起函数,比如delay,但是sequence中就可以。 val inflow = flow { //执行体内部也可以调用其他挂起函数 (1....

阅读更多

扫盲系列 - Kotlin 中的标准库函数 run、with、let、also、apply、use、takeif

刚学习kotlin的时候,会发现一些奇怪的语法,例如 var dints2=ints.map{ it*2} File("test.txt").let { } 等等,这些感觉好奇怪的,和java区别很大的,这些到底是啥呢, 在学习这些之前,我们先大概了解一下两个知识点,lambda表达式和 it lambda表达式 目的是为了更贴近函数式编程,把函数作为参数的思想 格式:{(输入参数)-> (运算)输出} 最外面使用{},用()定义参数列...

阅读更多

扫盲系列 - kotlin 之协程相关函数

await() await()签名并不是我们看到的 public suspend fun await(): T,而是 kotlinx/coroutines/Deferred.await (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; 是接收一个 Continuation 实例,返回 Object 的这么个函数,所以前面的代码我们可以大致理解为: //注意以下不是正确的代码,仅供大家理解协程使用 Glob...

阅读更多

扫盲系列 - kotlin 之协程简介

常识 异步 vs 同步 阻塞 vs 非阻塞 同步和异步的关注点是 是否同时进行 堵塞和非堵塞关注的是 能否继续进行 四种基础控制流 逐条执行 按照顺序,一行一行啊执行 选择执行 if else 迭代 执行 递归执行 切换 包括 切走和切回来,即挂起,和恢复 挂起:保存程序的当前状态,暂停当前程序; 恢复:恢复程序状态,继续执行程序...

阅读更多

扫盲系列 - kotlin 语法

var 定义变量 val 定义常量 Kotlin 支持类型自动推导 var i=1 这种形式也正常 is 进行类型判断 as 进行类型转换,可能抛出异常 as? 进行安全类型转换 在 Kotlin 中, 三个等号 === 表示比较对象地址, 两个等号 == 表示比较两个值大小。 // 下面两句两个语句等价 a == b a?.equals(b) ?: (b === null) // 如果 a ...

阅读更多

源码分析 - RecycleView 的缓存复用机制

RecycleView 分为四级缓存 核心代码在Recycler中,它是RecycleView的一个内部类,用来缓存屏幕内ViewHolder以及屏幕外的Viewholder,部分代码如下 Recycler 的缓存机制就是通过上图中的这些数据容器来实现的,实际上Recycler的缓存也是分级处理的。 根据访问优先级分为以下四级 第一级缓存:mAttachedScrap和mChangedScrap,主要缓存屏幕内的Viewholder 第二级缓存:...

阅读更多

Android 性能优化 -- RecycleView 优化

数据处理与视图加载分离 简单来说就是在onBindViewHolder()只设置UI显示,不做任何逻辑判断,需要的业务逻辑在得到javabean之前处理好, class Task { Date dateDue; String title; String description; // getters and setters here } class MyRecyclerView.Adapter extends RecyclerView...

阅读更多