<分区>
我正在为 http 客户端编写一个 C++ 库。我没有太多编程经验,所以请帮助我。
我有一个名为 add
的方法。它有两个参数。第一个是类型名称,第二个是参数 q。它是介于 0 和 1 <0,1> 之间的数字。它应该在点后有 0 到 4 位数字。
我可以写,但我不知道写什么更好:
void add(std::string type, double q)
-> 我必须在此方法的主体中将 q 转换为 std::string。
void add(std::string type, std::string q)
-> 没关系,它更快但对用户来说可能不太直观,因为它是一个数字(?)。 ...
有两种方法:1) 和 2) 是个好主意吗?
请帮帮我。我没有经验......我知道其中两种方法有效,但更好,更受欢迎。你怎么认为?你会怎么写这个?
通常,您只想通过查看方法签名来明确用户的期望。您的代码应该为使用它的人提供有用的点击(即让您的代码在做什么以及对他们的期望更加明显)。
让我们从最糟糕的开始:
void add(std::string type, std::string q)
- 没有明确说明
q
应该是一个数字。
q
不是一个描述性很强的名称。
对于上面的示例,调用者可能会感到困惑并使用反向参数调用该方法:add("5.0123", "someType")
没有任何信息告诉用户他们做错了什么,直到必须使用参数。最糟糕的是,你不知道现在哪里会爆炸。这可能会导致一些非常难以追踪的错误,仅仅是因为没有强制执行正确的类型。
稍微好点:
void add(std::string type, double q)
- 现在很明显,用户正在添加某种类型和 double 值。
q
仍然不是一个描述性的名字
我会推荐:
void add(std::string type, double value)
- 现在很明显,用户正在添加某种类型和 double 值。
- double 的参数名称现在是
value
(比 q
更具描述性)。
现在用户不能调用参数乱序的方法,即 add(5.0123, "someType")
,因为它会导致编译器错误。如果不是很明显:得到一个编译器错误要好得多,因为它可以立即修复。这样您就可以从头开始编写更安全的代码。
当然,这意味着您必须将 double
转换为 string
,但大部分它是考虑到上述所有好处,只需付出很小的代价。
我不知道该值代表什么,但是您可以将参数命名为它代表的“真实世界”实体越接近,它就越好。