一个函数一件事

10 分钟

一个函数如果又读数据、又计算、又输出,会又长又乱,看不懂也难改。让一个函数只干一件事,它的名字才好起,也才好复用和测试。

反例:什么都塞在一个函数里。

int readSumPrint() {   // 名字都不知道怎么起
    int n, x, s = 0;
    cin >> n;
    for (int i = 0; i < n; i++) { cin >> x; s += x; }
    cout << s << endl;
    return s;
}

拆成三个,各管一段:

int readN() { int n; cin >> n; return n; }          // 只负责读

int sumArray(int a[], int n) {                       // 只负责算
    int s = 0;
    for (int i = 0; i < n; i++) s += a[i];
    return s;
}

void printResult(int s) { cout << s << endl; }       // 只负责输出

拆开的好处很实在:sumArray 不碰输入输出,任何地方都能复用;想单独验证“求和”对不对,直接喂它一个数组就行,不用管键盘输入。

判断信号:如果一个函数的名字里出现了“并”“和”“再”(读入求和打印),十有八九该拆了。名字起不短,往往就是职责太多。

小纸条

给"读入并求和并打印"拆成三个函数,各起个名。

登录 后可看答案

一个函数一件事 · 考级冲刺 · op599 课程