14使用函数时要特别考虑的问题
一. 使用函数时要特别考虑的问题
现代的编程语言,如C++、Java、Visual Basic等,都同时支持函数和过程。函数是指由返回值的子程序;过程是指没有返回值的子程序。在C++中,通常把所有的子程序都称为函数;然而,那些返回值类型为void的函数在语义上其实就是过程。
1. 什么时候使用函数,什么时候使用过程
语言纯化论者认为,一个函数应该只有一个返回值,就像数学函数一样。这意味着函数值能接受仅用于输入的参数,并只通过函数本身返回一项结果。函数用于应该以它返回的值来命名,就像 sin()、CustomerID()、ScreenHeight()、一样。在另一方面,过程则可以根据所需,接受任意数量的输入、修改和输出参数。
一种常用的编程实践是让函数像过程一样执行并返回状态值。逻辑上,这种东西的工作方式和过程一样,但是由于具有返回值,它又确实是一个函数。
outputStatus = report.FormatOutput(formattedReport)
if(outputStatus == Success)
{
}
简而言之,如果一个子程序的主要用途就是返回由其名字所指明的返回值,那么就应该使用函数,否则就应该使用过程。
2. 设置函数的返回值
使用函数时总存在返回不正确的返回值的风险。当函数内有多条可能执行路径,而其中一条执行路径没有设置返回值时,这一错误就出现了。为了减少这一风险,请按照下面给出的建议来做。
(1) 检查所有可能的返回值
在编写函数时,请在脑海里执行每一条执行路径,确保在所有可能的情况下该函数都会有返回值。在函数开头用一个默认值来初始化返回值是个很好的做法——这种方法能够在未正确地设置返回值时提供一张保险网。
(2)不要返回指向局部数据的引用或指针
一旦子程序执行结束,其局部数据就都出了作用域,那么任何指向局部数据的引用或指针也随之失效。如果一个对象需要返回有关其内部数据的信息,那就应该把这些信息保存为类的数据成员。然后,它还应该提供可以返回这些数据成员的访问器子程序,而不是返回对局部数据的引用或者指针。