C++核心准则​T.140:为所有可能重用的操作命名

共 2344字,需浏览 5分钟

 ·

2020-09-26 11:11

T.140: Name all operations with potential for reuse

T.140:为所有可能重用的操作命名


Reason(原因)

Documentation, readability, opportunity for reuse.

文档化,可读性,重用的机会。


Example(示例)

struct Rec {
string name;
string addr;
int id; // unique identifier
};

bool same(const Rec& a, const Rec& b)
{
return a.id == b.id;
}

vector find_id(const string& name); // find all records for "name"

auto x = find_if(vr.begin(), vr.end(),
[&](Rec& r) {
if (r.name.size() != n.size()) return false; // name to compare to is in n
for (int i = 0; i < r.name.size(); ++i)
if (tolower(r.name[i]) != tolower(n[i])) return false;
return true;
}
);

There is a useful function lurking here (case insensitive string comparison), as there often is when lambda arguments get large.

代码中隐藏着一个有用(在不需要区分大小写时)的函数,当lambda表达式变大时通常会这样。

bool compare_insensitive(const string& a, const string& b)
{
if (a.size() != b.size()) return false;
for (int i = 0; i < a.size(); ++i) if (tolower(a[i]) != tolower(b[i])) return false;
return true;
}

auto x = find_if(vr.begin(), vr.end(),
[&](Rec& r) { compare_insensitive(r.name, n); }
);

Or maybe (if you prefer to avoid the implicit name binding to n):

或者可以这样(如果你更希望避免n上的隐式名称绑定):

auto cmp_to_n = [&n](const string& a) { return compare_insensitive(a, n); };

auto x = find_if(vr.begin(), vr.end(),
[](const Rec& r) { return cmp_to_n(r.name); }
);
Note(注意)

whether functions, lambdas, or operators.

函数,lambda表达式,运算符都适用。


Exception(例外)

  • Lambdas logically used only locally, such as an argument to for_each and similar control flow algorithms.

    Lambda表达式逻辑上是本地使用的,例如作为一个for_each或类似的控制流算法的参数。

  • Lambdas as initializers

    Lambda表达式作为初始化器使用时。


Enforcement(实施建议)
  • (hard) flag similar lambdas

  • (困难)标记类似的lambda表达式。

  • ???


原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t140-name-all-operations-with-potential-for-reuse


新书介绍

《实战Python设计模式》是作者最近出版的新书,拜托多多关注!

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。




觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!



浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报