FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
君のソースから わずらわしい if elsif を消す方法
Perl では if else の連続は、 if elsif になるわけですが、
次のようなソースみたことありません?

use strict;

my $test = 1;

if($test==1){
 print "1" . "\n";
}
elsif($test==2){
 print "2" . "\n";
}
elsif($test==3){
 print "3" . "\n";
}

いやですよねぇ。こういうソース読みづらいですよね。

今日は、あなたのソースから、そんなわずらわしい if文を削除する方法を紹介します。

はじめは簡単なところから。

次のif文は......
use strict;

my $test = 'tanaka';

if($test eq 'nakanishi'){
  print 'こんにちは中西さん' . "\n";
}
elsif($test eq 'tanaka'){
  print 'こんにちは田中さん' . "\n";
}
elsif($test eq 'suzuki'){
  print 'こんにちは鈴木さん' . "\n";
}

↓ こうなる

use strict;

my %hash=();

$hash{'nakanishi'} = sub{ print 'こんにちは中西さん' . "\n" };
$hash{'tanaka'}    = sub{ print 'こんにちは田中さん' . "\n" };
$hash{'suzuki'}    = sub{ print 'こんにちは鈴木さん' . "\n" };

my $test = 'tanaka';

$hash{$test}->();
こんな感じで、ハッシュを使うのです。こういうハッシュの使い方を、
ハッシュをテーブルに見立てて、ハッシュテーブルと呼んだりします。


さて、Perl にはswitch文がありませんね。
これも、ハッシュテーブルで解決してみましょう。
あ、でもその前にif文の方から見てみましょう。
use strict;

my $test = 'tanaka';

my $name;

if($test eq 'nakanishi'){
  $name = '中西';
}
elsif($test eq 'tanaka'){
  $name = '田中';
}
elsif($test eq 'suzuki'){
  $name = '鈴木';
}

print $name . "\n";

ハッシュテーブルを使えば.....
↓こうなる
use strict;

my $test = 'tanaka';

my $name = ({
             'nakanishi' => '中西',
             'tanaka'    => '田中',
             'suzuki'    => '鈴木'
           })->{$test};

print $name . "\n";

どうですか、ずいぶんすっきりしませんか?
条件が増えれば増えるほど、ハッシュテーブル 素敵☆ っとなります。



お次は、ちょっとむずかしいですが、載せておきます。
use strict;

my $test = 'こんにちわ';
my $c    = {};

if($test =~ /おはよう/){
 print '朝だよ' . "\n";
 push @{$c->{'asa'}}, '朝';
}
elsif($test =~ /こんにちわ/){
 print '昼だよ' . "\n";
 push @{$c->{'hiru'}}, '昼';
}
elsif($test =~ /こんばんわ/){
 print '夜だよ' . "\n";
 push @{$c->{'yoru'}}, '夜';
}

↓こうなる

use strict;

my $test = 'こんにちわ';
my $c    = {};

for(
    ['おはよう'  , '朝だよ' . "\n", 'asa',  '朝'],
    ['こんにちわ', '昼だよ' . "\n", 'hiru', '昼'],
    ['こんばんわ', '夜だよ' . "\n", 'yoru', '夜']
){
   if($test =~ /$_->[0]/){
     print $_->[1];
     push @{$c->{$_->[2]}}, $_->[3];
     last;
   }
}

スポンサーサイト
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。