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

Kotlinを研究する

doyaaaaaken
November 06, 2021

 Kotlinを研究する

『Kotlinを研究する』(※ JJUG FALL 2021で発表)

Abstract:
KotlinはJVMで動作する静的型付けのオブジェクト指向プログラミング言語です。
モダンな記法が使えることや、Java/Scala等のJVM言語の文法と類似性が高く学習コストが低いことから、サーバーサイド・Androidを中心とした開発において利用される機会が増えています。

発表では『Kotlinはどんな言語で何を目指しているのか』について考察したいと思います。
客観的な事実や公表されているデータを元にKotlinについて読み解いていきます。
発表の特徴としては、可能な限り客観的な情報による分析を行うことで極力偏らない内容になっており、それに補足する形でKotlinを4年程使ってきた登壇者個人の主観的見解も交えていきます。

<目次>

公式ドキュメントから読み解くKotlin
歴史から読み解くKotlin
サーベイから読み解くKotlin
言語仕様から読み解くKotlin
標準ライブラリから読み解くKotlin
実装パターンから読み解くKotlin
公式声明から読み解く今後のKotlin
<発表の目標>
・Kotlinを使ったことがない人に、興味深い知識や技術選定のための検討材料を提供する
・Kotlinをすでに使っている人に、言語思想などに関する理解を深めてもらう

doyaaaaaken

November 06, 2021
Tweet

