Kotlin 代码在编译时会“缩小”吗?
Posted
技术标签:
【中文标题】Kotlin 代码在编译时会“缩小”吗?【英文标题】:Does Kotlin code gets "minified" when compiled? 【发布时间】:2020-10-18 05:35:22 【问题描述】:在 Typescript(或 javascript)中,我总是尝试以这样一种方式编写,即如果我(或其他开发人员)必须在一年内接触我的代码,那么很容易理解正在发生的事情。所以我不会试图找到最短的代码,而是更清晰的代码。
我不担心文件的大小,因为我在生产中知道这个功能:
function myFunction(value: number)
if(otherFunction(number)
return true;
if(yetAtherFunction(number)
return true;
return false;
将转换为:
function myFunction(n)return!!otherFunction(n)||!!yetAtherFunction(n)
在 kotlin 上会发生类似的事情吗?
我问是因为我发现这种代码:
val myDrawable = item?.image?.let Uri.parse(it.toString()) ?: R.drawable.my_default_image
对我来说,快速解析以了解正在发生的事情并不容易,为什么要进行 PR 或类似操作。
如果我用更冗长的方式写,它会对最终 apk 的大小产生影响吗?
重要:
澄清一下,我不是在问is it better to write in this or that way?
,我是在问编译器是否尝试像 typescript/javascript minifier 那样优化输入。
【问题讨论】:
诚实地写下对你来说正确和清楚的东西。编译器已经变得非常高效,除非您发现性能问题,否则不需要预先优化。什么是“干净的代码”或“可理解的代码”是一个见仁见智的问题。 也许你在问app size?相关:How to use Kotlin with Proguard 它被编译为与您编写的语言不同的较低级别代码(字节代码),因此您的问题并不真正适用。 【参考方案1】:在 Kotlin / Java 世界中,所有代码都必须先编译成字节码,然后才能在任何地方运行,一般来说,这基本上是一个非常优化的二进制 blob,其中不存在空格。
在 JS 等解释型语言中,客户端/浏览器会下载源代码的副本并直接运行源代码。在这些情况下,缩小非常重要,因为它通过删除逻辑冗余字符来减小客户端需要下载的文件的大小。在 TS 中,大多数客户端无法直接运行它,因此它被转译为 JS,这通常是为浏览器/客户端提供的。 (例如存在一些像 Deno 这样的例外,它有一个原生的 ts 解释器)。
您看到内联代码塞进一行的原因纯粹是为了装饰/代码风格。
额外的空格和变量名通常不会影响已编译 android 应用的大小/性能,因此您可以简单地以您认为最合适的方式编写代码。
【讨论】:
以上是关于Kotlin 代码在编译时会“缩小”吗?的主要内容,如果未能解决你的问题,请参考以下文章