优化后的 Kotlin 代码的可读性

2024 年 5 月 3 日,作者与 Leland 讨论如何在 Jetpack Compose 中最佳实现新的数据结构以加快特定方面的速度,Leland 提出想法并“nerd sniped”了作者。问题是如何高效编码 8x8 网格的占用情况并表示为Long(每个位代表网格中的一个单元格)。

  • The grid:给出了网格的示例及初始化代码,通过Grid类和相关函数实现网格的创建和输出,展示了如何用Long表示网格并保持类型安全。还提到了Rect类型及相关操作。
  • Adding operators:添加一系列 API 以简化网格操作,通过重载运算符可对网格进行有趣的操作,如添加、减去矩形,查询单元格是否被占用等,这些运算符实现简单且编译后效率高。
  • Higher level APIs:添加forEach函数遍历所有占用的单元格,代码简洁且生成的 aarch64 代码整洁,还使用了扩展函数使代码更易读。
  • Hiding the madness:用户使用 API 时无需关注底层代码,可编写高度可读的代码,如各种网格操作的代码,且这些抽象不会影响代码的高效性。
  • The mighty R8 is impressive:以Rect为例说明 R8 的作用,在不使用 R8 时生成的 aarch64 代码复杂,而启用 R8 后代码变为单个常量加载,展示了 R8 在优化代码方面的强大能力。完整代码可在GitHub gist获取。同时提到除位操作代码外,对 Kotlin 有一些抱怨,且使用了自己版本的coerceIn()函数以避免标准函数的副作用影响优化。
阅读 15
0 条评论