|
|
|
Procedures allow tasks to be encapsulated for
use at another time. Parameters provide a technique for providing inputs to
procedures and receiving outputs from them. |
|
|
|
|
|
The body mass index is used to determine if a
person is overweight: |
|
BMI = 4.89weight/height2 |
|
where the weight is in pounds, the height is in
feet |
|
|
|
Converting it to a procedure is straightforward
… so volunteer to write it, letting your friend build the GUI |
|
|
|
|
|
|
A problem with names … |
|
Procedure Assumes Quantity GUI
Assumes |
|
heightIN height
BMIheight |
|
weightLBS weight
BMIweight |
|
bodyMass bmi BMIndex |
|
Though in this case better communication might
have saved this case, the need to associate different names is fundamental
– it is essential in making procedures reusable. |
|
|
|
|
The body mass problems can be fixed without
dieting |
|
Introduce parameters ... |
|
|
|
|
|
|
|
Formal parameters are part of the formal
definition |
|
Formal parameters are “declared” in the
parenthesized list following the procedure name |
|
To call the procedure, give the actual
parameters |
|
|
|
|
|
|
The formal parameters are “declared” within the
parentheses … the syntax is just like DIM statements |
|
As with other variables, any names can be chosen |
|
Each variable must be given a type: Integer, String,
Double |
|
Formal parameter variables are “known” only
within the procedure, i.e. they are local to a procedure |
|
They never conflict with variables in the
calling context |
|
Different procedures could use the same formal
parameter names without confusion or conflict |
|
The technical term for this is “scope”: the
scope of the formal parameter is local to the procedure. |
|
|
|
|
|
|
|
Many programming languages (including VB6)
provide several different ways of passing values back and forth between the
actual and the formal parameters. |
|
The default in Visual Basic, and the only kind
we’ll use in CSE/IMT 100, is pass by reference. |
|
Pass by reference allows information to flow in
both directions. |
|
Formal parameters can be used as inputs or
outputs or both |
|
Any changes made to a formal parameter will make
a change to the corresponding actual parameter. |
|
|
|
|
|
|
The actual parameters must fulfill these
requirements known as the formal/actual correspondence rules |
|
There must be the same number of actual
parameters in the call, as there are formal parameters in the proc
declaration |
|
The order of the parameters matters -- |
|
The 1st actual parameter corresponds
to the 1st formal |
|
The 2nd actual parameter corresponds
to the 2nd formal |
|
The types of the actuals must match the types of
the formals |
|
Any formal used as a procedure output must have
a variable as an actual |
|
|
|
|
When we call a procedure, Visual Basic jumps to
the code for the procedure. It runs
this code, then returns back to where the procedure was called, and
continues on.
x = 5
Call squid()
x = x+1
Private sub squid()
Print “hi there”
End Sub |
|
|
|
|
|
|
|
When we call a procedure, the formal parameter
temporarily becomes another name for the actual parameter. |
|
In other words, in Visual Basic the formal
parameter temporarily becomes an alias for the actual parameter, for as
long as the procedure is executing. |
|
Aliases in real life: |
|
“The Sundance Kid” was an alias for Harry
Longabaugh |
|
Two names; one person. |
|
|
|
|
Remember … the formal parameter becomes an alias
for the actual parameter |
|
|
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
What does the program print? |
|
|
|
|
|
|
|
|
|
The “Fluency” book uses a different way of
explaining parameter passing (as assignment statements into the formal
parameters). |
|
For straightforward programs, this always gives
the same results as pass by reference. |
|
However, for some messy cases it gives different
results. |
|
Ugh!
We’re never going to give you such programs in CSE/IMT 100 (in
homework or quizzes). |
|
If you go on to further study of programming,
however, you will probably run into this. |
|
The way described in the lecture is how it’s
actually done. |
|
|
|
|
|
|
|
Discussion of parameters for procedures |
|
Parameters link the variables in the calling
context with the variables in the procedure context |
|
There is a 1-to-1 relationship between the
formal parameters of the procedure definition and the actual parameters of
the actual procedure call |
|
The default way of passing parameters in Visual
Basic is “pass by reference”. The
formal parameter becomes an alias for the actual parameter. |
|