即使不赞成“标准”的想法,至少采用这个简单的建议:对变量名使用“匈牙利命名法”,这会使您的代码更容易阅读和维护(有关匈牙利命名法的说明请参阅 参考资料)。
保证返回代码的一致性
在调试时有一种会制造麻烦的情况是:调用程序屏蔽(或者覆盖)一个表示错误的返回代码。一定要想好您要向调用您的代码的例程返回什么值,并保证从您所调用的例程返回的所有错误代码都得到恰当处理。如果返回代码 n 在一个地方意味着一件事,就不要在其他的地方用返回代码 n 表示另一件事。
对每个例程使用“单点退出”
这一点怎么强调也不过分:对每个例程使用单点退出 —— 就是说,没有多重返回!这是最容易忽视的、也是您可以采用的最好的习惯。如果例程只从一个地方返回,那么就可以用一种非常容易的方法保证在返回前完成所有必要的清理工作,这也使调试更容易。清单 2 显示了一个包含多重返回的代码示例。注意重复代码、甚至忘记“清理”项目(如红色突出显示的文本所示)是多么容易。
1 public String getName( )
2 {
3 //
4 // local variables
5 //
6 String returnString;
7
8
9 //
10 // beginning of code
11 //
12 returnString = textField.getText( );
13 if ( null == returnstring )
14 {
15 badCount++;
16 totalCount++;
17 return( null )
18 }
19
20 returnString = returnString.trim( );
21 if ( returnString.equals( "" ) )
22 {
23 badCount++;
24 totalCount++;
25 return( null );
26 }
27
28 totalCount++;
29 return( returnString );
30
31 } // end getName
|
在第 15 行,badCount 增加了,因为 getText( ) 返回 null。在第 23 行,badCount 代码又重复了。现在想像一下如果这个例子需要完成更复杂的“清理”时会有多混乱。
清单 3 显示了一种更好的方法:
清单 3. 单点退出示例 —— 修正后1 public String getName( )
2 {
3 //
4 // local variables
5 //
6 String returnString;
7
8
9 //
10 // beginning of code
11 //
12 returnString = textField.getText( );
13 if ( null != returnstring )
14 {
15 returnString = returnString.trim( );
16 if ( returnString.equals( "" ) )
17 returnString = null;
18 }
19
20 //
21 // "cleanup"
22 //
23 if ( null == returnString )
24 badCount++;
25 totalCount++;
26
27 return( returnString );
28
29 } // end getName
|
这是一个简化的例子,但是请注意遵照这种习惯有多么容易,以及这样做的好处。
加强警戒(En garde)!
要记住,您的客户对您的产品有与您不一样的想法。他们会在一个您的小组很可能从来也没想到的 —— 或者至少是没有可能测试的 —— 环境中安装它。他们会以您从来没有想到过的方法使用它,并以您意想不到的方法配置它。下面的列表有助于帮助您保证他们不会发怒:

