c# - 有没有更好的方法来减少 if 语句
问题描述
我是 C# 新手,当我有很多 if 语句时,我不确定如何优化代码。所以直到现在我有
if (input.Contains("triangle"))
{
if (input.Contains("rectangular"))
{
}
else if (input.Contains("isosceles"))
{
}
else if (input.Contains("equilateral"))
{
}
}
我不确定我该怎么做。
有没有更好的方法来减少 if 语句?
解决方案
给定的代码已经适合它的目的。这里不需要过早的优化。然而,我会给你一个关于 if 语句何时需要改写的想法。
示例问题:
验证输入。有效输入不得包含空格或点。除了 7 之外的数字也是允许的。
不太好的代码:
bool validate(String str) {
// "!" is read as "not". True becomes false, and vice-versa
if (!(str.Contains(" "))){
if (!(str.Contains("."))){
if (!(str.Contains("7"))){
Console.WriteLine("Success");
return true;
}
}
}
return false;
}
这就是你所说的嵌套条件。太多嵌套的 if 语句可能会令人眼花缭乱,这时您需要修复它。虽然嵌套的 if 语句并不总是坏事,但考虑将它们分开的方法通常是个好主意,这样主代码就不会缩进很深。(在这种情况下,您可能会争论使用“||”(“或”运算符)或“&&”(“和”运算符)将条件组合成一个 if 语句。这没有错,但在更复杂的逻辑中,你会经常想要分离条件以便于调试。)
稍微好一点的代码:
bool validate(String str) {
// "!" is read as "not". True becomes false, and vice-versa
bool isValid = true;
if (str.Contains(" ")){
isValid = false;
}
if (str.Contains(".")){
isValid = false;
}
if (str.Contains("7")){
isValid = false;
}
if (isValid){
Console.WriteLine("Success");
}
return isValid;
}
另一种策略是使用提前退出。它基本上意味着首先检查不需要的情况,如果发现这种情况,立即返回false。
更好的代码:
bool validate(String str) {
// Since we are checking for unwanted cases, we won't use the not operator
if (str.Contains(" ")){
return false;
}
if (str.Contains(".")){
return false;
}
if (str.Contains("7")){
return false;
}
// You could also do
// if (str.Contains(" ") || str.Contains(".") || str.Contains("7")) if you want
// Notice how the main code is not within any if-statement
Console.WriteLine("Success");
return true;
}
综上所述:
避免不必要的嵌套条件
如果可能的话,分开条件。
利用提前退出
许多 if 语句都可以,特别是如果您的程序需要处理许多情况。不要偏执地花费 75% 的时间来尝试进行过早的优化。if 语句的更改不会导致速度上的很大差异。但是,使它们更整洁确实会给阅读您的代码的程序员(可能包括您)带来很大的不同。
推荐阅读
- c# - 如何立即摆脱循环
- android - 无法上传没有签名的 APK
- angular - 如何强制其他角度组件刷新和更新视图?
- postgresql - 查询本机 - 无法提取 ResultSet
- elasticsearch - 如何基于多个嵌套字段在 ElasticSearch 中进行搜索
- python - 为小提琴图添加标签:中位数、上端和下端
- ruby-on-rails - Puma 捕获了一个未初始化的常量
- python - 使用python以最佳方式查找列表的最小总和
- solr - solr 中全文搜索和自由文本搜索的区别(其他搜索数据库)
- python-3.x - Python 3 中的简单导入