Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Understanding scope of variables
#5
(03-11-2021, 11:13 PM)georgeo Wrote: Actually, my question is more related to subroutines than functions. So, is the following code valid:

Code:
sub myFunction( byref total as uinteger, name$ as string )
    dim length, n as ubyte

    length = len(name$)

    if length=0 then
    return
    end if

    for n = 0 to length-1
    total = total + code(name$(n))
    next n
   
    return
end sub

REM Main program
dim n as ubyte
dim total as uinteger

n = 14
myFunction(total, "Hello")

print "Answer = " + str$(total)
print "n = " + str$(n)

stop
---with variables labelled 'n' in both the main program and the subroutine.

Thanks again


Both SUB and FUNCTIONS are the same (with the small difference that FUNCTIONS are expected to return a value).
When you DIM a variable within a function or sub, it's a *local* variable, and will be used only in that scope and destroyed upon exiting that scope. If there's another variable with the same name in an outer scope (i.e. the global one) this variable is "shadowed" by the LOCAL one and not accessible. So your program is OK (and use a Function, it's also OK.

If you don't use DIM within a FUNCTION / SUB, the global variable will be used *if already declared*. If it's not declared, an implicit local variable is then created (which again is destroyed upon exiting). If you don't want this to happen, compile with --explicit, which will require every variable to be declared with DIM before use.

This is very counterintuitive:
Code:
SUB test1()
    n = n + 1   ' Declares a local variable n, there's no previous n declared
    PRINT n
END SUB

DIM n as UByte = 3

SUB test2()
    n =  n  + 1   ' Uses n from the global scope because there's one already declard
    PRINT n
END SUB

SUB test3()
    DIM n = 5
    n =  n  + 1   ' Uses n from the local scope because it's declared
    PRINT n
END SUB

test1
test2
test3

So to avoid test1() to implicitly declare a local var, compile with --explicit
Reply


Messages In This Thread
Understanding scope of variables - by georgeo - 03-11-2021, 01:51 PM
RE: Understanding scope of variables - by georgeo - 03-11-2021, 11:13 PM
RE: Understanding scope of variables - by boriel - 03-12-2021, 10:32 PM
RE: Understanding scope of variables - by boriel - 03-12-2021, 10:26 PM
RE: Understanding scope of variables - by georgeo - 03-13-2021, 10:48 AM

Forum Jump:


Users browsing this thread: 2 Guest(s)