viusalbasic第9章笔记 过程

Sub过程
visual Basic 程序是由过程组成的,除了定义常量和变量外,全部工作就是编写工作,过程可以看作是编写程序的功能模块。
使用过程就 ------- 是扩充功能以适应某种需要
我们已经使用过很多次事件过程了,当发生某个事件,对该事件作出响应的程序段,这种事件构成了vb的主体。
多个事件可能需要使用到相同的 程序代码,所以我们可以把这段代码独立出来,作为一个过程,这样的过程就叫做,“通用过程”,他可以单独建立,供事件过程其他过程调用。

定义sub过程

private Sub Subtest
     PRINT "this is a sub procedure"
End Sub    

在这里插入图片描述

  • Sub过程 sub开头,end sub 结束,sub 和 end sub 之间是描述 过程操作的语句块, 叫做过程体
  • Static 指定局部变量在内存的存储方式,使用Static 过程中的所有变量都是Static 型的,每次调用局部变量保持不变,没有的化,每次调用,局部变量初始为-
  • Private public private 只能被本模块的其他过程访问,public 可以在程序任意部分调用他。窗体层定义的通用过程一般在本窗体访问,如果在别的地方访问要加上啊窗体名作为前缀
  • 参数列表 byval 说明参数是传值
  • 不可嵌套
  sub tryout(x as integer,ByVal y As Integer)
  x = x + 100 
  y = y * 6
  End Sub

调用sub过程

  1. 使用 call 来调用sub 过程
    Call TryOut(a,b)
  2. 过程名作为语句来使用
    Tryout a,b
    Static Sub DelayLoop(DelayTime)
    Const SecondsInDay = 24& * 60& * 60&
    LoopFinish = TImer + DelayTime
    if LoopFinish > SecondsInDay Then
          LoopFinish = LoopFinish - SecondsInDay
          Do while Timer > LoopFinish
            Loop
     End if
     Do While Timer > LoopFinish
       Loop
    
    

DelayLoop 5
Call DelayLoop(5)
```

通用过程与事件过程

事件过程也是Sub 过程,他是附加在窗口和空间上的,窗体的事件过程不可以由用户决定,只能由系统指定,
模块名. 过程名
如果不同的模块有先相同的过程名
在这里插入图片描述

Function 过程
Sub 过程不直接返回值,可以作为独立的基本语句调用。
例子

Function BinarySearch(Lower,Upper As Integer) As Boolean
if lower =  Upper Then 
     BinarySearch = True 
      Exit Function 
 Else 
      BinarySearch = Flase
   End if 
   End function 
  

说明

  • 该例子 有两个参数,返回值是Boolean
  • Function 以function 开头 End Function 结尾, 中间的是语句块, 比sub不同的是 Function 有返回值,
  • Sub过程相当于执行一个语句,调用function过程需要放回一个值,我们可以像内部函数一样在表达式中使用,过程名= 表达式 来把值赋给function 没有 这个 “BinarySearch = Flase 的话 ” 系统会默认返回
    例子 9.3 编写一个最大公约数的函数过程
Function gcd(ByVal x As Integer,ByVal y As Integer)As Integer
  Do While y<>0
      reminder = x Mod y
      x = y 
      y = reminder
  Loop 
  gcd = x
  

调用Function过程

使用visual Basic 内部函数一样来调用Function 过程。
比如我们可以这样调用前面编写的 gcd

  Sub Form_Click()
     Dim a As Integer, b As Integer
     a  = 96: b = 64
     x = gcd(a,b)
     Print "G.C.D =";x
 END Sub

x = gcd(a,b)就是调用gcd 函数的语句
9.4
窗体模块 可以定义和编写子程序过程,函数过程,事件过程。
标准模块只能定义程序过程和函数过程


参数传递
调用一个过程,必须把实际参数传送给过程,完成形式参数和实际参数的结合。 我们实际上使用实际参数来执行调用的过程
形式参数就是参数
实际参数叫做自变量,也叫实参

  1. 形参和实际参数
    a. 按位置传送 也就是 实际参数必须和形式参数匹配,也就是位置次序必须一致。
    Sub TestSub(p1 As Integer,p2 As Single,p3 As String)
    p1 p2 p3 就是形式参数
    调用
    Call TestSub(A%,B!,“Test”)
    顺序类型必须相同
  2. 指名传送
    “‘:= ”
    Sub add_num(firstvar As Integer,second As Integer,thirdvar As Integer)
    c = (firstvar + secondvar) * thirdvar
    Print c
    End Sub
    add_num 4,6,8 这就是按位置结合的方式
    add_num firstvar:=4,secondvar:=6,thirdvar:=8
    这样就是指名传送
    我们也就可以不按顺序了
    引用
 Sub Tryout(x As Integer,y As Integer)
    x = x + 100
    y = y * 6 
    Print "x = ";x,"y = " ,y 
 End Sub
 Sub Form_Click()
    Dim a As Integer,b As Integer
    a = 10 : b =20 
    tryout a, b
    Print "a = "; a,"b=";b
End Sub 

我们发现一个 x = 110 y = 120
a = 110 b = 120
这种参数传送方式就是 传地址(引用) , 通过引用我们可以改变传送给过程的变量的值
原因求解:
变量的值是放在内存中的某个地址的,通过引用来调用一个过程,我们向该过程传送变量,实际上是把变量的地址传送给了该过程,也可以说是把引用传递给了该过程
我们实验一下副作用

Funciton Fun(x As Integer,y As Integer)As Integer
              x = x + y
              if x<>0 Then 
                    Fun = x
               Else 
                   Fun = y 
               End if 
          End funciton 
        
     Private Sub Command1_Click()
          Dim a As Integer, b As Integer 
             a = 2
             b =  3 
             Text1.Text = Fun(a,b)
              Text1.Text = Fun(a,b)
              Text3.Text = Fun(a,b)
              


 End Sub

TEXT1.TEXT = 5
TEXT2.TEXT = 8
TEXT3.TEXT = 11

传值

Function power(x As SIngle,ByVal y As Integer)
    Dim result As Single
    result = 1
    Do While y > 0 
    result = result * x
    y = y - 1
    Loop
    power = result
 End Function 
Sub Form_Click()
  For i = 1 To 5
          r = power(5,i)
          Print r            
   Next i 
End Sub

很明显,当调用要对形式参数进行改变的时候,而内部又有对形式参数改变的逻辑时,我们必须通过,ByVal 传值来解决。
Sub函数 不能通过过程名放回值,但是我们可以返回多个值

Sub S(ByVal x As Integer,ByVal y As Integer,m As Integer,n As Integer)
     m = x+ y
     n = x * y
End Sub
DIm Sum As Integer , Mul As Integer 
S 20,30,Sum,Mul 
Print Sum,Mul

数组的参数传送
viusal Basic 允许把数组作为实际参数传送到过程中。例如,

  Sub S(a(),b())
   End Sub

该过程有两个形参,都是数组。
我们可以用
Call S(p(),q())
来调用该过程
当使用数组作为参数的时候,使用“传地址的方式” 而不是传值的方式,我们是直接将
p()数组的地址传给a()的。 a()数组和p()数组拥有了 相同的起始地址。
我们就有了一个特点:
形参数组中的各元素的改变将会被带会实参

            Private Function FindMax(a()As Integer)
                        Dim Start As Integer,Finish As Integer, i As Integer
                            Start = LBound(a)
                                  Finish = UBound(a)
                                     For i = start To Finish
                                                 if a(i)>Max Then Max = a(i)
                                                   Next i 
                                      FindMax = Max 
                                      

             End Function      

可选参数 与 可变参数
灵活而又安全的参数传送方式,允许使用可选参数和可变参数,在调用一个过程的时候,可以向过程传送任意数量的参数,或者可选参数
可选参数 : Optional 关键字,IsMissing 函数中测试调用时是否可以传送可选参数

Optinal 指定的参数是Variant Ismissing 返回 boolean 变量

可变参数
ParamArray
Sub 过程名 (ParamArray 数组名)
例如

对象参数、
我们一般使用 变量 作为 形式参数
vb允许对象,窗体,控件作为通用过程的参数,这可以提高效率。
对象只能通过传地址方式调用

局部内存分配
局部变量会在过程结束的时候清楚这些变量,
如果设置了Static就不会

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值