Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scripting 任何语言:循环变量_Scripting_Variables_Benchmarking_Recycle - Fatal编程技术网

Scripting 任何语言:循环变量

Scripting 任何语言:循环变量,scripting,variables,benchmarking,recycle,Scripting,Variables,Benchmarking,Recycle,这似乎是一个简单的问题,但是,在任何脚本语言中重用变量通常是一个好主意吗 我特别感兴趣的是为什么这是/不是一个好的实践,因为如果我应该或不应该这样做,我除了我自己之外 例如,$i是循环中用于迭代的最常见变量之一 例如(在php中): 当然,这是最简单的使用示例,我想知道,如果脚本非常复杂,它会不会造成更多的麻烦 我知道重复使用一个变量可以节省很少的内存,但是当这些变量叠加起来时,它就变得很重要了,不是吗 感谢您事先给出的任何直接回答,如果这个问题太模糊,我很抱歉,我也想知道这一点-这样我知道我应

这似乎是一个简单的问题,但是,在任何脚本语言中重用变量通常是一个好主意吗

我特别感兴趣的是为什么这是/不是一个好的实践,因为如果我应该或不应该这样做,我除了我自己之外

例如,
$i
是循环中用于迭代的最常见变量之一

例如(在php中):

当然,这是最简单的使用示例,我想知道,如果脚本非常复杂,它会不会造成更多的麻烦

我知道重复使用一个变量可以节省很少的内存,但是当这些变量叠加起来时,它就变得很重要了,不是吗

感谢您事先给出的任何直接回答,如果这个问题太模糊,我很抱歉,我也想知道这一点-这样我知道我应该在其他地方问类似的问题。

我想您把“字符串”和“变量”混淆了。字符串是ASCII或Unicode字符的集合,具体取决于编程语言。变量是内存中的命名位置。所以你说的是回收一个变量,而不是一个字符串

不幸的是,处理变量的方式是高度特定于语言和编译器的。如果你给我们更多的细节,你会得到更好的信息

大多数语言都有作用域的概念,变量空间在声明时分配,在作用域结束时释放。如果将变量保持在适当的范围内,就不必担心浪费内存,因为变量将在不再需要时被释放。同样,范围的细节取决于语言


通常,重复使用这样的变量名是一个坏主意,因为当(不是如果)忘记将变量重置为同一范围内的某个初始值时,程序将在运行时中断。

在进入foreach循环之前,您应该将
$i
初始化为0,无论您是否在函数的前面使用过它,不管你用什么语言。这只是一种与语言无关的最佳实践

许多语言通过允许您将计数变量绑定到for循环的范围来帮助您实现这一点。PHP的
foreach
提供了类似的机制,前提是数组基于0且仅包含数字键:

foreach ($array as $i => $v) {
    echo $v;

    if ($i + 1 < count($array))
        echo ', ';
}
foreach($i=>v的数组){
echo$v;
如果($i+1
另外,关于你的声明:

我知道重复使用一个变量可以节省很少的内存,但是当这些变量叠加起来时,它就变得很重要了,不是吗

不,真的没有。变量超出范围时将被垃圾收集。在单个函数的过程中使用如此多的计数/临时变量几乎是不可能的(如果没有编程生成代码的话),因此内存的使用是非常重要的。重用一个变量而不是声明一个新变量将不会对程序性能产生可测量的影响,实际上也不会对其内存占用造成影响。

重置变量($i=0)不会占用更多空间

当您声明一个变量(比如integer类型)时,将为该整数分配预定义的内存量,而不管其值是什么。通过将其更改回零,您只需修改该值

如果您声明了一个新变量,那么必须为它分配内存,并且通常它也将被初始化为零,因此重置现有变量可能也不会占用任何额外的CPU时间

为互斥循环重用索引变量是一个好主意;它使您的代码更容易理解。如果您声明了很多额外的变量,那么阅读您代码的其他人可能会想,即使在循环完成之后,“i”是否仍在用于某些东西


重复使用它!:)

就我个人而言,我在重用索引/计数器变量方面没有任何问题-尽管在某些语言(如.Net)中,在for循环中使用变量会将变量的作用域指定给该循环-因此无论发生什么情况,之后都会对其进行清理

您不应该重复使用包含任何重要数据的变量(这不应该成为问题,因为所有变量都应该有描述性名称)

我曾经试图清理一个学生写的一些excel宏代码——所有的变量名都是希腊神,在整个脚本中反复交换用法。最后,我只是重新写了一遍

您还应该知道,根据变量的类型和所使用的语言,重新分配内容可能与创建新变量一样昂贵。在.Net中,字符串是不可变的,所以

Dim MyString as String = "Something"
MyString = "SomethingElse"
将实际分配一个新的内存区域来存储第二次使用,并将
MyString
指针更改为指向新位置

顺便说一句,这就是为什么以下内容效率低下(至少在.Net中是如此):

这将为
SomeVariable
分配内存,然后为
SomeVariable+“”
分配更多内存,然后再次为
SomeVariable+“”+SomeOtherVariable
分配内存-这意味着
SomeVariable
实际上被写入内存3次

总之,我将重复使用非常简单的循环变量。除此之外,我只需要分配一个新变量——特别是因为内存分配通常只占大多数应用程序处理时间的一小部分


请记住:

这取决于您要解决的问题

当使用PHP(和其他脚本语言)时,应考虑大量变量(如数组或长字符串)的unSUTE()。您不应该费心重复使用或取消设置小变量(整数/布尔值等)。使用(缓慢的)脚本语言是不值得的

如果您正在用低级(低级)语言(如C)开发性能关键型应用程序,那么变量重用就更为重要
foreach ($array as $i => $v) {
    echo $v;

    if ($i + 1 < count($array))
        echo ', ';
}
Dim MyString as String = "Something"
MyString = "SomethingElse"
Dim SomeString = SomeVariable & " " & SomeOtherVariable