More Related Content More from azuma satoshi (20) 入れ子構造を分解する7. sub register {
my ( $name, $mail ) = @_;
if ( $name ) {
if ( length $name > 1 ) {
if ( length $name <= 12 ) {
}
else {
die “name is too long”;
}
}
else {
die “name is too short”;
}
}
else {
die “name is required”;
}
if ( $mail ) {
if ( $mail =~ /^.+@.+..+$/ ) {
}
else {
die “specified mail is not legal”;
}
}
else {
die “mail is required”;
}
if ( $name && $mail ) {
print “name: $namenmail: $mailn”;
}
}
12. $mailは
$nameがない旨 メアドとして $mailがメアドでは
を警告し終了 $nameがある ない旨を警告し終了
正しい
$nameが短すぎる $nameが $nameと$mailを
旨を警告し終了 1文字より長い 名前とメアドとして
出力する
$nameが長すぎる $nameが
旨を警告し終了 12文字以内
$mailがない旨 $mailがある
を警告し終了
16. $nameが $nameが短すぎる
1文字~12文字 旨を警告し終了
$mailは $mailがメアドでは
メアドとして ない旨を警告し終了
正しい
$nameと$mailを
名前とメアドとして
出力する
18. sub register {
my ( $name, $mail ) = @_;
if ( length $name > 1 && length $name <= 12 ) {
}
else {
die “name is 1 to 12 characters longer”;
}
if ( $mail =~ /^.+@.+..+$/ ) {
}
else {
die “specified mail is not legal”;
}
print “name: $namenmail: $mailn”;
}
22. sub register {
my ( $name, $mail ) = @_;
unless ( length $name > 1 && length $name <= 12 ) {
die “name is 1 to 12 characters longer”;
}
unless ( $mail =~ /^.+@.+..+$/ ) {
die “specified mail is not legal”;
}
print “name: $namenmail: $mailn”;
}
29. sub validate_name {
my $name = shift;
return length $name > 1 && length $name <= 12 ;
}
sub validate_mail {
my $mail = shift;
return $mail =~ /^.+@.+..+$/;
}
sub register {
my ( $name, $mail ) = @_;
unless ( validate_name( $name ) ) {
die “name is 1 to 12 characters longer”;
}
unless ( validate_mail( $mail ) ) {
die “specified mail is not legal”;
}
print “name: $namenmail: $mailn”;
}
34. sub validate_name {
my $name = shift;
return length $name > 1 && length $name <= 12 ;
}
sub validate_mail {
my $mail = shift;
return $mail =~ /^.+@.+..+$/;
}
sub register {
my ( $name, $mail ) = @_;
die “name is 1 to 12 characters longer” unless validate_name( $name );
die “specified mail is not legal” unless validate_mail( $mail );
print “name: $namenmail: $mailn”;
}
38. sub validate_name {
my $name = shift;
die “name is 1 to 12 characters longer” unless
length $name > 1 && length $name <= 12
;
}
sub validate_mail {
my $mail = shift;
die “specified mail is not legal” unless
$mail =~ /^.+@.+..+$/
;
}
sub register {
my ( $name, $mail ) = @_;
validate_name( $name );
validate_mail( $mail );
print “name: $namenmail: $mailn”;
}
40. sub validate_name {
my $name = shift;
die “name is 1 to 12 characters longer” unless
length $name > 1 && length $name <= 12
;
}
sub validate_mail {
my $mail = shift;
die “specified mail is not legal” unless
$mail =~ /^.+@.+..+$/
;
}
sub validate {
my ( $mail, $name );
validate_name( $name );
validate_mail( $mail );
}
sub register {
my ( $name, $mail ) = @_;
validate( $name, $mail );
print “name: $namenmail: $mailn”;
}
47. sub validate_name {
my $name = shift;
die “name is 1 to 12 characters longer” unless
length $name > 1 && length $name <= 12
;
}
sub validate_mail {
my $mail = shift;
die “specified mail is not legal” unless
$mail =~ /^.+@.+..+$/
;
}
sub validate {
my ( $mail, $name );
validate_name( $name );
validate_mail( $mail );
}
sub register {
my ( $name, $mail ) = @_;
validate( $name, $mail );
insert_to_db( $name, $mail );
}
sub insert_to_db {
print “name: $namenmail: $mailn”;
### ここにDBへの登録ロジックを書いてくれたまえ!
}
49. 何が言いたかったのか
● 関数内の入れ子(ネスト)が深くなったなら、それは
よくない。
●
入れ子の部分を別の関数に切り出そう
– でかい関数1個よりも、小さい関数の組み合わせで。
– 入れ子が3階層になったら、ちょっとヤバ目。
● 人によっては2階層で、という方も居るし、共感できます。
● まとめれるif文はどんどんまとめよう
50. 何が言いたかったのか
● 関数内の行数が長くなってきたら、それはよくな
い。
●
入れ子になって無くても、大抵は別の関数として切り出
せる場所がある。
– 関数内のコードが10行超えたら、個人的にはちょっとよくない
と思い始める。
● でも仕事のコードで10行超えの関数がちょいちょいある。
●
自戒。
51. 何が言いたかったのか
● 関数の処理を、簡単な関数名で表現できないのは
よくない。
●
大体関数内のコードが長い場合に起こる。
– どこか切り出すべき処理があるはず。
52. 何が言いたかったのか
● 小さい関数に切り出すことで、仕様変更に強くな
れ!
●
使いまわしがきくようになる
● テストもしやすい