理解和使用功能和程序

您是否曾经发现自己一遍又一遍地编写相同的代码来执行事件处理程序中的一些常见任务?对是时候让你了解一个程序中的程序了。让我们调用这些小程序子例程。...

您是否曾经发现自己一遍又一遍地编写相同的代码来执行事件处理程序中的一些常见任务?对是时候让你了解一个程序中的程序了。让我们调用这些小程序子例程。

female web developer working on computer

子程序简介

子程序是任何编程语言的重要组成部分​德尔福也不例外。在Delphi中,通常有两种类型的子例程:​函数和程序。函数和过程之间的通常区别在于函数可以返回值,而过程通常不会返回值。函数通常作为表达式的一部分调用。

请看以下示例:

procedure SayHello(const sWhat:string) ; begin ShowMessage('Hello ' + sWhat) ; end; function YearsOld(const BirthYear:integer): integer; var Year, Month, Day : Word; begin DecodeDate(Date, Year, Month, Day) ; Result := Year - BirthYear; end;

定义子例程后,我们可以调用它们一次或多次:

procedure TForm1.Button1Click(Sender: TObject) ; begin SayHello('Delphi User') ; end; procedure TForm1.Button2Click(Sender: TObject) ; begin SayHello('Zarko Gajic') ; ShowMessage('You are ' + IntToStr(YearsOld(1973)) + ' years old!') ; end;

职能和程序

正如我们所看到的,函数和过程都像迷你程序。特别是,它们可以有自己的类型、常量和变量声明。

仔细查看(杂项)SomeCalc函数:

function SomeCalc (const sStr: string; const iYear, iMonth: integer; var iDay:integer): boolean; begin ... end;

每个过程或函数都以一个标题开头,该标题标识过程或函数,并列出例程使用的参数(如果有)。参数列在括号中。每个参数都有一个标识名,通常有一个类型。分号将参数列表中的参数彼此分开。

sStr、iYear和iMonth称为常量参数。函数(或过程)无法更改常量参数。iDay作为var参数传递,我们可以在子例程中对其进行更改。

函数返回值,因此必须在头的末尾声明返回类型。函数的返回值由函数名的(最终)赋值给出。由于每个函数都隐式地具有一个与函数返回值类型相同的局部变量Result,因此赋值给Result与赋值给函数名具有相同的效果。

定位和调用子程序

子程序总是放在单元的实现部分。这样的子例程可以由事件处理程序调用(使用),也可以由后面定义的相同单元中的子例程调用(使用)。

注意:单位的uses子句告诉您它可以调用哪些单位。如果我们希望Unit1中的特定子例程可供另一个单元(如Unit2)中的事件处理程序或子例程使用,我们必须:

  • 将Unit1添加到Unit2的uses子句中
  • 将子例程标题的副本放在Unit1的接口部分。

这意味着其标题在接口部分中给出的子例程在作用域中是全局的。

当我们在自己的单元内调用函数(或过程)时,我们将其名称与所需的任何参数一起使用。另一方面,如果我们调用一个全局子例程(在其他单位中定义,例如MyUnit),我们将使用单位名称后跟句点。

... //SayHello procedure is defined inside this unit SayHello('Delphi User') ; //YearsOld function is defined inside MyUnit unit Dummy := MyUnit.YearsOld(1973) ; ...

注意:函数或过程可以有自己的子例程​ 嵌入其中。嵌入式子例程是容器子例程的本地子例程,不能由程序的其他部分使用。比如:

procedure TForm1.Button1Click(Sender: TObject) ; function IsSmall(const sStr:string):boolean; begin //IsSmall returns True if sStr is in lowercase, False otherwise Result:=LowerCase(sStr)=sStr; end; begin //IsSmall can only be uses inside Button1 OnClick event if IsSmall(Edit1.Text) then ShowMessage('All small caps in Edit1.Text') else ShowMessage('Not all small caps in Edit1.Text') ; end;

  • 发表于 2021-10-07 14:29
  • 阅读 ( 142 )
  • 分类:数学

