请考虑以下过程
procedure InTests;
var
N, K: Integer;
begin
N:= 1111;
if N in [6, 8, 10] // this is correct, readable and effective code
then ShowMessage('OK');
K:= 11;
if N in [6, 8, 10, K] // this is correct but less effective
then ShowMessage('OK'); // (compiler creates local 16-bytes set var)
K:= 1111;
if N in [6, 8, 10, K] // this is a bug (K > 255)
then ShowMessage('OK');
end;
Run Code Online (Sandbox Code Playgroud)
in运营商而不是if链
if (N = 6) or (N = 8) or (N = 10)
then ShowMessage('OK');
Run Code Online (Sandbox Code Playgroud)
使代码更紧凑和可读,但Delphi文档没有提及它,你应该意识到潜在的问题.
问题是:例如,in运算符只能在括号中使用常量
if N in [6, 8, 10]
then ShowMessage('OK');
Run Code Online (Sandbox Code Playgroud)
被认为是德尔福的一个好习惯?
你这里有一个set of byte. 您应该问自己的问题是 a 是否set of byte真的是您的数字所代表的内容?你这里有“神奇的数字”,虽然我知道这只是一个样本,但你必须考虑到
if Token in [TokenString, TokenNumber, TokenChar] then
Run Code Online (Sandbox Code Playgroud)
...将被认为是好的做法,这:
if N in [2, 12, 14, 19] then
Run Code Online (Sandbox Code Playgroud)
...不会。
然而,在第一种情况(命名标记)中,显式集合类型将是更好的实践:
type TokenSet = ( TokenNone, TokenString, TokenChar,... )
Run Code Online (Sandbox Code Playgroud)
那么第一个样本绝对是一个好的实践。
| 归档时间: |
|
| 查看次数: |
13573 次 |
| 最近记录: |