IT技术博客大学习 共学习 共进步

接口设计规则一:让你的接口会说话

Zhang Jiuan' Notes 2010-06-03 22:29:14 浏览 4,401 次

在面试过程中,我时常会问一道简单的题目:
请找出如下程序不妥之处:
void s_c(const char *s, const char *p)
{
while (*s) {
*p = *s;
}
}
首先,这道简单的题目考察的是找错能力,比如结束符和const的应用。
其次,考察的是接口设计能力,这也是重点。
没有返回值,因此对于一些异常现象不好对外表现,const是否应用正确,
函数名使用是否见其名知其意,函数参数是否见其名知其意,有没有对接
口的简述,指针,引用,就量传递使用是否正确等等。
比如改成如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
*/
int strcpy(const char *src, char *dest);
这样只接口就可以很清楚的了解它的功能和用法了。
当然,在代码实现过程中,还有许多其它需要考虑的点,
比如输入是否合法,出错处理,边界处理等等。
现修改如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
*/
int strcpy(const char *src, char *dest)
{
if (NULL == src || NULL == dest) {
return -1;
}

while (*dest = *src);

return 0;
}
真正细心的你,觉得这样的程序正确吗?效率又如何?
如果有问题,如何改进?

建议继续学习

  1. Paypal接口详细代码(PHP版,非API接口) (阅读 19,300)
  2. 面向“接口”编程和面向“实现”编程 (阅读 13,760)
  3. 存储基础知识之——硬盘接口简述 (阅读 7,402)
  4. PHP连贯接口 (阅读 7,300)
  5. 使用Mitmproxy分析接口 (阅读 6,901)
  6. JavaScript Interface 接口的实现 (阅读 6,880)
  7. 干嘛不去掉“I”和“Impl”? (阅读 6,622)
  8. 以用户为中心的 API 异常设计 (阅读 3,282)