跳转到内容

SuperCard 编程/基础/处理程序 & 函数

来自维基教科书,一个开放的世界中的开放书籍

处理程序

[编辑 | 编辑源代码]

SuperCard 中的处理程序是子例程。

它们以 "on" 关键字开头,后面跟着处理程序名称。它们以 "end" 关键字结束,后面也跟着处理程序名称。

示例

on calculateInterest
   -- other lines of code would be here
end calculateInterest

处理程序可以接收一个或多个传递给它们的参数。这些参数应该包含在处理程序定义中,位于处理程序名称之后,并用逗号分隔。

单个参数

[编辑 | 编辑源代码]

这是一个名为 "calculateInterest" 的处理程序的示例,它接收一个名为 "baseAmt" 的参数,并将其乘以已定义的全局变量 "gInterestRate",并将结果存储在已定义的全局变量 "gInterestAmt" 中。

示例

on calculateInterest baseAmt
   global gInterestRate
   global gInterestAmt

   put (baseAmt * gInterestRate) into gInterestAmt
end calculateInterest

为了在代码中调用此处理程序,您需要执行类似以下操作

使用固定的字面量

calculateInterest 5599

或者,像这样,使用变量

calculateInterest preInterestAmt

多个参数

[编辑 | 编辑源代码]

这是一个名为 "calculateInterest" 的处理程序的示例,它接收两个参数 "baseAmt" 和 "interestRate",将它们相乘,然后将结果存储在已定义的全局变量 "gInterestAmt" 中。

示例

on calculateInterest baseAmt, interestRate
   global gInterestAmt

   put (baseAmt * interestRate) into gInterestAmt
end calculateInterest

为了在代码中调用此处理程序,您需要执行类似以下操作

使用固定的字面量

calculateInterest 5599,0.07

或者,像这样,使用变量

calculateInterest preInterestAmt,anInterestRate

函数也像处理程序一样是子例程,但是函数应该使用 "return" 关键字在终止函数的 "end [function_name]" 行之前返回值。SuperTalk 不会强制执行此操作。它允许您声明不返回值的函数,就像它允许您在处理程序中返回值一样。但是,最好不要从处理程序返回返回值,并在需要返回值时使用函数而不是处理程序。遵循此约定将帮助您编写更易于理解、调试和维护的代码。

调用函数的方式略微不同于调用处理程序。调用函数通常需要在函数名称后面加上一对开闭括号,即使没有传递参数。

这是一个不接收参数的函数示例

function piTimesTwo
   put pi * 2 into theResult

   return theResult
end piTimesTwo

为了调用此函数,您需要执行类似以下操作

put piTimesTwo() into doublePi

或者,您可以像这样使用它而不存储其结果

if someOtherVariable > piTimesTwo() then
   -- lines of code for a true result would go here
else
   -- actions for the false result would go here
end if

请注意,即使 "piTimesTwo" 函数不接收参数,在调用它时,它的名称后面也会跟着一对空括号。

就像处理程序一样,函数可以接收一个或多个参数。

单个参数

[编辑 | 编辑源代码]

基于上面的示例,这里有一个计算利息的函数,它只接收一个参数,将其乘以已定义的全局变量,但不是将结果存储在另一个全局变量中,而是将其返回

function calculateInterest baseAmt
   global gInterestRate

   put (baseAmt * gInterestRate) into theResult

   return theResult
end calculateInterest

您可以像这样使用字面量调用此函数

set tInterestAmt to calculateInterest(5995)

但是,更现实的是,您可能会将存储在变量中的金额传递给它

set tInterestAmt to calculateInterest(somePreInterestAmt)

多个参数

[编辑 | 编辑源代码]

最后,这是一个更现实的(尽管可能过于简单)函数示例,它接收两个参数,将它们相乘,然后返回结果。优点是,您不需要为利率定义全局变量。之所以过于简单,是因为您不需要定义一个函数来仅仅将两个数字相乘并存储结果,但是,我相信您可以想象创建比仅仅相乘两个数字并返回结果更复杂得多的函数。

示例

function calculateInterest baseAmt,interestRate
   put baseAmt * interestRate into theResult

   return theResult
end calculateInterest

注意:实际上没有必要将 (baseAmt * interestRate) 放入一个名为 "theResult" 的新变量中。前面的函数可以像这样写

function calculateInterest baseAmt,interestRate
   return (baseAmt * interestRate)
end calculateInterest

要使用存储在两个变量中的值调用函数,您需要执行类似以下操作

put calculateInterest(someAmt,someInterestRate) into someInterestAmt

处理程序和函数都允许您在 SuperTalk 脚本中定义子例程。

处理程序和函数都可以接收

  • 无参数
  • 一个参数
  • 多个参数

处理程序以 "on" 关键字开头,后面跟着处理程序名称。

函数以 "function" 关键字开头,后面跟着函数名称。

处理程序和函数都以 "end" 关键字结束,后面跟着处理程序/函数名称。

在调用接收一个或多个参数的处理程序时,参数将放置在处理程序名称后面,不带任何包围括号。

在调用不接收参数的函数时,最好在函数名称后面加上一对空括号。在调用接收一个或多个参数的函数时,参数必须用括号括起来。

您应该使用函数来创建使用 "return" 关键字后跟变量名或计算结果返回值的子例程。

您应该使用处理程序来创建不返回值的子例程。

华夏公益教科书