从子例程开始,而不是函数。告诉他们,一个程序就是指令列表,菜谱告诉计算机如何做。并且它正在一条指令之后被另一条指令执行(可以并行执行某些步骤,但稍后会更多)。
有些任务是相当常见且重复的,因此如果我们不得不一遍又一遍地写下来,那将是很糟糕的,因此我们只编写一次并从中编写一个“较小的程序” –一个子例程,该例程可重复使用。程序的其他部分。为了能够多次执行它,我们在程序中给它起一个有意义的名称。然后,当我们要将该“小程序”作为较大的程序的一部分执行时,可以使用该名称,方法是使用该名称进行调用。
调用子例程就像召唤一个知道如何执行该任务的恶魔一样,以该恶魔的名字命名。因此,当我们想在程序中执行该特定任务时,编写“调用名为Argoth的恶魔”,该恶魔就会出现并按照我们指示他的任务为我们完成任务,然后消失并继续我们的工作。工作。
有时,恶魔需要一些其他信息,如果没有这些信息,他将无法决定要执行哪些任务,或者我们真正想要他提供什么。例如,如果恶魔应该建造一座城堡,他可能需要知道他应该在哪里建造城堡,或者要建造多大的建筑物,等等。这些是传递给恶魔的参数 ……我的意思是,子例程现在变成了参数化的。
参数是为了执行任务而缺少但必需的那些信息。它们稍微改变了子例程的功能。它们就像配方中的空白插槽,需要先填充才能执行。
参数,在另一方面,是实际的信息(值),我们提供这些参数。
至于并行执行,我们可以认为它是这样的:总有一个人(或东西正在执行的程序(指令列表))。它是另一个人(您是否知道“计算机”曾经是执行计算的人的名字?)或一台机器。程序只是指令列表,它不能独立运行。必须有人来做计算过程(从列表中执行这些操作)。有时,这些操作可以并行执行-我们可以将列表的副本分发给几个人,并让他们每个人执行列表中的一组不同的任务,只要他们彼此之间不打扰或不打扰即可。不必等待别人的工作成果。那对您来说是多线程的;)
至于函数和子例程(也称为过程)之间的区别,通常的区别是调用一个函数来计算某个值,该值将由于执行而返回,而过程只是出于娱乐目的而执行;)对于它们的“副作用” –仅出于列表中执行的操作。
但是,如果一开始调用过程或函数引起一些麻烦,则可以使用曾经流行的另一个术语:jump。可以跳入一个子例程,这意味着您停止执行当前正在执行的操作,并“跳转”到列表(或任何其他列表)上的另一个位置(子例程)以执行其任务。然后,当您完成操作时,您将“跳回”-也就是说,您将返回到被打扰的地方,以便您可以继续执行上一个任务。呼叫和跳跃之间的区别在于,现在您是恶魔。
至于有人在这里提到的方法,或者某些语言“没有功能,只有方法”的事实–这不是很正确,因为方法是函数!–其中的一种特殊类型:它们是用于检索封装在对象内部的某些信息或对其进行操作的函数。它们是“对这些数据进行操作的方法”。该名称来自面向对象的范式,其中数据被对象所包围,并且只能通过称为“方法”的特殊功能才能直接操作。
方法在其他方面很特殊:它必须知道应该操作/调用哪个特定对象(“此”对象)。这就是为什么通常用附加的隐藏参数来修饰方法的原因,该参数存储有关在其上被调用的对象的信息(“ this”指针)。这使函数的调用方式变得很复杂,但这只是程序员的“执行细节”,只要他知道自己在做什么,就不必太在意。