降低函数的圈复杂度
Reduce cyclomatic complexity of a function
此函数检查拼字板的单元格是否为双字母奖励。它的圈复杂度为 23,高于 20 的阈值。我不知道如何用另一种方法来做,我认为这是唯一的方法。
这是我的功能:
checkDoubleLetterCell(row: number, column: number): boolean
{
if((row === middle- 1 || row === middle + 1)
&& (column === middle - 1 || column === middle + 1)
|| (row === 0 || row == SCRABBLE_SIZE - 1 || row === middle)
&& (column === middle + Math.round(middle/2) || column === middle - Math.round(middle/2))
|| (column === 0 || column === SCRABBLE_SIZE - 1 || column === middle)
&& (row === middle + Math.round(middle/2) || row === middle - Math.round(middle/2))
|| (column === middle + 1 || column === middle - 1)
&& (row === middle + Math.round(middle/2) + 1 || row === middle - Math.round(middle/2) - 1)
|| (row === middle + 1 || row === middle - 1)
&& (column === middle + Math.round(middle/2) + 1 || column === middle - Math.round(middle/2) - 1))
{
return true;
}
return false;
}
解决方案是在数据而不是程序代码中表示静态知识。如果有关双字母方块位置的知识以静态初始化的数据结构表示,比如正确维度的布尔矩阵 dblScore,那么您的代码将减少为:
checkDoubleLetterCell(row: number, column: number): boolean
{
return dblScore[row,column];
}
过度复杂通常是选择 ill-fitting 表示的 side-effect。一般规则:静态知识应该用数据表示,而不是过程逻辑。
此函数检查拼字板的单元格是否为双字母奖励。它的圈复杂度为 23,高于 20 的阈值。我不知道如何用另一种方法来做,我认为这是唯一的方法。 这是我的功能:
checkDoubleLetterCell(row: number, column: number): boolean
{
if((row === middle- 1 || row === middle + 1)
&& (column === middle - 1 || column === middle + 1)
|| (row === 0 || row == SCRABBLE_SIZE - 1 || row === middle)
&& (column === middle + Math.round(middle/2) || column === middle - Math.round(middle/2))
|| (column === 0 || column === SCRABBLE_SIZE - 1 || column === middle)
&& (row === middle + Math.round(middle/2) || row === middle - Math.round(middle/2))
|| (column === middle + 1 || column === middle - 1)
&& (row === middle + Math.round(middle/2) + 1 || row === middle - Math.round(middle/2) - 1)
|| (row === middle + 1 || row === middle - 1)
&& (column === middle + Math.round(middle/2) + 1 || column === middle - Math.round(middle/2) - 1))
{
return true;
}
return false;
}
解决方案是在数据而不是程序代码中表示静态知识。如果有关双字母方块位置的知识以静态初始化的数据结构表示,比如正确维度的布尔矩阵 dblScore,那么您的代码将减少为:
checkDoubleLetterCell(row: number, column: number): boolean
{
return dblScore[row,column];
}
过度复杂通常是选择 ill-fitting 表示的 side-effect。一般规则:静态知识应该用数据表示,而不是过程逻辑。