今天是丁酉年的最后一个工作日,马上就要进入崭新的农历狗年——戊戌年(维新变法120周年),工作一年多的时间也是要总结一下的,也是为下一年的发展做准备。
工作中的知识积累
在工作中直接搬轮子使用还是比较常见的事情,造的轮子不多也不精,从只会写上层代码的同时也在朝着深入研究源码原理的方向上过度。常用的第三方库主要是网络通信方面的,如Retrofit和OkHttp,在线程调度方面首选当然是RxJava,也曾尝试将三者封装一层可以拿来即用的工具。
工作中的一个小成就就是搭建自动化测试的环境,Android的自动化单元测试其实是一个有难度的挑战,利用Android Studio自带的目录架构实现单元测试其实很方便,但是真正的自动化还是需要持续集成。万幸的一点就是项目中早就引入了Jenkins这个平台,最后打造了Jenkins+Gradle的自动化测试流程。
设计模式也在实际项目中大量使用,只是为了写出更优雅的代码从简单的单例和工厂,到设计sdk的时候需要用到外观和观察者模式。对于一些线程和并发的理解也有一定的增长,Thread和Runnable的区别,volatile和synchronized的区别等等。
对Kotlin的认知
Kotlin是在去年的Google I/O大会上突然成为了网红,对Kotlin的学习也加入了日程范围,不过对于它100%的兼容java的说法,只有实际去使用了才能发现坑还是很多。对于一些常见的Java程序的编写风格,Kotlin也不是全都适应。稍微举两个例子。
例子一,Kotlin中函数定义的形参是可以赋一个初始值的,这样可以解决像Java中出现多个方法,但是Kotlin的这种写法的使用范围只能先于Kotlin本身的体系中。
fun add(a: Int, b: Int = 2): Int{
return a + b
}
上面的函数add,第二个形参有默认值,这样在使用的时候可以不用传递该惨,那在kotlin语法中可以有如下两种使用方式:
var a = Overload()
var b = a.add(1)
var c = a.add(4, 5)
但是在Java的语法中正确的使用方式只有一种,那就是两个参数都需要传值,下方代码注释1处会出现编译错误提示:
Overload o = new Overload();
int a = o.add(1, 2);
int b = o.add(1); // 1
例子二, Kotlin在对Java中InputStream等流的操作上,也与我们常用的Java区别很大,先举一个Java读取文件的例子:
...
File file = new File(filePath);
InputStream is = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i;
while ((i = is.read()) != -1) {
baos.write(i);
}
...
这种写法基本上很固定了,特别是其中的while循环,通过循环去不断读取文件中的流,如果想用Kotlin实现这个功能,while循环就提供了一个障碍,因为在Kotlin中等式不是一个表达式,不能像Java中那样直接在判断语句中使用,这就要使用Kotlin的扩展函数。
fun main(vararg arg: String) {
...
var file : File = File(path)
var inputStream = FileInputStream(file)
var baos = ByteOutputStream()
var i: Int = -1
// 优雅的例子
inputStream.use { input ->
baos.use {
while (inputStream.read().also { i = it } != -1) run {
it.write(i)
}
}
}
// 普通的例子
while(inputStream.read().also { i = it } != -1) {
baos.write(i)
}
}
fun <T> T.also(block: (T)->Unit):T {
block(this)
return this
}
上面给出了两个使用扩展函数also的例子,一句话说明also函数的作用,就是返回调用它的对象,在代码中返回的就是inputStream.read(),并将其赋值给了i。这种写法在优雅和普通的例子中一样,不同的是优雅的例子中使用了use函数。use函数可以实现自动关闭资源的作用,将流或者数据库关闭,简单安全。
对未来的预期
时下的技术风口真的是一个接一个,从移动互联网到人工智能再到今年的区块链,可谓是让一波接着一波的人前赴后继;而市场上同样每年都在变化,直播——共享经济——在线答题。对于新兴起的技术肯定是要关注的,工作之余也在学习Python以便能够及时转行到人工智能(手动滑稽),但是仍旧要保持一颗稳定的心态,不能过于浮躁趋之若鹜的去拥抱新技术。未来的学习重点还是以围绕移动端为主,逐渐扩展相关领域,博客内容也努力做到细致和全面吧。
总结
狗年快乐,放假!!!