你可能感兴趣的文章

源代码(source code)和目标代码(object code)的区别

...软件开发生命周期(SDLC)。SDLC中涉及的步骤使我们能够理解源代码和目标代码。本文讨论源代码和目标代码之间的区别。源代码和目标代码的关键区别在于,源代码是使用人类可读的编程语言编写的计算机指令的集合,而目标...

  • 发布于 2020-10-19 18:56
  • 阅读 ( 757 )

bixby voice能做的5件事(还有一件事它做不到)

... 1理解上下文 ...

  • 发布于 2021-03-13 03:17
  • 阅读 ( 250 )

微软的沉浸式阅读器帮助你更有效地阅读

...您使用微软产品的体验,这些产品旨在提高阅读流畅性、理解力、单词识别和专注力。它通过使用文语转换技术大声朗读文本,突出显示不同颜色的动词、名词和形容词,这样你就可以更好地理解每个句子是如何分解的。 ...

  • 发布于 2021-03-14 11:41
  • 阅读 ( 301 )

网站的英雄:理解dom

... 尽管DOM很重要,但很多人并不理解它。事实上,你可以为网站编程多年而不必对它有太多了解。但是随着前端技术的进步,理解DOM变得越来越重要。 ...

  • 发布于 2021-03-30 05:25
  • 阅读 ( 255 )

人工智能的问题是:机器在学习东西,但不能理解它们

...它不是通用的人工智能,了解机器学习的局限性有助于你理解为什么我们目前的人工智能技术如此有限。 科幻梦中的“人工智能”是一种计算机化或机器人化的大脑,它像人类一样思考和理解事物。这种人工智能将是一种人工...

  • 发布于 2021-04-04 05:25
  • 阅读 ( 148 )

如何在Windows7或Windows8上开始语音识别

...为您提供有关语音识别正在执行的操作的信息。如果它不理解你或需要你重复一些东西,它会要求你使用这个酒吧。 训练语音识别 你需要训练语音识别,这样它才能更好地理解你。为此,请单击“语音识别控制面板”中的“训...

  • 发布于 2021-04-11 13:36
  • 阅读 ( 140 )

siri的大升级如果不能理解它的用户就无关紧要了

...会偶尔出错,但Siri往往更容易误解用户。当你最终让Siri理解你的时候,你常常很快就会遇到它的局限性。
 Mos**erg接着写道,Siri的改进——特别是“主动助理”功能,使Siri更像Google Now——还不足以使其更广泛地发挥作用。Pr...

  • 发布于 2021-05-05 09:30
  • 阅读 ( 129 )

wpf公司(wpf)和asp.net(asp.net)的区别

...不是这样的 很好。 3.WPF有丰富的UI,Windows程序员很容易理解它的代码。 4.ASP.NET要求程序员对web模型、UI有一定的了解 理解和跨浏览器测试。 5.ASP.NET独立于浏览器,因此它为用户提供了通用访问。 

  • 发布于 2021-06-23 20:04
  • 阅读 ( 194 )

微服务(microservices)和web服务(web services)的区别

...,以创建让客户更快乐的IT系统。我们对网络工作原理的理解使我们开发出更好的方法来构建各种可能的更高效的系统。微服务诞生于这个世界——它们从现实世界的使用中成为一种趋势。有时候,大事来了就是小包裹。微服务...

  • 发布于 2021-06-25 23:56
  • 阅读 ( 687 )

谷歌allo(google allo)和WhatsApp(whatsapp)的区别

...数据的信息,比如日程安排、照片和预订信息。它还能够理解自然语言模式,这有助于用户正常说话,就像他在和人类助手说话一样。googleassistant能够理解用户在寻找什么,并找到相关信息。 聪明的回答 Google Allo:Google Allo附带...

  • 发布于 2021-06-27 22:36
  • 阅读 ( 168 )
陆化超
陆化超

0 篇文章

相关推荐