Swiftは何故か郵便屋さんを採用している話です #iOSDCRC
iOSDC 2017 Reject Conference day1༣ศ͞Μͷԋࢉࢠ@S_Shimotori
View Slide
ͩΕ• @S_Shimotori / @S_Shimotori_pub• ͭΒֶ͍ੜ• iOSDCؔ3
Custom Operators
ԋࢉࢠΛࣗ࡞ʂͨͷ͍͠ʂ• xmartlabs/Eureka• ϑΥʔϜϏϧμʔ• +++ͰSectionΛՃ͢ΔͳͲ• thoughtbot/Runes• HaskellͰݟͨΑ͏ͳԋࢉࢠ͕͑ΔΑ͏ʹͳΔ
ͲΜͳԋࢉࢠ͕࡞ΕΔͷ͔ʁ
͜ΕΛݟ͓͚ͯᘳͰ͢ʂ
ͳΜͱͳʙ͘๏ଇ͕͋Δʂ
๏ଇͦͷ1
ͦͷ1: ͑ͦ͏ͳASCIIจࣈ͑Δ• ݟͨ͜ͱ͋ΔͷͰ΄΅શͯ• ڍ͛ΒΕ͍ͯͳ͍จࣈΛݟΕೲಘ͔ʁ• ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹෆՄ• ɹ dot operatorͰ༻Մl 4USJOH-JUFSBMͰ༻b LFZXPSEͷઌ಄Ͱ༻ JGͳͲ JNQMJDJUOBNFEQBSBNFUFSTͰ༻ ͳͲ\^ UVQMFɼGVODUJPOͳͲͰ༻<> BSSBZMJUFSBMͳͲͰ༻ ܕͷݺͼग़͠ɼ࿈ଓ͢ΔPQFSBUPSͷׂͳͲͰ༻ ۠Γͱͯ͠༻! BUUSJCVUFͰ༻ !BWBJMBCMFͳͲa Τεέʔϓ,FZ1BUI&YQSFTTJPOͰ༻@ XJMEDBSEQBUUFSOͰ༻A ༧ޠΛJEFOUJpFSʹ༻͍Δ࣌ʹ༻
๏ଇͦͷ2
ͦͷ2: identifierͰ͑Δจࣈجຊతʹ͑ͳ͍• identifierͱoperatorผ• ઐ༻ͷΤϥʔ͕ଘࡏ͢Δ•• ͪΖΜΞϧϑΝϕοτࣈ༻ෆՄ• ༻ෆՄ·Ί͖ͪ͠: ͜ͷΤϥʔจ۟ʮidentifier_when_expecting_operatorʯͷ໊Ͱ͔ͬ͠ΓSwiftʹ࣮͞Ε͍ͯ·͢https://github.com/apple/swift/blob/bf42def404abcc9239cf7856475da2c80b86cc70/include/swift/AST/DiagnosticsParse.def#L421
❌U+3008-U+3020, U+3030ൣғμϒͬͯΔ͡ΌΜʁU+3021-U+302Fɹ͕·Ί͖ͪ͠: U+3021-U+3029ોभ߸ᛰͱ͍͏ࣈɼU+302A-U+302Fͱ͔ූͱ͔ݺΕΔͷɽཁதࠃޠɽͱ͍͏͔U+3000-U+303Fࣗମ͕CJK Symbols and Punctuationͱ͍͏ΧςΰϦɽ
๏ଇͦͷ3
ͦͷ3: ֶه߸͕݁ߏ͑Δ• ҹͱֶ͔ه߸ͱ͔͕·Δͬͱ͑Δ• mattt/Eulerͱ͍͏ϥΠϒϥϦ(?)͕͋Δ͘Β͍• ɹɹɹɹ͑ͳ͍΄͔ଟਖ਼֬ʹ͍͏ͱɼUnicodeͰʮArrowsʯʮMathematical OperatorsʯʮMiscellaneous TechnicalʯϒϩοΫͱݺΕ͍ͯΔͱ͜Ζ͕·Δ·Δ༻Մೳʹͳ͍ͬͯΔ
๏ଇͦͷ4
ͦͷ4 : ҙ֎ͱׅހϓϥΠϜ͕͑ͪΌ͏• ASCIIจࣈͰμϝͰɼࣅͨจࣈ͕͑Δ͜ͱ͕͋Δ•••• ٯʹ͍͏ͱׅހΫΥʔτͷྨม໊ʹ͑ͳ͍
๏ଇͦͷ5
ͦͷ5: ԋࢉࢠʹ͑Δֆจࣈ͋Δ• ͑ΔͷU+3030·ͰͷจࣈͷҰ෦ͱࢥͬͯOK•U+1F436ɼU+1F42E• ֆจࣈͷଟ͘U+1F000Ҏ߱Ͱൣғ֎• U+3030Ҏલʹ͋Δֆจࣈ͑Δ͔ʂ
U+3030·ͰͷͲΕ͕ֆจࣈͳͷ͔• The Unicode Consortium͕ܾΊ͍ͯΔ• ΄ͱΜͲ͕͑ΔͷͰɼҰཡΛݟͯωλΛ࿅Δͱྑ͠• ͑ͳ͍ࢠ:• U+FE0FͱU+FE0E͕ԋࢉࢠ໊ͷ2จࣈҎ߱Ͱ͑Δ• ͭ·ΓֆจࣈελΠϧͱςΩετελΠϧผѻ͍Ұཡhttp://unicode.org/Public/emoji/5.0/emoji-data.txthttps://ja.wikipedia.org/wiki/Unicode%E3%81%AEEmoji%E3%81%AE%E4%B8%80%E8%A6%A7
͍͍ͩͨ͜Μͳײ͡ʂ
·ͱΊ• ͑ͦ͏ͳASCIIจࣈ͑Δ• identifierͰ͑Δจࣈجຊతʹ͑ͳ͍• ֶه߸͕݁ߏ͑Δ• ҙ֎ͱׅހϓϥΠϜ͕͑Δ• ಉ͡छྨͷจࣈ͕શ෦͑ΔΘ͚Ͱͳ͍• ԋࢉࢠʹ͑Δֆจࣈ͋Δ
࠷ޙʹ͏1ͭ
࣍ͷจࣈԋࢉࢠʹ͑Δͷ͔ʁֆจࣈ͔Ͳ͏͔ ԋࢉࢠʹ͑Δ͔ὺ˟℗™℠ֆจࣈ͔Ͳ͏͔ ԋࢉࢠʹ͑Δ͔ὺ O :˟ O :⁴ O O : : : :℗ O Oä : O℠ O O
Θ͔ΒΜʂʂʂ