SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
テストではまったお話
Perl Beginners#12 @dokechin
自己紹介 @dokechin
• Perl歴2年目
• PerlのWAF Mojoliciousで自作Webアプリケー
ションを作って運用中
• Mishima.pm主催
複数の配列を1つの配列にまとめたい。
ただし、以下のようなルールで
@array1=(1,1,3,8);
@array2=(2,3);
@array3=(5,6);
↓
@array=(1,2,5,1,3,6,3,8);
こんな感じの関数をつくりたい
my @array1=(1,2,3,8);
my @array2=(1,3);
my @array3=(5,6);
my @sorted = my_sort(¥@array1,¥@array2,¥@array3);
my @sorted = my_sort(@array1,@array2,@array3);
とりあえず実装した
package Sort;
use strict;
use warnings;
sub my_sort {
my @sorted;
my $total = 0;
for my $array(@_){
$total = $total + scalar(@$array);
}
until( $total == scalar @sorted){
foreach (@_) {
if (my $item = shift (@$_)){
push @sorted , $item;
}
}
}
return @sorted;
}
テスト1
use strict;
use warnings;
use Test::More;
my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]);
is(@result, (1,1,5,2,3,6,3,8), "sort 3 list");
テスト2
use strict;
Use warnings;
Use Test::More;
my @result =Sort::my_sort ([],[],[]);
is(@result, (), "sort empty list");
# got: '0'
# expected: undef
← scalar @result
← scalar ()
is はスカラーにした結果値を比較して
いる
Test::Moreのソース
sub is ($$;$) {
my $tb = Test::More->builder;
return $tb->is_eq(@_);
}
プロトタイプ この場合、引数をスカ
ラー評価してから処理する
Test::Moreのis はリストコンテキスト
の値のテストはできない
待てよ、テスト1に戻る
テスト1
use strict;
use warnings;
use Test::More;
my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]);
is(@result, (1,1,5,2,3,6,3,8), "sort 3 list");
scalar @result →配列の要素数 8
Scalar(1,1,5,2,3,6,3,8) →リストの末尾の要素 8
書き直し
is_deeply
テスト1
use strict;
use warnings;
use Test::More;
my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]);
is_deeply(¥@result, [1,1,5,2,3,6,3,8], "sort 3 list");
テスト2
use strict;
Use warnings;
Use Test::More;
my @result =Sort::my_sort ([],[],[]);
is_deeply(¥@result, [], "sort empty list");
tokuhiromさんからのコメント
`if (my $hit = shift (@$_)){` を `if (defined(my
$hit = shift (@$_))){` にしないと、0がはいると
無限ループになりますね。
tsucchiさんからのコメント
List::MoreUtils のzip(mesh)も近いけど、詰めて
くれないからちょっと違うか...(undef がデータと
して入ってこないなら grep で undef 除けば多分
所望の動作になりますが...) my @result = grep
{ defined $_ } zip @aa, @bb, @cc, @dd;
結論
Listの操作で困ったら、List::Util,List::MoreUtils
のドキュメントを読もう。
イケてないからクールへ。
• ご清聴ありがとうございました
コメントいただいた xtetsujiさん、tokuhiromさ
ん、tsucchiさん、magnolia_k_さん
ありがとうございました。

Weitere ähnliche Inhalte

Andere mochten auch

Mojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったMojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作った
Tetsuya Tatsumi
 

Andere mochten auch (17)

Resumen computacion nube zulema pacheco
Resumen computacion nube   zulema pachecoResumen computacion nube   zulema pacheco
Resumen computacion nube zulema pacheco
 
模拟试卷
模拟试卷模拟试卷
模拟试卷
 
国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案
 
Pollution
PollutionPollution
Pollution
 
webサービス「ふっふはっほ」
webサービス「ふっふはっほ」webサービス「ふっふはっほ」
webサービス「ふっふはっほ」
 
国际结算 课程简介
国际结算 课程简介国际结算 课程简介
国际结算 课程简介
 
Lingua::EN::Fathom
Lingua::EN::FathomLingua::EN::Fathom
Lingua::EN::Fathom
 
国际贸易(课程简介)
国际贸易(课程简介)国际贸易(课程简介)
国际贸易(课程简介)
 
Bringing dignity to life
Bringing dignity to lifeBringing dignity to life
Bringing dignity to life
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
焦聪基本信息表
焦聪基本信息表焦聪基本信息表
焦聪基本信息表
 
国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版
 
App revealupを改造して
App revealupを改造してApp revealupを改造して
App revealupを改造して
 
Mojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールMojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツール
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
Mojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったMojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作った
 
英文難易度の低いニュースを集めたWebアプリ twien
英文難易度の低いニュースを集めたWebアプリ  twien英文難易度の低いニュースを集めたWebアプリ  twien
英文難易度の低いニュースを集めたWebアプリ twien
 

Ähnlich wie テストではまったお話 Test::More

関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
guest5f4320
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 

Ähnlich wie テストではまったお話 Test::More (12)

知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented ProgrammingPerl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
 
PHPのタイプヒンティング
PHPのタイプヒンティングPHPのタイプヒンティング
PHPのタイプヒンティング
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

テストではまったお話 Test::More