降低函数的圈复杂度

时间:2017-03-18 15:25:10

标签: typescript cyclomatic-complexity

此功能检查拼字游戏板的单元格是否为双字母加值。它具有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;
}

1 个答案:

答案 0 :(得分:2)

解决方案是在数据中而不是在过程代码中表示静态知识。如果在静态初始化的数据结构中表示了有关双字母正方形位置的知识,例如说尺寸正确的布尔矩阵dblScore,那么您的代码将减少为:

checkDoubleLetterCell(row: number, column: number): boolean
{
    return dblScore[row,column]; 
}

过多的复杂性通常是选择不合适的表示形式的副作用。一个普遍的规则:静态知识应该用数据表示,而不是程序逻辑。