鱼C论坛

 找回密码
 立即注册
查看: 777|回复: 4

[已解决]在企业写代码时,建立函数时都要进行参数验证么?

[复制链接]
头像被屏蔽
发表于 2023-6-23 00:42:14 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-23 00:44:53 | 显示全部楼层    本楼为最佳答案   
参数验证在编写代码时是一个非常重要的环节,尤其是在写企业级别的代码时。这是因为参数验证可以帮助确保代码的稳定性,防止因参数类型错误,数量错误,值错误等导致的程序崩溃或不可预期的行为。另外,对于API和库函数,参数验证还有助于提供明确的错误消息,帮助使用者更好地理解如何正确使用这些函数。

在编写企业级代码时,具体是否需要进行参数验证,以及如何进行参数验证,往往取决于编程语言和代码规范。以下是一些可能的规范:

1. 所有的公开函数(即被其他模块或者类使用的函数)都需要进行参数验证。
2. 私有函数(即只在当前模块或者类内部使用的函数)可能不需要进行参数验证,因为其输入被当前模块或类的其他代码控制,可以确保参数的正确性。
3. 对于那些已经通过其他方法(如类型系统)确保了参数正确性的函数,可能不需要再进行参数验证。

在C或C++中,没有官方的参数验证函数,需要程序员自行编写验证代码。这可能包括检查输入的类型(尽管在静态类型语言中这个问题较小),检查参数的数目和值等。如果在函数开始处添加参数验证,可以在问题发生之前捕获错误,从而提高代码的稳健性。

在一些情况下,可能会选择不进行参数验证,例如:

1. 当性能是关键考虑因素,且已经可以确保参数总是正确的时候。
2. 在快速原型开发或者探索性编程中,可能首先关注功能实现,而非参数验证。

总的来说,参数验证是一种良好的编程实践,可以增加代码的稳定性和易用性。但是,是否以及如何进行参数验证应根据具体情况和代码规范进行决定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-6-23 00:51:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-23 00:53:55 | 显示全部楼层
boluobenbo 发表于 2023-6-23 00:51
谢谢详实的回复。有两个延伸的问题请教:
1、既然参数验证这么重要,为什么C或C++不提供官方的参数验证 ...

1. 对于C和C++等静态类型语言来说,许多类型错误都可以在编译时被捕获,而不需要在运行时进行检查。这就减小了运行时参数验证的需求。此外,C和C++的设计哲学强调给予程序员最大的控制权,包括在参数验证方面。这意味着这两种语言不会提供一种"一刀切"的参数验证机制,而是允许(并期望)程序员根据需要编写自己的验证代码。

    Python提供了一些内建的功能来帮助参数验证,例如 assert 语句和 isinstance 函数。另外,有许多开源库提供了更强大的参数验证功能,例如 voluptuous , schema , marshmallow 等。这些库通常提供一种声明性的方式来描述和验证数据结构。

2. 有关参数验证的内容,通常会在一些关于编程最佳实践或者软件工程的书籍中进行讨论。例如,《Clean Code》(《洁净的代码》),《Code Complete》(《代码大全》),《Pragmatic Programmer》(《程序员修炼之道》)等书籍都包含了关于编写良好函数,包括参数验证的内容。

    此外,许多编程教材和在线教程也可能会包含这方面的内容。具体到某一种语言,例如Python,那么你可能会在一些关于Python最佳实践的书籍或者教程中找到这方面的内容。

    无论是书籍还是教程,学习参数验证的最佳方式是结合实践,尝试在自己的代码中应用这些原则和技术,并观察其对代码质量的影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-6-23 01:27:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 10:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表