第60回 チーム開発におけるソースコード使い回しによる悲惨な例

チームで開発している場合に、ソースコードを再利用するのはよいことであろう。
だが今回ご紹介するのはの、起こってはならない最悪な例のひとつと言える。

次のような関数があったとしよう。

sub say {
  my $c = shift;
  print "$c" . "\n";
}

これは、

say('hoge');

で呼び出せる。


このソースがあったとき、
なにぃーー!!、名前付き引数で渡せないだとぉおおおおおおお!と憤慨したとしよう。
しかし、say はもう無事に動いてるのだし、これを利用しない手はない、そこで、

sub say_with_name {
  my $c = shift;
  say ($c->{'name'});     # ここで委譲
}

こういうソースが書ける。
こうすれば、

say_with_name ({name=>'hoge'});

で呼び出せる。

しかし、名前付きで呼び出すのなんて、ハッシュへのリファレンスを理解してないと使えないではないか!!!いったい君はなにを考えているんだ。という人がいたとして、次のように書き換える。

sub say_no_name {
  my $c = shift;
  say_with_name({ name => $c });   # ここで委譲
}

こうすれば、

say_no_name('hoge');

と普通に呼び出せる。

こうして、ソースの難読化は進んでいくんだ。