代码重构例集
【1】if ... else ... 结构 与 三目运算符结构
1 // TODO...... 2 int n = 100; 3 // if ... else ... 结构 4 bool b = true; 5 if (b) 6 { 7 n += 100; 8 } 9 else 10 { 11 n -= 100; 12 } 13 14 // 等价的三目运算符 结构 15 n = b ? (n + 100) : (n - 100); 16 // TODO......
【2】if ... else ...结构 与 条件作实参法结构
1 // if ... else ...结构 与 条件作实参法结构 2 if (TRIGGER_OFF == m_config.triggerType) 3 { 4 m_powerAnalyzer->setWaveTriggerOn(false); 5 } 6 else 7 { 8 m_powerAnalyzer->setWaveTriggerOn(true); 9 } 10 11 // == 条件作实参法结构 12 m_powerAnalyzer->setWaveTriggerOn(TRIGGER_OFF != m_config.triggerType);
【3】针对bool类型的变量,if条件判断表达式不用等于true 或 false
1 // 针对bool类型的变量,if条件判断表达式不用等于true 或 false。示例: 2 if (enable == true) 3 { 4 m_cflag |= KeyUp; 5 } 6 else 7 { 8 m_cflag &= ~KeyUp; 9 } 10 11 // 改进1:去掉等于true或false的判断。示例: 12 if (enable) 13 { 14 m_cflag |= KeyUp; 15 } 16 else 17 { 18 m_cflag &= ~KeyUp; 19 } 20 21 // 改进2:转化为三目运算符。示例: 22 m_cflag = enable ? (m_cflag | KeyUp) : (m_cflag & ~KeyUp);
【4】精简的三目运算符
1 // 原代码 2 bool GcfgDataBar::isCursorOutMax(int index) 3 { 4 if (index == 0) 5 { 6 if (m_markPlusOrder > m_endOrder) 7 { 8 return true; 9 } 10 else 11 { 12 return false; 13 } 14 } 15 else 16 { 17 if (m_markMultiplyOrder > m_endOrder) 18 { 19 return true; 20 } 21 else 22 { 23 return false; 24 } 25 } 26 } 27 28 // 精简为三目运算符结构版本1 29 bool GcfgDataBar::isCursorOutMax(int index) 30 { 31 if (index == 0) 32 { 33 return (m_markPlusOrder > m_endOrder) ? true : false; 34 } 35 else 36 { 37 return (m_markMultiplyOrder > m_endOrder) ? true : false; 38 } 39 } 40 41 // 精简为三目运算符结构版本2 42 bool GcfgDataBar::isCursorOutMax(int index) 43 { 44 return (0 == index) ? (m_markPlusOrder > m_endOrder) : (m_markMultiplyOrder > m_endOrder); 45 }
【5】去掉多余的局部变量
1 // 原代码 2 void WinNumeric_itemApplication::navigateWidget(int dir) 3 { 4 QModelIndex curindex = p_winItemAppTable->getCurrentIndex(); 5 bool flag; 6 if (getGlobalSetting(SETTING_NUMERIC_APPIMAGE,"").toString() != "" ) 7 { 8 flag = true; 9 } 10 else 11 { 12 flag = false; 13 } 14 if (flag) 15 { 16 navigateHasImageWidget(dir, curindex); 17 } 18 else 19 { 20 navigateNoImageWidget(dir, curindex); 21 } 22 } 23 24 // 重构版本1:去掉多余的局部变量 25 void WinNumeric_itemApplication::navigateWidget(int dir) 26 { 27 QModelIndex curindex = p_winItemAppTable->getCurrentIndex(); 28 if (getGlobalSetting(SETTING_NUMERIC_APPIMAGE, "").toString() != "") 29 { 30 navigateHasImageWidget(dir, curindex); 31 } 32 else 33 { 34 navigateNoImageWidget(dir, curindex); 35 } 36 } 37 38 // 重构版本2:修改QString字符串的非空判断 39 void WinNumeric_itemApplication::navigateWidget(int dir) 40 { 41 QModelIndex curIndex = p_winItemAppTable->getCurrentIndex(); 42 if (getGlobalSetting(SETTING_NUMERIC_APPIMAGE, "").toString().isEmpty()) 43 { 44 navigateNoImageWidget(dir, curIndex); 45 } 46 else 47 { 48 navigateHasImageWidget(dir, curIndex); 49 } 50 }
【6】待续......
Good Good Study, Day Day Up.
顺序 选择 循环 总结