原始重複代碼
// 處理 char
QString pattern = "\\bchar\\b";
QRegExp expression(pattern);
int index = text.indexOf(expression);
while (index >= 0) {
int length = expression.matchedLength();
setFormat(index, length, myFormat);
index = text.indexOf(expression, index + length);
}
// 處理 double - 幾乎完全相同的邏輯重複
QString patt = "\\bdouble\\b";
QRegExp express(patt);
int inde = text.indexOf(express);
while (inde >= 0) {
int lengt = express.matchedLength();
setFormat(inde, lengt, myFormat);
inde = text.indexOf(express, inde + lengt);
}
重構後
QStringList keywords = {"\\bchar\\b", "\\bdouble\\b", "\\bint\\b", "\\bfloat\\b"}; // 可擴展
for (const QString &kw : keywords) {
QRegExp rx(kw);
int pos = text.indexOf(rx);
while (pos >= 0) {
int len = rx.matchedLength();
setFormat(pos, len, myFormat);
pos = text.indexOf(rx, pos + len);
}
}
優勢
- 新增關鍵字只需在
keywords 列表添加,無需複製粘貼邏輯。 - 統一格式控制(顏色、字體),維護成本極低。
- 可進一步封裝為
highlightKeywords(text, keywords, format) 通用方法。