Upgrade to Pro — share decks privately, control downloads, hide ads and more …

怠惰なRubyistへの道 - Enumerator::Lazy の使いかた

怠惰なRubyistへの道 - Enumerator::Lazy の使いかた

みなとRuby会議01での発表「怠惰なRubyistへの道 - Enumerator::Lazy の使いかた」の発表資料を配布用に編集したものです。

nagachika

June 02, 2012
Tweet

More Decks by nagachika

Other Decks in Technology

Transcript

  1. ଵଦͳ3VCZJTU΁ͷಓ
    &OVNFSBUPS-B[Zͷ࢖͍͔ͨ
    $IJLBOBHB5PNPZVLJ
    !OBHBDIJLB

    :PLPIBNBSC
    1

    View Slide

  2. "HFOEB
    &OVNFSBCMF
    &OVNFSBUPS
    &OVNFSBUPS-B[Z
    2

    View Slide

  3. 8"3/*/(
    ࠓ೔ͷ࿩͸
    3VCZͷ
    ৽ػೳʹ͍ͭͯ
    3

    View Slide

  4. 3VCZ
    ೥ϦϦʔε༧ఆ

    View Slide

  5. 3VCZ
    ະདྷͷ࿩
    5

    View Slide

  6. JTJO
    EFWFMPQNFOU
    ˞஫˞
    ࢓༷͸։ൃதͷ΋ͷͰ͋Γ
    ϦϦʔε൛Ͱ͸มߋ͞ΕΔ৔߹͕͋Γ·͢
    6

    View Slide

  7. *OTUBMM3VCZ
    ະདྷΛखதʹ
    SWN SCFOWΛ࢖͍ͬͯΕ͹
    SWNJOTUBMMSVCZIFBE
    SCFOWJOTUBMMEFWFM
    7

    View Slide

  8. 3VCZGPS
    8JOEPXT
    8

    View Slide

  9. 4FMG*OUSPEVDUJPO
    UXJUUFSJE!OBHBDIJLB
    SVCZUSVOLDIBOHFT
    IUUQEIBUFOBOFKQOBHBDIJLB

    $3VCZDPNNJUUFS
    :PLPIBNBSCˠ෱Ԭԕ੐த
    4PVOESC SVCZDPSFBVEJP SVCZQVSFEBUB

    9

    View Slide

  10. &OVNFSBUPS-B[Z
    10

    View Slide

  11. &OVNFSBUPS-B[Z
    ͷલʹ
    11

    View Slide

  12. &OVNFSBCMF
    12

    View Slide

  13. &OVNFSBCMF
    ΋ͪΖΜ࢖ͬͯ·͢ΑͶ
    13

    View Slide

  14. "SSBZ )BTI *0
    "SSBZ΍)BTI *0͸
    &OVNFSBCMFΛ
    JODMVEF͍ͯ͠Δ
    14

    View Slide

  15. &OVNFSBCMF
    ʲܗ༰ࢺʳ਺͑ΒΕΔ8PSE/FU ӳ࿨


    ՄࢉʀՄ෇൪෼໺ઐ໳ޠࣙॻ>
    $BQBCMFPGCFJOHFOVNFSBUFE
    DPVOUBCMF<8JLJUJPOBSZ>
    15

    View Slide

  16. &OVNFSBCMF
    ʮFBDIϝιουΛݺͿͱɺԿ͔͕
    ॱʹ /ճ
    ZJFMEͰ౉͞ΕΔʯ
    ͱ͍͏ϧʔϧ /

    16

    View Slide

  17. &OVNFSBCMF
    FBDIϝιου͕ఆٛ͞Εͯ
    ͍ΔΫϥεʹJODMVEFͯ͠
    ࢖͏ .JYJO

    17

    View Slide

  18. &OVNFSBCMF
    FBDI͚ͩ༻ҙ͓͚ͯ͠͹
    NBQ TFMFDU SFKFDU HSFQ FUD
    ͱ͍ͬͨϝιου͕࢖͑ΔΑ͏ʹͳΔ
    ͜ΕΒͷϝιου͕FBDIΛ࢖ͬͯ
    ࣮૷͞Ε͍ͯΔ

    18

    View Slide

  19. "O&YBNQMF
    DMBTT"
    JODMVEF&OVNFSBCMF
    EFGFBDI
    ZJFME
    ZJFME
    ZJFME
    FOE
    FOE
    "OFXNBQ\]J]J^ >
    19

    View Slide

  20. ͜͜·Ͱͷ·ͱΊ
    &OVNFSBCMF͸FBDIϝιουΛ࢖ͬͯ
    ଟ࠼ͳϝιουΛ௥Ճ͢Δ
    ͳʹ͕ʮ਺্͑͛ΒΕΔʯͷ͔͸
    FBDIϝιου͕ͲͷΑ͏ʹ
    ZJFMEΛݺͼग़͔͢Ͱܾ·Δ
    20

    View Slide

  21. &OVNFSBUPS
    ࢖ͬͯ·͢
    21

    View Slide

  22. &OVNFSBUPS
    FBDIʹ౉͢ϒϩοΫΛอཹͨ͠
    ঢ়ଶͰΦϒδΣΫτͱͯ࣋ͪ͠ճ͢
    22

    View Slide

  23. [email protected] [email protected]
    &OVNFSBUPSͷ࡞Γ͔ͨ
    w &OVNFSBUPSOFX PCK NFUIPEFBDI BSHT

    w [email protected] NFUIPEFBDI BSHT

    w [email protected] NFUIPEFBDI BSHT

    w &OVNFSBUPSOFX\]Z]^
    ˢ͜Ε͚ͩͪΐͬͱಛघ
    23

    View Slide

  24. [email protected]
    FBDIҎ֎ͷ೚ҙͷϝιουͷݺͼग़͠Λ
    &OVNFSBUPSʹͰ͖Δ
    ࣮͸&OVNFSBCMFͰͳͯ͘΋͍͍

    [email protected]@GPS [email protected]

    όΠτ͝ͱʹZJFME
    [email protected]@GPS [email protected]

    ߦ͝ͱʹZJFME
    24

    View Slide

  25. &OVNFSBUPSOFX\]Z]^
    F&OVNFSBUPSOFX\]Z]
    Z
    ZGPP
    Z
    ^
    ϒϩοΫ͕FBDIͷ୅ΘΓɻ
    ϒϩοΫύϥϝʔλZʹ͢Δͱ
    ZJFME͢Δ͜ͱʹͳΔɻ
    25

    View Slide

  26. &OVNFSBUPSOFX\]Z]^
    DMBTT"
    EFGFBDI
    ZJFME
    ZJFMECBS
    ZJFME
    FOE
    FOE
    "[email protected]
    ͱಉ͡
    26

    View Slide

  27. &OVNFSBUPSBT
    &YUFSOBM*UFSBUPS
    ֎෦ΠςϨʔλͱͯ͠࢖͑Δ
    F
    [email protected]
    FOFYUFBDI͕ZJFME͢Δ஋͕
    FOFYUॱʹOFYUͰऔΓग़ͤΔ
    FOFYU
    FOFYU
    4UPQ*UFSBUJPOJUFSBUJPOSFBDIFEBOFOE
    27

    View Slide

  28. .FUIPE$IBJO
    NBQ TFMFDUͳͲҰ෦ͷϝιου͸ϒϩο
    ΫΛলུ͢Δͱ&OVNFSBUPSΛฦ͢ͷͰ
    ෳ਺ͷϝιουΛ૊Έ߹Θͤͯ࢖͏
    [email protected]\]W J]^
    28

    View Slide

  29. .FUIPE$IBJO
    B C D E>[email protected]]TZN J]
    JFWFO TZNJ
    FOE
    B D > &OVNFSBUPS
    ಠࣗͷϝιου
    29

    View Slide

  30. View Slide

  31. 4FDSFU4UPSZPG
    &OVNFSBUPS
    &OVNFSBUPS͸
    [email protected]ͷҝʹ
    ੜ·Εͨ
    ͱ͍͏ͷ͸ӕͰ͕͢
    ओͳ༻్͸[email protected]ͷ
    ͨΊͷΑ͏ͳؾ͕͠·͢
    31

    View Slide

  32. ͜͜·Ͱͷ·ͱΊ
    w&OVNFSBUPS
    [email protected] [email protected]
    w֎෦ΠςϨʔλԽ
    w.FUIPE$IBJO
    w
    32

    View Slide

  33. &OVNFSBUPS-B[Z
    ͷ৽ػೳ
    33

    View Slide

  34. &OVNFSBUPS-B[Z
    &OVNFSBUPSͷαϒΫϥε
    34

    View Slide

  35. &OVNFSBCMFMB[Z
    &OVNFSBUPS-B[Zͷ࡞Γ͔ͨ
    &OVNFSBCMFMB[ZΛݺͿ

    MB[Z
    &OVNFSBUPS-B[Z
    35

    View Slide

  36. &OVNFSBUPS-B[Z
    -B[ZͷNBQ TFMFDU [JQͳͲҰ෦ͷϝιο
    υ͕͞Βʹ-B[ZΛฦ͢

    MB[ZNBQ\]J]J^
    &OVNFSBUPS-B[Z
    &OVNFSBUPS-B[ZNBQ
    36

    View Slide

  37. &OVNFSBUPS-B[Z
    > Enumerator::Lazy.instance_methods(false)
    map collect flat_map
    collect_concat select find_all
    reject grep zip
    take take_while drop
    drop_wihle cycle
    lazy force
    [ruby 2.0.0dev (2012-05-30 trunk 35844)]
    37

    View Slide

  38. GPSDF
    &OVNSBUPS-B[ZGPSDF
    [email protected]ͷBMJBT
    ஗Ԇ͞Ε͍ͯΔΠςϨʔλͷධՁΛ࣮ߦ
    38

    View Slide

  39. "-B[Z%FNP
    >> l = (0..5).lazy
    =>
    >> l_map = l.map{|i| p i; i * 2 }
    => :map>
    # ͜ͷ࣌఺Ͱ͸·ͩϒϩοΫͷ಺༰͸࣮ߦ͞Ε͍ͯͳ͍!
    >> l_map.force
    0
    1
    2
    3
    4
    5
    => [0, 2, 4, 6, 8, 10]
    # force ΛݺͿͱ࣮ߦ͞ΕΔ
    39

    View Slide

  40. &OVNFSBUPSͱͷҧ͍
    .FUIPE$IBJOͷ࢖͍͔͕ͨΑΓڧྗʹ
    தؒσʔλͷ཈੍
    40

    View Slide

  41. 1JUGBMMPG
    &OVNFSBUPS

    NBQ TFMFDUͷΑ͏ʹϒϩοΫͷ໭Γ஋
    Λར༻͢ΔϝιουΛෳ਺ܨ͛Δ͜ͱ͕Ͱ
    ͖ͳ͍ ͯ͠΋ҙຯ͕ͳ͘ͳΔ


    NBQTFMFDU\]J]J^
    >
    ˢNBQͷҙຯ͕ͳ͘ͳ͍ͬͯΔ
    41

    View Slide

  42. 5SVF.FUIPE$IBJO
    NBQ΍TFMFDUͱ͍ͬͨϝιου΋͍ͭ͘Ͱ΋
    .FUIPE$IBJOͰ͖Δɻ
    ͦ͏ɺ-B[ZͳΒͶɻ
    ͔Βͷ͏ͪ೚ҙͷܻʹΛؚΉ਺Λฦ͢

    MB[ZNBQ [email protected]
    TFMFDU\]T]
    _T
    ^GPSDF
    42

    View Slide

  43. 1JUGBMMPG
    &OVNFSBUPS

    NBQ TFMFDUͷΑ͏ʹϒϩοΫͷ໭Γ஋
    Λར༻͢ΔϝιουΛ֎෦ΠςϨʔλԽ͠
    ͯ΋ҙຯ͕ͳ͍
    F
    TFMFDU
    FOFYU
    FOFYU
    FOFYU
    FOFYU
    ˢTFMFDUͷҙຯ͕ͳ͘ͳ͍ͬͯΔ
    43

    View Slide

  44. 5SVF&YUFSOBM
    *UFSBUPS
    NBQͳͲʹϒϩοΫΛ౉ͤΔͷͰ
    ద༻ͨ݁͠ՌΛॱʹऔΓग़ͤΔ
    M
    MB[ZTFMFDU\]J]JFWFO ^
    MOFYU
    MOFYU
    MOFYU
    MOFYU4UPQ*UFSBUJPOJUFSBUJPOSFBDIFEBOFOE
    44

    View Slide

  45. &GGJDJFOU.FNPSZ
    6TBHF
    -B[Z͸ZJFMEຖʹ.FUIPE$IBJOͷ
    ࠷ޙ·Ͱॲཧ͞ΕΔ
    45

    View Slide

  46. &OVNFSBCMFWFSTJPO
    [email protected]\^TFMFDU\^
    46

    View Slide

  47. &OVNFSBCMFWFSTJPO
    [email protected]\^TFMFDU\^
    NBQ
    47

    View Slide

  48. &OVNFSBCMFWFSTJPO
    [email protected]\^TFMFDU\^
    NBQ TFMFDU
    48

    View Slide

  49. &OVNFSBCMFWFSTJPO
    [email protected]\^TFMFDU\^
    NBQ TFMFDU
    ($͞ΕΔ
    49

    View Slide

  50. &OVNFSBCMFWFSTJPO
    [email protected]\^TFMFDU\^
    NBQ TFMFDU
    ($͞ΕΔ
    map ݁ՌͷͨΊ
    large_array ͱಉ͘͡Β͍ͷ
    தؒσʔλ͕ඞཁ
    50

    View Slide

  51. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    51

    View Slide

  52. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    52

    View Slide

  53. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    ($`FE
    53

    View Slide

  54. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    54

    View Slide

  55. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    ($`FE
    55

    View Slide

  56. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    56

    View Slide

  57. -B[ZWFSTJPO
    [email protected][ZNBQ\^TFMFDU\^GPSDF
    தؒσʔλ͕ෆཁ
    57

    View Slide

  58. -B[Z$IBJO%FNP
    >> (0..4).lazy.select{|i|
    p “select:#{i}”; i.event?
    }.map{|i| p “map:#{i}”; i * 2 }.force
    “select:0”
    “map:0”
    “select:1”
    “select:2”
    “map:2”
    “select:3”
    “select:4”
    “map:4”
    => [0, 4, 8]
    58

    View Slide

  59. -B[ZXJUI*0

    TUEJO͔ΒۭߦΛಡΉ·Ͱͷ֤ߦͷ
    จࣈ਺ͷ഑ྻΛฦ͢
    TUEJOMB[[email protected]\]M]
    MDIPNQFNQUZ
    ^NBQ\]M]MDIPNQTJ[F^
    59

    View Slide

  60. -B[ZXJUI*0
    &OVNFSBCMFͩͱۭߦ·ͰઌʹಡΜͰ͠·͏ɻ
    -B[ZͳΒߦಡΉͨͼʹ[email protected]ͷ
    ϒϩοΫ͕࣮ߦ͞ΕΔ
    ˠஞ࣍ॲཧͰ͖Δ
    60

    View Slide

  61. -B[Z-JTU
    ແݶʹଓ͘ཁૉΛѻ͑Δ
    MJTU 'MPBU*/'*/*5:

    MJTUNBQ\]J]J^UBLF

    ฦͬͯ͜ͳ͍
    MJTUMB[ZNBQ\]J]J^UBLF
    GPSDF
    >
    61

    View Slide

  62. 1JUGBMMPG-B[Z
    ϝϞԽ͞Εͳ͍
    GPSDFΛճݺͿͱ΋͏Ұ౓FBDI͕
    ݺ͹ΕΔ

    *0ͳͲ෭࡞༻ͷ͋ΔFBDIͩͱ݁Ռ͕
    มԽ͢Δ͚Ͳ͍͍ͷ͔ͳ͊ ͍͍͔΋

    [email protected]ͷΑ͏ʹFBDIͷ͔ΘΓʹͳ
    ΔϝιουΛࢦఆͰ͖ͳ͍
    62

    View Slide

  63. -B[ZBTB#FUUFS
    &OVNFSBUPS
    -B[Z͸
    &OVNFSBUPSͷ
    ਖ਼౷ਐԽ൛
    63

    View Slide

  64. )BQQZ-B[Z
    1SPHSBNNJOH
    64

    View Slide

  65. 0OF.PSF5IJOH
    IUUQTHJUIVCDPNOBHBDIJLBMB[[email protected]
    65

    View Slide