第6.15章: 函数的最佳实践

English

1. 保持函数短小且专注

一个函数应当把一件事做好。如果函数变得太大,或者试图做太多事情, 就把它拆成更小的函数。

2. 优先使用清晰的名字

函数名应当描述这个函数做什么。除非缩写被普遍理解, 否则避免使用缩写。

3. 避免不必要的 lambda

lambda 很方便,但创建许多相同的 lambda 会增大代码体积。 当逻辑简单时,优先复用同一个 lambda,或者写成普通函数。

4. 回调使用无捕获 lambda

无捕获的 lambda 可以用作函数指针。如果你需要捕获, 请考虑普通函数或另一种设计是否更清晰。

5. 避免深递归

递归使用调用栈。深递归可能导致栈溢出。 当深度很大或不可预测时,优先使用循环。

6. 用 fast_io 视图类型取代裸指针

相比裸指针或 C 风格数组,::fast_io::span、::fast_io::string_view、 ::fast_io::cstring_view 与 ::fast_io::index_span 提供更安全、更清晰的函数 参数。

7. 避免不必要的复制

尽可能按引用传递大型对象。除非你确实需要一份独立副本, 否则避免复制。

8. 保持函数签名简单

优先使用少量参数。如果函数需要很多参数, 请考虑把相关的值归为一组,或者重新思考设计。

9. 用提前返回提升清晰度

提前处理特殊情况可以让代码更易读。


int divide(int a, int b)
{
    if(b == 0)
        ::fast_io::fast_terminate();
    return a / b;
}

10. 记录假设

如果函数有某种假设(例如“指针不得为空”),请清楚地记录它。 这能防止误用,并让你的代码更易维护。

要点