【问题标题】:Does Kotlin code gets "minified" when compiled?Kotlin 代码在编译时会“缩小”吗?
【发布时间】: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
  • 它被编译为与您编写的语言不同的较低级别代码(字节代码),因此您的问题并不真正适用。

标签: android kotlin


【解决方案1】:

在 Kotlin / Java 世界中,所有代码都必须先编译成字节码,然后才能在任何地方运行,一般来说,这基本上是一个非常优化的二进制 blob,其中不存在空格。

在 JS 等解释型语言中,客户端/浏览器会下载源代码的副本并直接运行源代码。在这些情况下,缩小非常重要,因为它通过删除逻辑冗余字符来减小客户端需要下载的文件的大小。在 TS 中,大多数客户端无法直接运行它,因此它被转译为 JS,这通常是为浏览器/客户端提供的。 (例如存在一些像 Deno 这样的例外,它有一个原生的 ts 解释器)。

您看到内联代码塞进一行的原因纯粹是为了装饰/代码风格。

额外的空格和变量名通常不会影响已编译 Android 应用的大小/性能,因此您可以简单地以您认为最合适的方式编写代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2017-06-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多