Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: default value for optional dummy arguments #9

Open
szaghi opened this issue Jul 12, 2017 · 5 comments
Open

Proposal: default value for optional dummy arguments #9

szaghi opened this issue Jul 12, 2017 · 5 comments

Comments

@szaghi
Copy link
Member

szaghi commented Jul 12, 2017

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.

@jacobwilliams
Copy link
Member

It should also work for intent(out) variables.

And what about putting it in-line with the variable declaration?

subroutine foo(bar, baz)
integer, intent(inout)        :: bar
logical, intent(in), optional :: baz=.false.

I like this better, but does it conflict with the stupid "implicit save" thing?

@szaghi
Copy link
Member Author

szaghi commented Jul 12, 2017

@jacobwilliams

Good point, I forget about the implicit save rule... maybe it has not any conflicts, the default value looks like a saved value 😄

Anyhow I am not expert of Standard rules subtles...

@jacobwilliams
Copy link
Member

I hate implicit save. It is one of the stupidest "features" in the language (I've only ever seen it used by accident). The sooner it is removed the better (but of course, that will never happen).

@szaghi
Copy link
Member Author

szaghi commented Jul 12, 2017

@jacobwilliams

Me too, in general I hate implicit rules that are not intuitive such this one.

@zbeekman
Copy link
Member

I like this better, but does it conflict with the stupid "implicit save" thing?

Yes, this will def have to be implicit save to be consistent with the rest of the language. I would love meet the jerk who introduced the implicit save feature to the language.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants