• Allen
    2022-02-28
    思考题中关于调度器的使用不太好,一般的使用方式是通过暴露参数的方式让使用者来传。 通过传参的方式有两个好处: 1. 增加了代码的灵活性和可用性。 2. 有利于单元测试。

    作者回复: 嗯,各有利弊。

    
    4
  • 白乾涛
    2022-03-06
    class Image(private val pixels: Array<Array<Color>>) { val height: Int = pixels.size val width: Int = pixels[0].size private fun getPixel(y: Int, x: Int): Color = pixels[y][x] fun flipHorizontal() = changeImage { y, x -> getPixel(y, width - 1 - x) } //横向翻转图片 fun flipVertical() = changeImage { y, x -> getPixel(height - 1 - y, x) } //纵向翻转图片 fun crop(startY: Int, startX: Int, width: Int, height: Int): Image = toImage(height, width) { y, x -> getPixel(startY + y, startX + x) } //图片裁切 } fun Image.changeImage(init: (Int, Int) -> Color): Image = toImage(height, width, init) fun loadImage(imageFile: File): Image = ImageIO.read(imageFile) .let { toImage(it.height, it.width) { x, y -> Color(it.getRGB(x, y)) } } fun toImage(height: Int, width: Int, init: (Int, Int) -> Color): Image = Array(height) { y -> // 创建一个 Array,元素类型也是 Array Array(width) { x -> // 创建一个 Array,元素类型是 Color init(x, y) // 每个元素都是在 init() 中初始化的 } }.let { Image(it) }
    展开

    作者回复: 这代码改进的很不错,赞!

    
    2
  • PoPlus
    2022-03-01
    暂时没想到 context 动态传入有什么好处,按理说下载图片只需要 IO 就行了,希望老师能解惑。

    作者回复: 其实,这个问题没有标准答案。我只是提出这个问题,希望大家思考这中间的差异。因为,有的时候,更多的灵活性也并不意味着是好事。 动态传入的方式,有利有弊。利:更灵活;弊,调用方可能传错Context。 总的来说,还是要结合使用场景来分析。有些场景下,我们更加重视灵活性,就选择动态传入,有的场景下,我们都希望尽可能的不出问题。

    
    2
  • Allen
    2022-02-28
    这个下载图片的实现和我们普通开线程下载的主要区别就是使用同步的写法(不需要写 callback)来实现了异步的操作。

    作者回复: 是的。

    
    2
  • Geek_Adr
    2022-03-12
    灵活会带来API难用,增加犯错的概率,但又不能把灵活丢掉 兼得的方法:先给一套默认最佳实现,满足大多数情况,使用者清晰知道默认实现不满足时再给灵活的方案 我认为可配有默认实现的方式更好

    作者回复: 很好的思路。

    
    
  • 曾帅
    2022-03-02
    这个问题 或许 可以根据项目来,有些项目可能有自己的 线程池 或者一些 生命周期 的要求,就可以根据业务需求进行传参进行处理。如果没有这些需求的话,直接用 IO 也是可以的。

    作者回复: 是的,要结合具体的场景来分析。

    
    
  • L先生
    2022-03-01
    我觉得会好点,给调用者选择的权利,并且赋予默认值,方便单元测试

    作者回复: 嗯,后者的灵活性更强。

    
    
  • 24隋心所欲
    2022-10-29 来自河北
    使用 withContext() 的主意作用就是切换线程吗?
    
    
  • 郑峰
    2022-08-19 来自美国
    InputStream应该也需要正常close吧?例如 body.byteStream().use { outputFile.outputStream().use { fileOut -> it.copyTo(fileOut) } }
    共 1 条评论
    
  • Link
    2022-06-09
    有个疑惑,类似 fun Image.writeToFile(),这样的扩展多了话会不会导致其他地方在使用Image类的时候产生疑惑(过度扩展?),但函数式风格的编程似乎就必须写一堆扩展方法?望老师解惑
    
    