Coding style 过时的编码实践

Coding style 过时的编码实践,coding-style,Coding Style,在我编写代码的过程中,我有时会想,我是在用最好的方式做事情,还是一直都是这样做的。我现在做的有意义吗 例如,在函数顶部声明所有变量。如果我试图声明它两次或低于我开始使用它的位置,我的IDE会在设计时对我咆哮——那么有什么大不了的呢?似乎在使用变量的块的正上方声明变量更有意义 另一种是匈牙利符号。我讨厌所有与特定对象相关的变量都分散在我的智能感知中 随着框架和IDE的现代进步,是否有一些编码实践不再真正适用,而另一些可能现在完全错了?尽管是在Java中,这是我推荐给那些想要优化/现代化其编码风格的

在我编写代码的过程中,我有时会想,我是在用最好的方式做事情,还是一直都是这样做的。我现在做的有意义吗

例如,在函数顶部声明所有变量。如果我试图声明它两次或低于我开始使用它的位置,我的IDE会在设计时对我咆哮——那么有什么大不了的呢?似乎在使用变量的块的正上方声明变量更有意义

另一种是匈牙利符号。我讨厌所有与特定对象相关的变量都分散在我的智能感知中


随着框架和IDE的现代进步,是否有一些编码实践不再真正适用,而另一些可能现在完全错了?

尽管是在Java中,这是我推荐给那些想要优化/现代化其编码风格的人的书:

不要在将使用它们的块上方声明变量-在第一次使用时,在可用的最窄范围内声明它们,假设这在您的语言中是可行的

匈牙利符号将取决于您的语言/平台的约定。这还取决于您使用的匈牙利语的种类——合理的一种(我仍然不喜欢),或者只重述现有类型信息的版本

有一件事需要注意:当你开始学习一门新语言时,一定要同时学习它的习语,尤其是命名惯例。这将帮助您的代码适应新的语言,而不是旧的(可能不相关的)代码。我发现这也有助于我与新语言保持一致的思维,而不是与之抗争


但是,确实值得定期回顾编码实践。如果你不能决定为什么某个东西是个好主意,试着暂时不用它…

短标识符:许多老派程序员使用短而神秘的标识符。简洁是一个有用的优点,但考虑到一个好的IDE具有自动完成功能,描述性名称远比易于键入的名称好。

顶部的变量在javascript这样的语言中是有意义的。它没有块作用域,因此简化了读取

考虑包含以下内容的函数体:

//some code
if(something)
{
   var c = 123;
}

alert(c); // gives 123 when the if is executed and undefined when it doesn't.
这是一个余数,每种语言都是不同的,这肯定会影响什么是合适的,什么是不合适的。同样,考虑在相关框架中使用的代码通常使用某种编码风格,如果你使用了一些根本不同的代码,你必然会遇到混合样式。

更新:javascript中的上述内容正在更改(如评论中所述)。它似乎没有得到广泛的支持(没有找到一个好的链接,我想:()),这也提醒我们,如果不考虑我们使用新功能的上下文,就不能匆忙使用它们

随着框架和IDE的现代进步,是否有一些编码实践已经不再适用,而另一些则可能是完全错误的

在很大程度上取决于语言

W.r.t.C:

  • 使用
    注册表
    关键字
W.r.t C++:

  • 滥用
    静态
    ;现在您应该使用
    命名空间
    s,即使是匿名的

或者,我误解了你的问题吗?

短线:有些人坚持80列文本。我们其他人都有真正的监视器,不介意一行是否超过80个字符。长一行可以提高可读性。

我过去习惯于将所有行号按10分隔,每隔10个字符启动一段逻辑上独立的代码100或1000,即

10 Print "Hello"
20 Gosub 100
30 'Peeks and Pokes

由于明显的原因,我不再像这样做了。

至于变量声明,在使用之前最好声明它们。如果函数/过程太大,在顶部声明的变量有很多,考虑将函数重构成多个更小的函数。

匈牙利符号,同样的答案也适用。如果函数太大,你不能很快地发现变量的定义(即使它应该在使用之前声明),那么就要考虑重构。


在大多数情况下,一个编写良好、重构良好的函数应该通过快速浏览代码页使变量声明和数据类型变得显而易见。

意外赋值保护:

在一些较新的语言中,如C#,不需要将左值放在右边

在C#中,以下内容不会编译:

if (variable = 0)
因此,在C#中,无需执行以下操作:

if (0 == variable)
这种做法在C/C++程序中非常常见,以避免意外的赋值,而这些赋值本来是用来进行比较的


多个返回点:

禁止多个返回点主要是因为您不想忘记删除变量

相反,如果你只是使用RAII,你不需要担心它

免责声明:仍然有很好的理由最小化多个返回点,有时只有一个返回点是有用的


头文件

在大多数现代语言中,您不会将代码分为声明和定义


C++为多个头文件定义包含

在C++中,你经常使用:

#ifdef _MYFILE_H_
#define _MYFILE_H_

//code here

#endif
但这有时会导致如下情况:

#ifdef _MYFILE_H_
#define _WRONGNAME_H_

//code here

#endif
如果您的编译器支持,则有更好的方法:

#pragma once

C变量声明

在C语言中,你必须在代码块的顶部声明所有变量,即使是更高版本的C语言也不需要这样做,但人们仍然这样做


匈牙利符号:(阅读,包含一些独特的信息)

.但我不是指那种匈牙利符号

在此之前,在C中有以下内容非常重要:

int iX = 5;
char szX[1024];
strcpy(szX, "5");
因为你本来可以
printf("%i", iX);