More Decks by doyaaaaaken

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ w ࢓ࣄ w גࣜձࣾTNBSUSPVOE$50૑ۀϝϯόʔ w αʔόαΠυ,PUMJOʢ,UPSʣɾ7VF+4Λࠓ͸Α͘ॻ͍͍ͯ·͢ w ,PUMJOྺ͸લ৬ࠐΈͰ೥͘Β͍ w

    044׆ಈ w LPUMJODTWͷ࡞ऀʢ⭐PWFSʣ w ,UPSɾ&YQPTFEɾLPUFTU౳΁ͷίϯτϦϏϡʔτ  @doyaaaaaken
  2. ൃද಺༰ w ಺༰ w ʰ,PUMJO͸ͲΜͳݴޠͰԿΛ໨ࢦ͍ͯ͠Δͷ͔ʱʹ͍ͭͯߟ࡯͢Δ w ͳΔ΂͘٬؍త৘ใΛݩʹ෼ੳ͢Δ͜ͱͰެฏͳߟ࡯಺༰ʹ w ໨ඪ w

    ,PUMJOΛ࢖ͬͨ͜ͱ͕ͳ͍ਓʹɺڵຯਂ͍஌ࣝ΍ٕज़બఆͷͨΊͷݕ౼ࡐྉΛఏڙ͢Δ w ,PUMJOΛ͢Ͱʹ࢖͍ͬͯΔਓʹɺݴޠࢥ૝ͳͲʹؔ͢ΔཧղΛਂΊͯ΋Β͏ 
  3. ໨࣍  ެࣜυΩϡϝϯτ͔ΒಡΈղ͘,PUMJO  ྺ࢙͔ΒಡΈղ͘,PUMJO  αʔϕΠ͔ΒಡΈղ͘,PUMJO  ݴޠ࢓༷͔ΒಡΈղ͘,PUMJO 

    ඪ४ϥΠϒϥϦ͔ΒಡΈղ͘,PUMJO  ࣮૷ύλʔϯ͔ΒಡΈղ͘,PUMJO  ެࣜ੠໌͔ΒಡΈղ͘ࠓޙͷ,PUMJO 
  4. ,PUMJOͷಛ௃ ެࣜυΩϡϝϯτʹهࡌ͞Ε͍ͯΔಛ௃ w +FU#SBJOTʹΑΓ։ൃ͞Εͨ੩తܕ෇͚ݴޠ w ΦϒδΣΫτࢦ޲ɾؔ਺ܕͲͪΒͰ΋ॻ͚Δ w +7.ɾ"OESPJEɾ+BWB4DSJQUɾ/BUJWF౳༷ʑͳϓϥοτϑΥʔϜ޲͚ʹ։ൃՄೳ w +BWBͱ૬ޓӡ༻Մʢʹ+BWBɾ,PUMJOΛಉҰϓϩδΣΫτʹࠞͥΒΕΔʣ

    w +BWB͔Β,PUMJOɺ,PUMJO͔Β+BWBͷݺͼग़͕͠γʔϜϨεʹՄೳ w +BWBϥΠϒϥϦ͕ར༻Ͱ͖Δ w +BWBίʔυΛ,PUMJOʹࣗಈม׵͢ΔػೳΛ*%&Ͱఏڙ w 044Ͱ͋Γίʔυ͸(JUIVCͰ؅ཧɻ-JDFOTF͸"QBDIFɻ  IUUQTLPUMJOMBOHPSHEPDTGBRIUNM
  5. +BWBͱൺֱͨ͠༏Ґੑ ެࣜυΩϡϝϯτʹهࡌ͞Ε͍ͯΔ༏Ґੑ w ίʔυྔΛ໿ఔ࡟ݮ w ܕαϙʔτͷॆ࣮ w ಛʹ/VMMɾ/PU/VMMΛ۠ผ͢Δ͜ͱʹΑΓɺ/1&ΛճආͰ͖Δ͜ͱ͕ͭͷେ͖ͳ఺ w ϦονͳදݱྗΛ࣮ݱ͢Δ௥Ճػೳ܈

    w ྫɿTNBSUDBTUɾߴ֊ؔ਺ɾ֦ுؔ਺ w %4-Λ࡞ΕͨΓɺؔ਺ܕϓϩάϥϛϯά͕Ͱ͖ͨΓͱ+BWBΑΓ΋ࣗ༝౓͕ߴ͍  IUUQTLPUMJOMBOHPSHEPDTGBRIUNMXIBUBEWBOUBHFTEPFTLPUMJOHJWFNFPWFSUIFKBWBQSPHSBNNJOHMBOHVBHF
  6. (FU4UBSUFEͷϖʔδΛಡΈղ͘ (FU4UBSUFEͷϖʔδͷ๯಄ʹ,PUMJOͷಛ௃͕؆ܿʹॻ͔Ε͍ͯΔ w Ϟμϯ͕ͩ੒ख़͍ͯ͠Δ w ؆ܿʹॻ͚Δ w ҆શ w +BWBͱ૬ޓӡ༻Մೳ

    w .VMUJQMBUGPSN ʢ༷ʑͳϓϥοτϑΥʔϜʹର͠ ։ൃˍίʔυ࠶ར༻Մೳʣ   IUUQTLPUMJOMBOHPSHEPDTHFUUJOHTUBSUFEIUNM
  7. ,PUMJOͷྺ࢙   IUUQTCMPHKFUCSBJOTDPNLPUMJOIFMMPXPSME  IUUQTBEUNBHDPNBSUJDMFTLPUMJOHPFTPQFOTPVSDFBTQY  IUUQTTQSJOHJPCMPHEFWFMPQJOHTQSJOHCPPUBQQMJDBUJPOTXJUILPUMJO  IUUQTCMPHKFUCSBJOTDPNLPUMJOLPUMJOPOBOESPJEOPXP⒏DJBM

     IUUQTUFDIDSVODIDPNLPUMJOJTOPXHPPHMFTQSFGFSSFEMBOHVBHFGPSBOESPJEBQQEFWFMPQNFOU  IUUQTHJUIVCDPN+FU#SBJOTLPUMJOSFMFBTFT +FU#SBJOT͕ࣾ,PUMJOͷ։ൃϓϩ δΣΫτʹ͍ͭͯެද      ,PUMJO͕044ͱͯ͠ެ։ ,PUMJOWϦϦʔε 4QSJOH#PPU͕,PUMJOΛ αϙʔτ։࢝  (PPHMF*0ʹͯ(PPHMF͕ "OESPJE։ൃʹͯ ,PUMJOΛެࣜʹαϙʔτ ͢Δ͜ͱΛൃද (PPHMF͕"OESPJE։ൃʹ͓͍ͯ ,PUMJOΛୈҰݴޠͱͯ͠ਪ঑͢ΔࢫΛൃද W͕ग़͔ͯΒ·ͩ೥଍Βͣͷए͍ݴޠ ,PUMJOW ϦϦʔε
  8. αʔόαΠυͰͷ,PUMJO࠾༻ࣄྫ ࠃ಺اۀͰͷ࠾༻ࣄྫ w αΠόʔΤʔδΣϯτɾ-*/&ɾ:BIPPɾϏζϦʔνɾ%..ɾ4BO4BOɾ1BZ1BZɾ ΤϜεϦʔɾΫϥ΢υϫʔΫεɾ೔ຊܦࡁ৽ฉࣾʜFUD w /FXTQJDLTͰ͸೥݄ʹαʔόαΠυͷओཁݴޠΛ,PUMJOʹมߋ w εϚʔτϥ΢ϯυͰ΋೥͔Βར༻ 

     IUUQTRJJUBDPNQUJSJOHPJUFNTEEBCGDPNNFOUBFFDDDGBFE  IUUQTUFDIV[BCBTFDPNFOUSZ  IUUQTEPDTHPPHMFDPNQSFTFOUBUJPOEG&9S0)L9IKX.8S$*MGNT4$P6MZ'"R-@3*DFEJUTMJEFJEHEGE@@
  9. αʔϕΠɿ,PUMJO$FOTVT w αʔϕΠ֓ཁ w ೥ॳʹ+FU#SBJOT͕࣮ࢪ w  ໊͕ճ౴ w Χࠃͷਓ͕ؒճ౴

    w ׂ͕ࡀ w ,PUMJOΛϝΠϯݴޠͱͯ͠ ར༻͍ͯ͠Δਓ͸ ʢ+BWB͕ϝΠϯݴޠͷਓ͸ʣ w ͕,PUMJOܦݧ೥ະຬ ͕,PUMJOܦݧd೥ ͕,PUMJOܦݧd೥   IUUQTXXXKFUCSBJOTDPNMQLPUMJODFOTVT
  10. *OTQJSBUJPOUPUSZ,PUMJOʢ˞্ҐҐ·ͰΛൈਮʣ     /VMM4BGFUZ .PEFSO +BWB 3FQMBDFNFOU +BWB

    *OUFSQPSBCJMJUZ -FTT $PEF /FFEFE 'VODUJPOBM 1SPHSBNNJOH 4UZMF (PPHMF SFDPNNFOET JUGPS"OESPJE &BTFPG MFBSOJOH 0QFO TPVSDF $PSPVUJOFT %4- ,PUMJOΛࢼͨ͠ཧ༝ +BWB͔ΒͷҠߦϝϦοτͱ(PPHMFͷਪ঑͕ཧ༝Ͱ,PUMJOΛࢼ͢ਓ͕ଟ͍   l*OTQJSBUJPOUPUSZ,PUMJOzIUUQTXXXKFUCSBJOTDPNMQLPUMJODFOTVT
  11. αʔϕΠ5IF4UBUFPG%FWFMPQFS&DPTZTUFN w αʔϕΠ֓ཁ w ೥ʹ+FU#SBJOT͕࣮ࢪ w  ໊͕ճ౴ w Χࠃͷਓ͕ؒճ౴

    w ։ൃऀͷ؀ڥʹؔ͢ΔαʔϕΠ w ຖ೥ߦ͍ͬͯΔαʔϕΠ೥෼ͷूܭ   IUUQTXXXKFUCSBJOTDPNMQEFWFDPTZTUFN
  12. 1SBHNBUJDʢ࣮༻తʣͱ͸ %9ʢ։ൃऀମݧʣΛඇৗʹॏࢹ͍ͯ͠Δ WϦϦʔε੠໌಺Ͱͷ1SBHNBUJDͷઆ໌ w ,PUMJO͕৽͘͠ൃ໌ͨ͠ػೳɾ֓೦͸͔ᷮ͘͝ w FMFHBODFͳ͜ͱ͸େࣄ͕ͩɺVTFGVMͳ͜ͱ͕Ұ൪ͷ໨ඪ w ؆ܿͰ҆શͳίʔυ͕ॻ͚Δ w

    طଘͷίʔυ΍πʔϧͱͷޓ׵ੑΛඇৗʹॏཁࢹ͍ͯ͠Δ w ྫʣطଘͷ+BWBίʔυͱࠞͥΒΕΔɺ(SBEMFɾ.BWFO͕࢖͑Δ w ݴޠ͚ͩͰͳ͘։ൃ؀ڥ΋ಉ࣌ʹॏཁ w ྫʣ*%&ʹΑΔαϙʔτʢิ׬ɾܯࠂɾࣗಈϦϑΝΫλʣ͕ॆ࣮͍ͯ͠Δ   IUUQTCMPHKFUCSBJOTDPNLPUMJOLPUMJOSFMFBTFEQSBHNBUJDMBOHVBHFGPSKWNBOEBOESPJE
  13. ྫ֎Ͱ͸ͳ͘OVMMΛฦ͢"1*σβΠϯʢʣ 3PNBO&MJ[BSPWʢ,PUMJOϥΠϒϥϦͷνʔϜϦʔυ!+FU#SBJOTʣ͞ΜʹΑΔͱ ,PUMJOΒ͍͠"1*σβΠϯ͸ྫ֎Ͱ͸ͳ͘OVMM΍ઐ༻ܕΛฦ͢΋ͷ w +BWBʹ͸ݕࠪྫ֎ͱ͍͏࢓૊Έ͕͕͋ͬͨɺྫ֎νΣοΫͷͨΊͷϘΠϥʔϓϨʔτ ίʔυ͕૿͑ΔͨΊɺ,PUMJOͰ͸࢖͑ͳ͍Α͏ʹͨ͠ w ྫ֎ࣗମ͸,PUMJOͰ࢖͑Δ͕ɺྫ֎͸༧ظͤ͵໰୊ൃੜ࣌ͷΈʹ౤͛ΔΑ͏ʹ͠ɺ ͳΔ΂్͘தͰ͸ΩϟονͤͣτοϓϨϕϧͰΩϟον͢ΔΑ͏ʹ͢Δ w

    ૝ఆ͍ͯ͠Δҟৗܥॲཧ͸OVMM΍ઐ༻ͷܕʹΑΓදݱ͢Δ ʢྫɿʰUP*OU ͠Α͏ͱ͕ͨ͠਺஋จࣈྻͰ͸ͳ͍ͷͰ਺஋ʹͰ͖ͳ͍ʱέʔε͸ ɹɹɹ༰қʹ૝ఆՄೳʣ ˞ৄࡉ͸2JJUBهࣄʹ΋·ͱΊ͍ͯ·͢ ʰ,PUMJOΒ͍͠"1*σβΠϯʹ͢Δʹ͸ྫ֎Ͱ͸ͳ͘OVMMΛฦ͢ʱ   IUUQTFMJ[BSPWNFEJVNDPNLPUMJOBOEFYDFQUJPOTGE  IUUQTRJJUBDPNEPZBBBBBLFOJUFNTDFDGFC
  14. ϩʔυϚοϓ ެ։ϩʔυϚοϓʹΑΔͱ೥݄࣌఺Ͱͷ஫ྗ෼໺͸ҎԼͷͱ͓Γ w ,PUMJOίϯύΠϥͷॻ͖௚͠ w ,PUMJO*%&ͷύϑΥʔϚϯεɾ҆ఆੑͷ޲্ w +7.αʔόαΠυͰͷϢʔεέʔεʹ͍ͭͯͷαϙʔτ֦ॆ w .VMUJQMBUGPSN.PCJMF΁ͷαϙʔτڧԽ

    㱺ݴޠͱͯ͠͸͢ͰʹNBUVSFͳͷͰݴޠ࢓༷Ϩϕϧͷ৽ػೳ͸΄΅ແ͠ ˞ݸਓͱͯ͠Wͷࠒ͔ΒϦϦʔε಺༰Λݟ͖͍ͯͯΔ਎ͱͯ͠΋ͣͬͱ͜͏͍ͬͨํ޲ੑͰਐΜͰ͍Δײ֮   IUUQTLPUMJOMBOHPSHEPDTSPBENBQIUNMLFZQSJPSJUJFT
  15. ࢲతͳݟղ ,PUMJOϓϩδΣΫτ͸ࠓޙҎԼͷͭͷํ޲ੑʹਐΉ  ΑΓ1SBHNBUJDʢ࣮༻తʣͳݴޠʹ͢Δ΂͘։ൃऀମݧΛશํҐతʹ޲্ͤ͞Δ w *%&ʹΑΔ։ൃαϙʔτྗΛվળ w ίϯύΠϥͷ҆ఆੑɾ଎౓վળ w ৽نֶशऀ͕༰қʹΩϟονΞοϓͰ͖Δ࢓૊Έɾίϯςϯπ࡞੒ʢ˞,UPS͸೥લ͔Βͦ͏͍͏ํ޲ੑʣ

     .VMUJQMBUGPSNػೳΛڧԽ͢Δ͜ͱͰ"OESPJEɾαʔόαΠυ͚ͩͰͳ͘ J04ɾ%FTLUPQɾ8FCϑϩϯτΤϯυɾ૊ΈࠐΈ౳ ผϓϥοτϑΥʔϜͰ΋ίʔυ࠶ར༻Մೳʹ͢Δ   IUUQTCMPHKFUCSBJOTDPNLUPSLUPSSPBENBQGPS