p5-Lodash!
by
Kenta Kobayashi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
p5-Lodash! 吉祥寺.pm14 / LT @k y8
Slide 2
Slide 2 text
_.defaults({ 'a': 1 }, { 'a': 3, 'b': 2 }); // → { 'a': 1, 'b': 2 } _.partition([1, 2, 3, 4], n => n % 2); // → [[1, 3], [2, 4]]
Slide 3
Slide 3 text
p5-Lodash Perl5 port of Lodash.js 同じ挙動を目指してる ( ひとまず) 手書き Inline module に頼るでなく、 真正面から モチベー ション JSer に楽してもらいたい CPAN に便利なモジュー ルがたくさんあるけ ど、 知らないが為に損することもある
Slide 4
Slide 4 text
use Lodash; _->defaults({ a => 1 }, { a => 3, b => 2 }); # → { a => 1, b => 2 } _->partition([1, 2, 3, 4], sub ($n) { $n % 2 }); # → [[1, 3], [2, 4]]
Slide 5
Slide 5 text
use Lodash qw(_defaults _partition); _defaults({ a => 1 }, { a => 3, b => 2 }); # → { a => 1, b => 2 } _partition([1, 2, 3, 4], sub ($n) { $n % 2 }); # → [[1, 3], [2, 4]]
Slide 6
Slide 6 text
use Lodash -core; # => export core functions
Slide 7
Slide 7 text
_.add
Slide 8
Slide 8 text
6 + 4
Slide 9
Slide 9 text
❯ perl -e 'print 6 + 4' 10 ❯ node -e 'console.log(6+4)' 10
Slide 10
Slide 10 text
'6' + '4'
Slide 11
Slide 11 text
❯ perl -e "print '6' + '4'" 10 ❯ node -e "console.log('6'+'4')" 64
Slide 12
Slide 12 text
_.add(6, 4) # => 10 _.add('6', '4') # => '64'
Slide 13
Slide 13 text
❯ perl -MDevel::Peek -e "Dump 6" SV = IV(0x7fdf7d011370) at 0x7fdf7d011380 REFCNT = 1 FLAGS = (IOK,READONLY,PROTECT,pIOK) IV = 6
Slide 14
Slide 14 text
❯ perl -MDevel::Peek -e "Dump '6'" SV = PV(0x7fb986803e80) at 0x7fb98700a998 REFCNT = 1 FLAGS = (POK,IsCOW,READONLY,PROTECT,pPOK) PV = 0x7fb986500b70 "6"\0 CUR = 1 LEN = 10 COW_REFCNT = 0
Slide 15
Slide 15 text
どちらも Scalar Value だけど、 中身は違う 一方は、 Integer Value もう一方は Pointer Value 6 と '6' の中身の違いを浮き出せれば、 区別できる
Slide 16
Slide 16 text
use B;
Slide 17
Slide 17 text
use Test::More; use B; ok B::svref_2object(\6)->FLAGS & B::SVp_IOK; ok not B::svref_2object(\'6')->FLAGS & B::SVp_IOK; done_testing;
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
XOR operator
Slide 20
Slide 20 text
use Test::More; ok((6^6) eq '0'); ok not (('6'^'6') eq '0'); done_testing;
Slide 21
Slide 21 text
use Test::More; # NUL ok not ((6^6) eq "\0"); ok(('6'^'6') eq "\0"); done_testing;
Slide 22
Slide 22 text
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value) eq '0' }
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
!!1
Slide 25
Slide 25 text
is_number(!!1^!!1) # => ok ❯ perl -MDevel::Peek -e 'Dump !!1^!!1' SV = IV(0x7f93e7015370) at 0x7f93e7015380 REFCNT = 1 FLAGS = (PADTMP,IOK,READONLY,PROTECT,pIOK) IV = 0
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
❯ perl -MDevel::Peek -e 'Dump !!1' SV = PVNV(0x7ff3a4001010) at 0x10d9b7b58 REFCNT = 2147483644 FLAGS = (IOK,NOK,POK,READONLY,PROTECT,pIOK,pNOK,pPOK) IV = 1 NV = 1 PV = 0x10d99cd43 "1" CUR = 1 LEN = 0
Slide 28
Slide 28 text
PVNV!
Slide 29
Slide 29 text
PVNV dual value Scalar::Util::isdual
Slide 30
Slide 30 text
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value) eq '0' && !isdual($value) }
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
雑まとめ p5-Lodash の話から Perl の話に脱線 SV は、 多態 コンテキストで、 値が変わる 見ようと思えば、 中身も見れる Devel::Peek B.pm etc
Slide 33
Slide 33 text
進捗
Slide 34
Slide 34 text
7/256
Slide 35
Slide 35 text
やっていき
Slide 36
Slide 36 text
Gotanda.pm #18 6/11( 月) 株式会社メルカリ 六本木! スピー カー @kazeburo 「System Programming and Perl」
Slide 37
Slide 37 text
ぱー るもんがー ごたぴー きちぴー ぜんぶがいねん ( 字余り)