Cor*_*urn 5 language-agnostic arrays optimization
在过去的几年里,我已经多次争论是否要写这个问题。主要是因为我不确定这是否重要。我正在寻找最具技术性的答案,因为从表面上看我知道这并不重要。
您常用的编程语言为您提供了一些方法来使用数组上的字段(即 C# 的arr.Length)或传递数组的函数(即 Go 的len(arr))来确定数组/列表/集合的大小,并且通常使用其中之一检查数组是否为空或者其中是否有任何值的方法。您并不真正关心有多少,只关心列表是否为空。
当检查数组是否为空时,我在以下之间来回徘徊:
if (arr.Length != 0) { /* do something with the array */ }
Run Code Online (Sandbox Code Playgroud)
和
if (arr.Length > 0) { /* do something with the array */ }
Run Code Online (Sandbox Code Playgroud)
毫无疑问,两个操作员都可以完成这项工作。由于数组的长度不能为负(至少在我所知道的任何语言中都不能),因此它们无法有不同的行为。两者都没有带来明显的开销。
如果(一个很大的如果)这两者之间有任何区别,我想它会在一两个时钟周期的数量级上,但我对低级别事件的了解不够,没有任何理由支持其中一个而不是另一个。
出于好奇,在任何流行语言中,这些之间有哪怕一丁点的区别吗?运行速度有什么区别吗?编译时间?二进制大小?从字面上看,除了输出二进制文件中不同的操作码之外还有什么?解释型语言与编译型语言会有不同吗?
小智 0
据我所知,两者没有区别。逻辑运算符的计算取决于正在检查的内容而不是运算符的类型。当写入两个字符而不是一个字符时,一口大小会发生变化,但我不确定编译时间。日常编写代码由您决定使用哪个,我个人更喜欢它,!=因为它看起来更清晰