回文递归:简化条件三元表达式
Palindrom recursion: Simplify conditional ternary expression
我需要实现一个递归方法来检查输入是否为回文。我能够在一行中做到这一点并且它有效,但我不确定它的可读性如何。我也不断收到一条消息“简化条件三元表达式”,但我不确定如何
这是我的代码:
private static bool checkIfPalindrome(string i_InputToCheck, int i_StartIndex, int i_EndIndex)
{
return (i_StartIndex >= i_EndIndex) ? true : checkIfPalindrome(i_InputToCheck, i_StartIndex + 1, i_EndIndex - 1) && (i_InputToCheck[i_StartIndex] == i_InputToCheck[i_EndIndex]);
}
return i_StartIndex >= i_EndIndex || checkIfPalindrome(i_InputToCheck, i_StartIndex + 1, i_EndIndex - 1) && i_InputToCheck[i_StartIndex] == i_InputToCheck[i_EndIndex];
提示的简化是因为您正在测试一个布尔表达式,然后不必要地检查并返回它...
if (expression == true)
等同于 if (expression)
和
return expression ? true : false
到 return expression
.
这肯定不好看,但我想这是为了学校练习?
how readable this is
首先,命名约定:删除标识符的 unnecessary/uninformative 部分。例如,参数 而不是 需要以 i_
开头(大概是表示“输入”?)。这里没有传达任何信息,它增加了噪音。这对可读性有 巨大 影响。
逻辑本身也可以整理。您收到的警告提示您可以简化条件 - 当您的条件包含布尔文字时,情况总是如此。
然而,最重要的是,可读性将受益于将表达式分解为多行。
我也会交换两个次要条件,这样你 first 测试当前字符,然后 then 进一步递归(仅当当前测试的两个字符相等!):
private static bool IsPalindrome(string input, int start, int end) {
return (start >= end) ||
input[start] == input[end] &&
IsPalindrome(input, start + 1, end - 1);
}
此代码依赖于 &&
优于 ||
的正确优先级。有些人更喜欢通过使用更多括号来明确此运算符的优先级:
private static bool IsPalindrome(string input, int start, int end) {
return (start >= end) ||
(
input[start] == input[end] &&
IsPalindrome(input, start + 1, end - 1)
);
}
我需要实现一个递归方法来检查输入是否为回文。我能够在一行中做到这一点并且它有效,但我不确定它的可读性如何。我也不断收到一条消息“简化条件三元表达式”,但我不确定如何 这是我的代码:
private static bool checkIfPalindrome(string i_InputToCheck, int i_StartIndex, int i_EndIndex)
{
return (i_StartIndex >= i_EndIndex) ? true : checkIfPalindrome(i_InputToCheck, i_StartIndex + 1, i_EndIndex - 1) && (i_InputToCheck[i_StartIndex] == i_InputToCheck[i_EndIndex]);
}
return i_StartIndex >= i_EndIndex || checkIfPalindrome(i_InputToCheck, i_StartIndex + 1, i_EndIndex - 1) && i_InputToCheck[i_StartIndex] == i_InputToCheck[i_EndIndex];
提示的简化是因为您正在测试一个布尔表达式,然后不必要地检查并返回它...
if (expression == true)
等同于 if (expression)
和
return expression ? true : false
到 return expression
.
这肯定不好看,但我想这是为了学校练习?
how readable this is
首先,命名约定:删除标识符的 unnecessary/uninformative 部分。例如,参数 而不是 需要以 i_
开头(大概是表示“输入”?)。这里没有传达任何信息,它增加了噪音。这对可读性有 巨大 影响。
逻辑本身也可以整理。您收到的警告提示您可以简化条件 - 当您的条件包含布尔文字时,情况总是如此。
然而,最重要的是,可读性将受益于将表达式分解为多行。
我也会交换两个次要条件,这样你 first 测试当前字符,然后 then 进一步递归(仅当当前测试的两个字符相等!):
private static bool IsPalindrome(string input, int start, int end) {
return (start >= end) ||
input[start] == input[end] &&
IsPalindrome(input, start + 1, end - 1);
}
此代码依赖于 &&
优于 ||
的正确优先级。有些人更喜欢通过使用更多括号来明确此运算符的优先级:
private static bool IsPalindrome(string input, int start, int end) {
return (start >= end) ||
(
input[start] == input[end] &&
IsPalindrome(input, start + 1, end - 1)
);
}