Skip to content

Proposal: default value for optional dummy arguments #9

@szaghi

Description

@szaghi

Allow the definition of default value for optional dummy arguments:

subroutine foo(bar, baz=.false.) ! inline default value definition
integer, intent(inout)        :: bar
logical, intent(in), optional :: baz

if (baz) then ! using baz even when it is not passed is good because it has a default value
   bar = bar + 1
else
   bar = bar - 1
endif
end subroutine foo 

The default value is clearly indicated into the procedure signature. I presume that the default value should follow all the rules that apply to variable initialization. The builtin present will remain untouched as well the other optional related behaviors except that baz is usable even in the case it is not passed when a default value is assigned.

Rationale

Without the ability to define a default value to optional dummy arguments, we have to mimic it by local variables, e.g.

subroutine foo(bar, baz)
integer, intent(inout)        :: bar
logical, intent(in), optional :: baz
logical                       :: baz_local

baz_local = .false.
if (present(baz)) baz_local = baz
if (baz_local) then
   bar = bar + 1
else
   bar = bar - 1
endif
end subroutine foo

that is more verbose and error prone, especially when the optional dummies are many.

Other languages

Python has such a feature.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions