/ lang / methoddecl
Method Declaration

## Procedures

Syntax

    [ STATIC ] { PUBLIC | PRIVATE } { PROCEDURE | SUB }
      Identifier
      (
        [ [ BYREF ] Parameter AS Datatype [ , ... ] ] [ , ]
        [ OPTIONAL [ BYREF ] Optional Parameter AS Datatype [ , ... ] ] [ , ] [ ... ]
      )
      ...
    END

This declares a procedure, i.e. a method that returns nothing.

The END keyword indicates the end of the procedure.

## Functions

Syntax

    [ STATIC ] { PUBLIC | PRIVATE } { FUNCTION | PROCEDURE | SUB }
      Identifier
      (
        [ [ BYREF ] Parameter AS Datatype [ , ... ] ] [ , ]
        [ OPTIONAL [ BYREF ] Optional Parameter AS Datatype [ , ... ] ] [ , ] [ ... ]
      )
      AS Datatype
      ...
    END

This declares a function, i.e. a method that returns a value.

The END keyword indicates the end of the function.

The datatype of the return value must be specified.

| Of course, these declarations must be written on a unique line. They are separated there so that it is readable.

Use the RETURN keyword to terminate the function and pass the return value back to the caller.

### Examples

    FUNCTION Calc(fX AS Float) AS Float
      RETURN Sin(fX) * Exp(- fX)
    END

    PUBLIC SUB Button1_Click()
      PRINT Calc(0), Calc(0.5), Calc(1)
    END
    <hr>0	0.290786288213	0.309559875653

## Method Access

The method is accessible everywhere in the class it is declared.

- If the `PUBLIC` keyword is specified, it is also accessible to the other classes having a reference to an object of this class.

- If the `STATIC` keyword is specified, the method can only access to the static variables of the class.

## Method Arguments

All method arguments are separated by commas.

- If the `OPTIONAL` keyword is specified, all parameters after the keywords are optional. You can specify a default value after the parameter declaration by using the equal sign.

- If the parameters list end with `...`, then the method can take extra arguments. Every additional argument passed to the method is accessible with the Param class.

    STATIC PUBLIC PROCEDURE Main()
    ...
    PUBLIC FUNCTION Calc(fA AS Float, fB AS Float) AS Float
    ...
    PRIVATE SUB DoIt(sCommand AS String, OPTIONAL bSaveIt AS Boolean = TRUE)
    ...
    STATIC PRIVATE FUNCTION MyPrintf(sFormat AS String, ...) AS Integer

3.0 |  | ## Arguments Passed By Reference When the `BYREF` keyword is specified, the argument must be an assignment expression that will be modified by the called function.
| The BYREF keyword must be specified when calling the method. At the moment, the use of BYREF in the method declaration is optional and purely descriptive. This may change in the future, as that breaks the privacy of the called method!
    SUB ConvPixelToCentimeter(BYREF Value as Float, Dpi AS Integer)

      Value = Value / Dpi * 2.54

    END

    PUBLIC SUB Main()

      DIM Size AS Float

      Size = 256
      ConvPixelToCentimeter(BYREF Size, 96)
      PRINT Size

    END
    <hr>6.773333333333

### See also

Variable Declaration