Subject: Developers of Sympa
List archive
- From: Guillaume Rousse <address@concealed>
- To: address@concealed
- Subject: Re: [sympa-developpers] Working on repository
- Date: Wed, 26 Feb 2014 09:45:32 +0100
Le 25/02/2014 13:21, IKEDA Soji a écrit :
Hi,No, that's not.
On Tue, 25 Feb 2014 11:48:01 +0100
David Verdin <address@concealed> wrote:
Dear all,
Sorry for delayed answer. I had a lot of operational stuff to do recently.
Le 24/02/14 14:29, Guillaume Rousse a écrit :
Le 18/02/2014 04:33, IKEDA Soji a écrit :Definitely!
David, Etienne, Marc, any opinion in this topicMandatory parameter(s) are put on the beginning of argument listWhich introduce yet another style, mixing named and positional
as unnamed values, then optional parameter(s) follow as named
values.
sub foo {
my $a = shift;
my $b = shift;
my %params = @_;
do_something($a, $b, $params{'c'});
}
parameters...
So basically, we have three different style for parameters:
A) positional parameters
sub foo {
my ($a, $b, $c) = @_;
}
foo($a, $b, $c);
B) named parameters
sub foo {
my (%params) = @_;
}
foo(arg1 => $a, arg2 => $b, option => $c);
C) mixed parameters
sub foo {
my ($a, $b, %params) = @_;
}
foo($a, $b, option => $c);
I guess everyone here will agree than enforcing consistent style is
desirable. Can we have a quick poll on prefered style among other
developpers ?
I'm strongly in favor of B, as the most self-describing one. Then A
(simplest), then C.
I'm in favour of B for clarity AND for not having to wonder the
parameters order when calling a sub.
However, I think it is important to test the presence / absence of
expected parameters just after the "my (%params) = @_;" and translate
them into local variables. We could even undef the %params hash just
after converting its values to local variables.
That way, if we had a new key/value to the params hash and try to use it
directly in the code a $hash{$key}, we woul find the b_ug at compile time.
So that could turn to:
B) named parameters
sub foo {
my (%params) = @_;
my $email = $params{'email'};
my $action = $params{'action'};
undef %params;
...
do_something($email); # Would work
do_something($params{'option'}); # Would issue in strict mode
'%params needs to be defined...'
}
foo(email => $a, action => $b, option => $c);
I don't understand what is compared by Guillaume's options.
How about follwoing method call?
$obj->foo( parameters... );
This must not be in case B.
I feel named options preferable, but it may be used for optional
parameters. Consequently, calling style the three of us agree is C,
I believe. B is a special case of C without mandatory arguments.
The main point of named parameters is to get rid of parameters ordering issues first, undescribed parmeters second. Mixing both styles just brings disadvantages of both with added useless complexity.
[..]
However, if Guillaume doesn't mind of "implementation detail",Then you'd better argue about the intent (initialisation of default values), rather than the syntax. Because the exact syntax doesn't matters:
I with to continue using following style:
C-2)
sub foo {
my $a = shift || "default";
my $b = shift;
my %params = @_;
}
foo($a, $b, option => $c);
Though I don't stick to use of "shift", I've also found it often
makes initialization of mandatory args clearer (as example of $a
above).
my $a = $params{a} || 'default';
my (%params) = (
a => 'default',
@_
);
etc...
In addition, this style is bloadly used in code of Sympa. I can'tConsistency is enough reason for me, whatever the exact convention used. Provided we don't need yet another endless thread to find a consensus.
find the reason to change it.
--
Guillaume Rousse
INRIA, Direction des systèmes d'information
Domaine de Voluceau
Rocquencourt - BP 105
78153 Le Chesnay
Tel: 01 39 63 58 31
Attachment:
smime.p7s
Description: Signature cryptographique S/MIME
-
Re: [sympa-developpers] Working on repository
, (continued)
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/05/2014
-
Re: [sympa-developpers] Working on repository,
David Verdin, 02/05/2014
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/06/2014
-
Re: [sympa-developpers] Working on repository,
Guillaume Rousse, 02/10/2014
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/11/2014
-
Re: [sympa-developpers] Working on repository,
Guillaume Rousse, 02/17/2014
- Re: [sympa-developpers] Working on repository, IKEDA Soji, 02/18/2014
- Re: [sympa-developpers] Working on repository, Guillaume Rousse, 02/24/2014
- Re: [sympa-developpers] Working on repository, David Verdin, 02/25/2014
- Re: [sympa-developpers] Working on repository, IKEDA Soji, 02/25/2014
- Re: [sympa-developpers] Working on repository, Guillaume Rousse, 02/26/2014
- Re: [sympa-developpers] Working on repository, Guillaume Rousse, 02/26/2014
- Re: [sympa-developpers] Working on repository, David Verdin, 02/26/2014
- [sympa-developpers] subroutine template was Re: Working on repository, IKEDA Soji, 02/27/2014
-
Re: [sympa-developpers] Working on repository,
Guillaume Rousse, 02/17/2014
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/11/2014
-
Re: [sympa-developpers] Working on repository,
Guillaume Rousse, 02/10/2014
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/06/2014
-
Re: [sympa-developpers] Working on repository,
David Verdin, 02/05/2014
-
Re: [sympa-developpers] Working on repository,
IKEDA Soji, 02/05/2014
Archive powered by MHonArc 2.6.19+.