Sha*_*hai 138 variables matlab naming-conventions
例如,在循环中:
for i=1:10,
% do something...
end
Run Code Online (Sandbox Code Playgroud)
作为矩阵的索引:
mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)
为什么不应该他们作为在Matlab的变量名?
Oli*_*rth 175
因为i和j都是表示虚构单位的函数:
所以变量调用i或j将覆盖它们,可能会默默地破坏执行复杂数学的代码.
可能的解决方案包括使用ii和jj作为循环变量,或者使用1i何时i需要表示虚构单元.
sho*_*zer 62
最好避免i和j变量,以防止混淆它们是变量或虚构单位.
然而,就个人而言,我经常使用i和j作为变量作为短循环的索引.为了避免我自己的代码中的问题,我遵循另一个关于i和的好习惯j:不要用它们来表示虚数.实际上,Matlab自己的文档说明:
对于速度和改进的鲁棒性,可以取代复杂的
i和j通过1i.
因此,由于潜在的冲突,我不是避免使用两个非常常用的变量名,而是明确假想的数字.它还使我的代码更清晰.1i我知道的任何时候,我知道它代表sqrt(-1)因为它不可能是一个变量.
Sam*_*rts 27
在旧版本的MATLAB中,曾经有一个很好的理由避免使用i和j作为变量名称 - 早期版本的MATLAB JIT不够聪明,无法判断您是将它们用作变量还是虚构单元,因此关闭许多其他可能的优化.
因此,您的代码将变慢刚才的非常存在i和j作为变量,如果你改变他们到别的东西将加快.这就是为什么,如果你阅读了很多MathWorks代码,你会看到ii并jj使用相当广泛的循环索引.有一段时间,MathWorks甚至可能会非正式地建议人们自己这样做(尽管他们总是正式建议人们为优雅/可维护性而不是当前JIT所做的任何事情,因为它是每个版本的移动目标).
但那是很久以前的事了,而现在它有点像一个"僵尸"问题,实际上并不像许多人想象的那么重要,但拒绝死亡.
在任何最新版本中,无论是否使用i和j作为变量名称,它都是个人偏好.如果您使用复杂数字进行大量工作,您可能希望避免i和j作为变量,以避免任何小的潜在混淆风险(尽管您也可能/只想使用1i或1j更少混淆,以及更好的性能).
另一方面,在我的典型工作中,我从不处理复杂的数字,如果我随意使用i和j作为循环索引,我发现我的代码更具可读性.
我在这里看到很多答案说不建议......不说谁在做那个推荐.以下是MathWorks实际建议的范围,来自当前版本的文档i:
由于我是一个函数,它可以被重写并用作变量.但是,如果您打算在复杂算术中使用它们,最好避免使用i和j作为变量名.[...]为了提高速度和提高稳健性,您可以将复杂的i和j替换为1i.
Den*_*din 15
如其他答案中所述,i建议不要使用通用代码,原因有两个:
如建议:1i并且ii是推荐的.然而,尽管这些都是精细偏差,但将这两种i替代方案一起使用并不是很好.
这是一个为什么(个人)我不喜欢它的例子:
val2 = val + i % 1
val2 = val + ii % 2
val2 = val + 1i % 3
Run Code Online (Sandbox Code Playgroud)
一个人不会轻易被误读为两个或三个,但是两个和三个相似.
因此,我的个人建议是:如果您有时使用复杂的代码,请始终使用1i不同的循环变量.
单个字母索引,对于如果不使用许多循环变量和字母的例子就足够了:t,u,k和p
更长的指数例如:i_loop,step,walk,和t_now
当然这也是个人品味的问题,但要找到具有明确含义而不会长时间使用的指数应该不难.
Flo*_*ris 11
有人指出,这1i是一种可接受且毫不含糊的写作方式sqrt(-1),因此没有必要避免使用i.话又说回来,丹尼斯指出(/sf/answers/1042561061/),它可以是很难看到的区别1i和ii.我的建议:1j在可能的情况下用作虚数常数.这是同样的把戏,电气工程师使用-他们使用j了sqrt(-1),因为i已经采取电流.
我个人从来不使用i和j; 我使用ii和jj作为速记索引变量(和kk,ll,mm,...),1j当我需要使用复数时.
与虚构单位的混淆在这里得到了很好的解释,但是为什么有时候不鼓励使用这些和其他单字母变量名称还有其他一些更平常的原因.
具体来说MATLAB:如果你使用编码器从你的MATLAB代码生成C++源代码(不要,那太可怕了)那么你明确警告不要因为潜在的类型冲突而重用变量.
通常,根据您的IDE,单字母变量名称可能会导致高亮显示和搜索/替换.MATLAB并没有受此影响,我相信Visual Studio在一段时间内没有出现问题,但像MISRA等C/C++编码标准倾向于建议它们.
尽管直接实现数学源有明显的优势,但就我而言,我避免使用所有单字母变量.前几百次你需要花费一点额外的努力,但之后你就会停止注意,当你或其他一些不好的灵魂来阅读你的代码时,你的优势就是军团.
| 归档时间: |
|
| 查看次数: |
18476 次 |
| 最近记录: |