Functions can be written using several types of syntax
function name()
integer name
name = 42
end function
integer function name()
name = 42
end function
function name() result(res)
integer res
res = 42
end function
Functions return values through a function result. Unless the function statement has a result clause the function's result has the same name as the function. With result the function result is that given by the result. In each of the first two examples above the function result is given by name; in the third by res.
The function result must be defined during execution of the function.
Functions allow to use some special prefixes.
Pure function means that this function has no side effect:
pure real function square(x)
real, intent(in) :: x
square = x * x
end function
Elemental function is defined as scalar operator but it can be invoked with array as actual argument in which case the function will be applied element-wise. Unless the impure prefix (introduced in Fortran 2008) is specified an elemental function is also a pure function.
elemental real function square(x)
real, intent(in) :: x
square = x * x
end function