当我在这个问题中询问时,几乎总是得到明确的回答,你应该有编码标准。
你被强制遵循的最奇怪的编码标准规则是什么?
我所说的最奇怪是指最有趣、最糟糕或者只是非常奇怪的规则。
在每个答案中,请提及编程语言、您的团队规模以及它对您和您的团队产生的不良影响。
当我在这个问题中询问时,几乎总是得到明确的回答,你应该有编码标准。
你被强制遵循的最奇怪的编码标准规则是什么?
我所说的最奇怪是指最有趣、最糟糕或者只是非常奇怪的规则。
在每个答案中,请提及编程语言、您的团队规模以及它对您和您的团队产生的不良影响。
当禁止使用多个返回时,我讨厌这种情况。
反向缩进。例如:
for(int i = 0; i < 10; i++)
{
myFunc();
}
并且:
if(something)
{
// do A
}
else
{
// do B
}
也许不是你听过的最古怪的事情,但我非常讨厌在数据库表名前加上“tbl”
几乎任何一种匈牙利命名法。
匈牙利命名法的问题在于它经常被误解。最初的想法是为变量添加前缀以使其含义清晰。例如:
int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.
但大多数人使用它来确定类型。
int iAppleCount = 0; // Number of apples.
int iPearCount = 0; // Number of pears.
这很令人困惑,因为尽管这两个数字都是整数,但众所周知,你不能将苹果和梨进行比较。
我目前工作的地方不允许使用三元操作符:
int value = (a < b) ? a : b;
...因为并不是每个人都“懂得”。如果你告诉我:“不要使用它,因为当结构变得太复杂(嵌套三元运算符,有人吗?)时,我们必须重写它们”,那么我就明白了。但是当你告诉我一些开发人员不理解它们......嗯......好吧。
在进行更改时,不要删除任何代码。我们被告知要对所有更改进行注释,注意我们使用源代码控制。由于开发人员对此的抗议以及其会使代码难以阅读,这一政策没有持续多久。
我曾经在一位强大的VB之王的暴政下工作。
这位VB之王是MS Excel、VBA以及数据库的纯粹大师(因此他的姓氏:开发人员使用编译器工作,而他则与Excel玩耍。如果在数据库问题上挑战他会对你的职业产生不利影响...)。
当然,他的巨大技能给了他一个独特的发展问题和项目管理解决方案的视角:虽然不是严格意义上的编码标准,但VB之王经常有关于“编码标准”和“最佳实践”的新想法,并试图(并且往往成功地)强加给我们。例如:
所有C/C++数组应该从索引1开始,而不是0。事实上,使用0作为数组的第一个索引已经过时,已被Visual Basic 6的深思熟虑的数组索引管理所取代。
所有函数都应该返回错误代码:VB6中没有异常,那么我们为什么需要它们呢?(例如,在C++中)
由于“所有函数都应该返回错误代码”对于返回有意义类型的函数来说不太实用,因此所有函数都应该有一个错误代码作为第一个[in/out]参数。
我们所有的代码都会检查错误代码(这导致了我职业生涯中看到的最糟糕的VBScript if-indentation。当然,由于“else”子句从未被处理,因此直到太晚之前没有发现任何错误)。
既然我们是在使用C++/COM,从今天开始,我们将用Visual Basic编写所有DOM实用程序函数。
ASP 115错误是邪恶的。出于这个原因,在我们的VBScript/ASP代码中使用On Error Resume Next来避免它们。
XSL-T是一种面向对象的语言。使用继承来解决你的问题(这让我惊讶得差点张开嘴巴)。
不使用异常,因此应该将其删除。出于这个原因,我们将取消复选框中有关异常解缠调用的选项(一个专家花了数天时间才找到所有内存泄漏的原因,当他发现他们故意忽略(并隐藏)他在几周前发送的有关重新选中该选项的技术说明时,他几乎要疯掉了。)
在我们的COM模块的COM接口中捕获所有异常,并静默处理它们(这样,模块不会崩溃,只会变得更快……闪亮!...由于我们使用了上述超级错误处理方法,甚至需要一些时间才能真正理解正在发生什么……你不能既追求速度又保证正确结果,不是吗?)。
从今天开始,我们的代码库将分为四个分支。我们将手动管理它们的同步,并整合所有的错误修正/改进。
除了C/C++数组、VB DOM实用函数和XSL-T作为面向对象语言之外,其他功能都是在我们的反对声中实现的。当然,随着时间的推移,一些功能被发现咳咳已经损坏,并被完全放弃。
当然,VB之王的信誉从未因此受到损害:在高层管理中,他仍然是一个“顶尖枪手”技术专家……
这产生了一些有趣的副作用,你可以通过跟随链接看到(What is the best comment in source code you have ever encountered?)。
回到80年代/90年代,我曾在一家使用FORTRAN的飞行模拟器公司工作。我们的FORTRAN编译器变量名称的长度限制为8个字符。公司的编码标准为匈牙利式符号信息保留了前三个字符。因此,我们必须尝试使用仅有的5个字符创建有意义的变量名称!
我曾在一家公司工作,该公司进行了两个公司的合并。其中一个公司拥有一个用K&R C(即ANSI之前的版本)编写的重要服务器。他们强制要求Java团队(来自两个办公室,大概总共有20个开发人员)使用这种格式,这种格式欣然忽略了“花括号争论”的两个支柱,直接走向了疯狂:
if ( x == y )
{
System.out.println("this is painful");
x = 0;
y++;
}
禁止访问:
while (true) {
允许:
for (;;) {
for (;;) {
是 C 语言中表示第一种情况的习惯用法。 - Robert P