用于检查数组边界的 If 语句与 Try/Catch
If statements vs. Try/Catch for checking against array bounds
我有一个大型 3d 数据阵列,我将随机读取和写入这些数据。按照设计,这些操作中大约有 5% 会落在该数组的范围之外,并且会以不同方式处理。这是使用 try/catch 块的适当位置吗?否则,我需要 6 个单独的 'if' 语句来根据数组边界检查地址。
也许我想在这里进行微优化,但这些操作可能每秒发生数万次。此外,它还可以使代码稍微简洁一些。我在这里使用 C#,但我想这是一个与语言无关的问题。
有趣的是,一方面你的问题不是语言独立的。
在 C、Java、C++、C# 等语言中,人们更喜欢 "LBYL"(Look Before You Leap)模式;而诸如 python 之类的语言非常强调 "EAFP"(请求宽恕比请求许可更容易)。
意思:在python中,你使用了try/catch很多(即使"counting for loop"被实现为try/catch );而在 C# 中,您更愿意使用 if/else。
遵守这些约定非常重要 - 大多数 Cx 语言程序员只是假设您不使用 try/catch 来对控制流建模。
但回到您的核心要求:选择 if/else。正如您所指出的那样,性能非常好可能是一个问题;您只是想避免 more expensive try/catch 解决方案。
如前所述;作为这样做的好副作用,您的代码将是 "more mainstream";因此,您的代码的读者不会每分钟给您很多 WTF。
我有一个大型 3d 数据阵列,我将随机读取和写入这些数据。按照设计,这些操作中大约有 5% 会落在该数组的范围之外,并且会以不同方式处理。这是使用 try/catch 块的适当位置吗?否则,我需要 6 个单独的 'if' 语句来根据数组边界检查地址。
也许我想在这里进行微优化,但这些操作可能每秒发生数万次。此外,它还可以使代码稍微简洁一些。我在这里使用 C#,但我想这是一个与语言无关的问题。
有趣的是,一方面你的问题不是语言独立的。
在 C、Java、C++、C# 等语言中,人们更喜欢 "LBYL"(Look Before You Leap)模式;而诸如 python 之类的语言非常强调 "EAFP"(请求宽恕比请求许可更容易)。
意思:在python中,你使用了try/catch很多(即使"counting for loop"被实现为try/catch );而在 C# 中,您更愿意使用 if/else。
遵守这些约定非常重要 - 大多数 Cx 语言程序员只是假设您不使用 try/catch 来对控制流建模。
但回到您的核心要求:选择 if/else。正如您所指出的那样,性能非常好可能是一个问题;您只是想避免 more expensive try/catch 解决方案。
如前所述;作为这样做的好副作用,您的代码将是 "more mainstream";因此,您的代码的读者不会每分钟给您很多 WTF。