4.2 参数和返回值
调用函数或过程时,需要传递正确数量的参数,并确保它们符合预期类型。否则,编译器会发出错误信息,就像给变量赋值时类型不匹配一样。前面的 DoubleIt 函数定义了一个 整数参数,如果调用:
DoubleIt(10.0);
编译器将显示错误:
[dcc32 Error] E2010 Incompatible types: 'Integer' and 'Extended'
小贴士:只要输入函数或过程的名称和左括号,编辑器就会自动提示该函数或过程的参数列表。这项功能称为代码参数(Code Parameters ),是 Code Insight技术(在其他集成开发环境中称为 IntelliSense)的一部分。从 Delphi 10.4 开始,CodeInsight 由 LSP 服务器(语言服务器协议)提供支持。
与赋值类似,在某些情况下允许进行有限的类型转换,但一般情况下应尽量使用具体类型的参数(这对于引用参数是强制性的,稍后我们将看到)。
调用函数时,可以将表达式作为参数传递,而不是将数值作为参数传递。在更简单的情况下,您只需传递一个变量的名称。在这种情况下,变量的值会被复制到参数中(参数通常有一个不同的名称)。我强烈建议您不要为参数和作为参数值传递的变量使用相同的名称,因为这会造成相当大的混乱。
警告: 使用 Delphi 时,一般不应依赖于传递给函数的参数的求值顺序,因为这取决于调用约定,在相同情况下是未定义的,但最常见的情况是从右到左求值。有关这方面的更多信息,请访问:http://docwiki.embarcadero.com/RADStudio/en/Procedures_and_Functions_(Delphi)#Calling_Conventions。
最后,请注意您可以让函数或过程具有不同的版本(这一特性称为重载),并且可以跳过参数,让它们使用预定义值(这一特性称为默认参数)。函数和过程的这两个关键特性将在本章后面的章节中详细介绍。