Slide 1

Slide 1 text

ύλʔϯϚονϯάΛֶΜͰ ৽͍͠+BWBͷੈք΁ʂ +BWB·Ͱͷ໨ۄػೳΛ ͓͞Β͍͠Α͏ ++6($$$4QSJOH

Slide 2

Slide 2 text

Θͨ͠ • Α͜ͳ !JIDPNFHB • %FWFMPQFS"EWPDBUF!+'SPH • ݩ͸ݱ৔ͷόοΫΤϯυΤϯδχΞ • ʰ͍ͪ͹Μ΍͍͞͠(JU(JU)VCͷڭՊॻʱ • ࠷ۙεΧΠμΠϏϯάΛͨ͠ 1

Slide 3

Slide 3 text

ϦϦʔεαΠΫϧ͕มΘͬͨͷ͸ ೥݄ +BWB͔Β ΋͏೥͕ܦա͠Α͏ͱͯ͠Δʜ 2

Slide 4

Slide 4 text

ΩϟονΞοϓͷ ਐḿͲ͏Ͱ͔͢ʁ 3

Slide 5

Slide 5 text

Ξοϓσʔτͷྫ +BWB var nanikore = Map.of( 1, List.of("いぬ", "ねこ", "たぬき"), 2, List.of("こあら", "ぱんだ")); ϩʔΧϧม਺ͷ ܕਪ࿦ 4

Slide 6

Slide 6 text

Ξοϓσʔτͷྫ +BWB String memo = """ %s 以降 テキストブロックで 複数⾏の⽂字が 書けるようになった """.formatted("Java 15"); ςΩετϒϩοΫ 5

Slide 7

Slide 7 text

Ξοϓσʔτͷྫ +BWB if (sth instanceof String s) { System.out.println(s); } JOTUBODFPGʹΑΔ ύλʔϯ Ϛονϯά 6

Slide 8

Slide 8 text

෼͔Γ΍͍͢΋ͷɺ ΠϚΠνԿ͕خ͍͠ͷ͔ ௫ΈͮΒ͍΋ͷ ৭ʑ͋ΔΑͶ 7

Slide 9

Slide 9 text

ࠓ೔ͷςʔϚ͸ ύλʔϯϚονϯά 8

Slide 10

Slide 10 text

͡Θ͡ΘਐΉػೳ֦ுʹΑΓ ݟ͑ͮΒ͘ͳ͍ͬͯΔ͔΋ ͠Εͳ͍ศར͞Λ Ұॹʹֶ΅͏ʂ 9

Slide 11

Slide 11 text

͜ͷηογϣϯͰ஌Ζ͏ • ύλʔϯϚονϯά • +BWB·ͰΛ࢖ͬͨύλʔϯϚονϯά • +BWBҎ߱ͰͷਐԽ • 1SPKFDU"NCFS΍ϦϦʔεαΠΫϧ 10

Slide 12

Slide 12 text

ύλʔϯϚονϯάͱ͸ Ұൠ࿦ • ෼͔Γ΍͘͢ݴ͏ͱ৚݅൑ఆͷͻͱͭ • ஋Λύλʔϯͱর߹͠ɺҰக Ϛον ͢Δ͔֬ೝ͢Δ • Ұக͔ͨ͠Ͳ͏͔Ͱ৚݅Λ෼ذͨ͠Γɺ஋Λ෼ղͯ͠ ࢖ͬͨΓ͢Δ͜ͱ΋Ͱ͖Δ 11

Slide 13

Slide 13 text

ύλʔϯϚονϯάͱ͸ Ұൠ࿦ “Ն” “य़” “Ն” “ळ” “ౙ” 12

Slide 14

Slide 14 text

ύλʔϯϚονϯάͱ͸ Ұൠ࿦ 🌻 🌹 🌸 🌷 🌸 🌸 🌸 🌸 🌷 🌹 🌻 🌸 🌻 🌹 🌸 🌷 🌻 🌹 ❓ ❓ 💐 💐 💐 💐 13

Slide 15

Slide 15 text

ύλʔϯϚονϯάͱ͸ 🌻 🌹 🌸 🌷 🌻 🌹 ❓ 🌷 Bʹ 🌹 র߹ ෼ղ Cʹ 🌸 14

Slide 16

Slide 16 text

+BWBͰύλʔϯϚονϯά • TXJUDIࣜ • JOTUBODFPGΛ࢖ͬͨύλʔϯϚονϯά • TXJUDIΛ࢖ͬͨύλʔϯϚονϯά • Ϩίʔυ 3FDPSE • γʔϧΫϥε 4FBMFEDMBTT +BWB͔Β গͣͭ͠ ಋೖ͞Ε͍ͯΔΑ 15

Slide 17

Slide 17 text

ͲͷόʔδϣϯͰԿ͕ೖ͔ͬͨ͸ ͍ͬͨΜ๨Εͯɺ +BWB ϓϨϏϡʔؚΉ ͰͰ͖Δ͜ͱ Λ ·ͣ͸஌Ζ͏ 16

Slide 18

Slide 18 text

ϓϨϏϡʔػೳͱ͸ • ਖ਼ࣜϦϦʔεલͷػೳ • ࣮ࡍʹ࢖ͬͯͷϑΟʔυόοΫΛಘΔͨΊެ։͞ΕΔ • KBWBD΍KBWBίϚϯυʹ FOBCMFQSFWJFXϑϥάΛ ෇͚࣮ͯߦ͢Δͱ༗ޮʹͳΔ • KBWBDSFMFBTFEFOBCMFQSFWJFX)PHFKBWB • KBWBFOBCMFQSFWJFX)PHF • KTIFMM΍KBWBEPDίϚϯυͰ΋࢖͑Δ • *%&Ͱ΋αϙʔτ͕͋Δ 17

Slide 19

Slide 19 text

γϯϓϧͳύλʔϯϚονϯά String season = “夏”; String result = switch (season) { case “春” -> “Spring”; case “夏” -> “Summer”; case “秋” -> “Fall”; case “冬” -> “Winter”; default -> "Nothing"; } 18

Slide 20

Slide 20 text

TXJUDIࣜ • TXJUDIΛʮࣜʯͱͯ͠࢖͑Δʢ஋Λฦ͢ʣ • ͜Ε΋ύλʔϯϚονϯάͷͻͱͭʢఆ਺ύλʔϯʣ 19

Slide 21

Slide 21 text

΋͏গ͠ෳࡶͳྫͰ ύλʔϯϚον ϏϑΥʔΞϑλʔΛ ݟ͍ͯ͜͏ 20

Slide 22

Slide 22 text

ߟ͑Δͷʹ࢖͏αϯϓϧ ϝϞா • ςΩετϝϞ • 50%0Ϧετ • ը૾͖ͭςΩετϝϞ • શͯ*%ͱλΠτϧΛ࣋ͭ • ϝϞͷߏ଄͕֤ʑҟͳΔ 21

Slide 23

Slide 23 text

γφϦΦ ϞσϧΛ༻ҙ͢Δ ௚઀తʹ͸ ύλʔϯϚονϯάͷ ࿩Ͱ͸ͳ͍͚Ͳ ޙʑ࢖͏ͷͰ঺հ͠·͢ 22

Slide 24

Slide 24 text

ϞσϧΛ༻ҙ͢Δ • େྔͷΫϥεΛ࡞੒͢Δ • ͦͷ෼ϘΠϥʔϓϨʔτ΋ॻ͘ 23

Slide 25

Slide 25 text

ϞσϧΛ༻ҙ͢Δ چ public class Text implements Memo { private Id id; private Title title; private Body body; public Text(Id id, Title title, Body body) { this.id = id; this.title = title; this.body = body; } // setter/getter // toString() // equals() // hashCode() } 24

Slide 26

Slide 26 text

՝୊ • ͍ͨ΁Μ 25

Slide 27

Slide 27 text

ϞσϧΛ༻ҙ͢Δ ৽ record Text(Id id, Title title, Body body) implements Memo {} 26

Slide 28

Slide 28 text

ϨίʔυΫϥε record Text(Id id, Title title, Body body) implements Memo {} • SFDPSEΩʔϫʔυ෇͖ͰΫϥεΛఆٛ͢Δ • (Id id, Title title, Body body) ෦෼ʮ Ϩίʔυ ϔομʔʯʹ ʮ Ϩίʔυ ίϯϙʔωϯτʯΛఆٛͰ͖Δ 27

Slide 29

Slide 29 text

ϨίʔυΫϥε Լه͕ࣗಈͰੜ੒͞ΕΔ • ϔομʔͱಉ͡ϑΟʔϧυΛ࣋ͬͨίϯετϥΫλ • ֤ίϯϙʔωϯτʹରͯ͠ͷ • QSJWBUFGJOBMͳϑΟʔϧυ ίϯϙʔωϯτͱಉ໊ • QVCMJDͳΞΫηαʔϝιου ίϯϙʔωϯτͱಉ໊ • FRVBMT ϝιου IBTI$PEF ϝιου ಉ͡ܕͰ֤ίϯϙʔωϯτ͕ಉ͡஋Λ࣋ͬͨϨίʔυ͔Ͳ͏͔ • UP4USJOH ϝιουίϯϙʔωϯτͷ໊લͱ஋Λฦ͢ 28

Slide 30

Slide 30 text

ϨίʔυΫϥε • ϨίʔυΫϥεɺίϯϙʔωϯτ͔Βੜ੒͞ΕͨϑΟʔϧυ͸ ҉໧తʹGJOBM ΠϯελϯεΛΠϛϡʔλϒϧʹอͭࢥ૝ • ଞͷΫϥεΛܧঝͰ͖ͳ͍ KBWBMBOH3FDPSEΛܧঝ͍ͯ͠Δ ͨΊ • ΠϯλʔϑΣʔεͷ࣮૷͸Ͱ͖Δ • ଞͷΫϥε͔Βͷܧঝ΋Ͱ͖ͳ͍ GJOBMͳͷͰ • Ϋϥεͱಉ༷ϝιου͕એݴͰ͖Δ • ϔομʔҎ֎ʹΠϯελϯεϑΟʔϧυ͸એݴͰ͖ͳ͍ 29

Slide 31

Slide 31 text

ϨίʔυΫϥε public interface Memo { … record Text(Id id, Title title, Body body) implements Memo {} record TodoList(Id id, Title title, List tasks) implements Memo {} record Image … } • Ϋϥε΍ΠϯλʔϑΣʔεͷதʹఆٛͰ͖Δ • ೖΕࢠʹ͢Δ͜ͱͳ͘ಉϑΝΠϧʹఆٛ΋Ͱ͖Δ • ΋ͪΖΜผϑΝΠϧͰͷఆٛ΋Ͱ͖Δ ͜͏͢Ε͹ϑΝΠϧʹఆٛͰ͖Δ͕ QVCMJDͳϨίʔυʹ͍ͨ͠৔߹ ೖΕࢠʹ͢Δ͔͠ͳ͍ɻ ݟ׳Εͳ͍ίʔυʹͳΔ΋ͷͷศར 30

Slide 32

Slide 32 text

γφϦΦ ϏδωεϩδοΫ࣮૷ฤ ϝϞͷछྨ͝ͱʹॲཧΛৼΓ෼͚Δ 31

Slide 33

Slide 33 text

String doSomethingForEach(Memo memo) { if (memo == null) { return "nullが来た"; } else if (memo instanceof Text) { Text text = (Text) memo; return doSomethingForText(text); } else if (memo instanceof TodoList) { TodoList todo = (TodoList) memo; return doSomethingForTodoList(todo); } else if (memo instanceof Image) { Image image = (Image) memo; return doSomethingForImage(image); } else { return "おかしな値が来た"; } } ϝϞͷछྨ͝ͱʹ ॲཧΛৼΓ෼͚Δ چ 32

Slide 34

Slide 34 text

՝୊ • JGFMTF஍ࠈʹؕΔ • ܕʹΑΔ൑ఆΛߦ͏ࡍɺ൑ఆͱ࢖༻͕ผͷεςοϓʹ෼͔ΕΔ • ͭ·Γɺίʔυྔ͕΍ͨΒͱଟ͘ͳͬͯಡΈͮΒ͍ 33

Slide 35

Slide 35 text

String doSomethingForEach(Memo memo) { return switch (memo) { case null -> “nullが来た”; case Text t -> doSomethingForText(t); case TodoList td -> doSomethingForTodoList(td); case Image i -> doSomethingForImage(i); default -> "おかしな値が来た"; }; } ϝϞͷछྨ͝ͱʹ ॲཧΛৼΓ෼͚Δ ৽ 34 ໼ҹ͕ἧ͏Α͏ͳ ϑΥʔϚοτʹ͢Δͱ ಡΈ΍͍͢

Slide 36

Slide 36 text

ܕͰύλʔϯϚονϯά • ܕͰύλʔϯϚονϯάͰ͖Δ ܕʗλΠϓύλʔϯ • ܕʹϚονͨ͠Β஋͕ม਺ʹऔΓग़͞ΕΔ • ύλʔϯม਺ͱݴ͍ɺείʔϓ͸Ϛονͨ͠έʔεͷதͷΈ • Ϩίʔυͱͯ͠ఆٛ͞ΕͨܕͰ΋ύλʔϯϚονϯάͰ͖Δ 35

Slide 37

Slide 37 text

case null, Text t -> “null͔ςΩετϝϞ”; case null, default -> “null͔͓͔͠ͳ஋”; • ࠓͷͱ͜ΖҟͳΔܕΛ·ͱΊͯॻ͘͜ͱ͸Ͱ͖ͳ͍͕ɺOVMMͱ ଞͷέʔε͸·ͱΊΒΕΔ • OVMMͷ৔߹ύλʔϯม਺Λ࢖͏ͱ౰વ/VMM1PJOUFS&YDFQUJPO ϝϞͷछྨ͝ͱʹ ॲཧΛৼΓ෼͚Δ ৽ 36

Slide 38

Slide 38 text

γφϦΦ ϏδωεϩδοΫ࣮૷ฤ ͞Βʹࡉ͔͘ॲཧΛৼΓ෼͚Δ 37

Slide 39

Slide 39 text

String doSomethingForEach(Memo memo) { if (memo == null) { return “nullが来た”; } else if (memo instanceof Text) { Text text = (Text) memo; return doSomethingForText(text); } else if (memo instanceof TodoList) { TodoList todo = (TodoList) memo; if (0 < todo.tasks().size()) { return doSomethingForTodoList(todo); } else { return "ToDoが空っぽ"; } } else if (memo instanceof Image) { Image image = (Image) memo; return doSomethingForImage(image); } else { return "おかしな値が来た"; } } ৚݅Λ௥Ճ͢Δ چ 38

Slide 40

Slide 40 text

… } else if (memo instanceof TodoList) { TodoList todo = (TodoList) memo; if (0 < todo.tasks().size()) { return doSomethingForTodoList(todo); } else { return "ToDoが空っぽ"; } } else if… ৚݅Λ௥Ճ͢Δ چɾ֦େ 39

Slide 41

Slide 41 text

՝୊ • ෳࡶ͕͞ߴ·ΓՄಡੑ͕ͲΜͲΜԼ͕Δ 40

Slide 42

Slide 42 text

return switch (memo) { case null -> "nullが来た"; case Text t -> doSomethingForText(t); case TodoList td && 0 < td.tasks().size() -> doSomethingForTodoList(td); case TodoList td -> "ToDoが空っぽ"; case Image i -> doSomethingForImage(i); default -> "おかしな値が来た"; }; ৚݅Λ௥Ճ͢Δ ৽ 41

Slide 43

Slide 43 text

ΨʔυύλʔϯʗύλʔϯΨʔυ case TodoList td && 0 < td.tasks().size() -> doSomethingForTodoList(td); case TodoList td -> "ToDoが空っぽ"; • ύλʔϯϚονϯάʹ৚݅Λ௥ՃͰ͖Δ • ৚݅ʹ߹க͠ͳ͍৔߹ͷॲཧΛॻ͖๨Εͳ͍Α͏ʹ͠Α͏ 42

Slide 44

Slide 44 text

γφϦΦ ࢓༷มߋฤ ϝϞͷछྨΛ૿΍͢ 43

Slide 45

Slide 45 text

ϝϞͷछྨΛ૿΍͢ public interface Memo { … record Text(Id id, Title title, Body body ) implements Memo {} record TodoList(Id id, Title title, List tasks) implements Memo {} record Image(Id id, Title title, ImageUrl url, Body body ) implements Memo {} record Video(Id id, Title title, VideoUrl url ) implements Memo {} } 44

Slide 46

Slide 46 text

return switch (memo) { case null -> "nullが来た"; case Text t -> doSomethingForText(t); case TodoList td && 0 < td.tasks().size() -> doSomethingForTodoList(td); case TodoList td -> "ToDoが空っぽ"; case Image i -> doSomethingForImage(i); case Video v -> doSomethingForVideo(v); default -> "おかしな値が来た"; }; ϝϞͷछྨΛ૿΍͢ 45

Slide 47

Slide 47 text

՝୊ • ݺͼग़͠Օॴͷௐ͕ࠪେมɾݟམͱ͠ͷ΋ͱ 46

Slide 48

Slide 48 text

ϝϞͷछྨΛ૿΍͢ sealed public interface Memo { … record Text(Id id, Title title, Body body ) implements Memo {} record TodoList(Id id, Title title, List tasks) implements Memo {} record Image(Id id, Title title, ImageUrl url, Body body) implements Memo {} record Video(Id id, Title title, Video Url url) implements Memo {} } 47

Slide 49

Slide 49 text

γʔϧ υ Ϋϥε • TFBMFEΩʔϫʔυΛ͚ͭͯఆٛͨ͠Ϋϥε΍ΠϯλʔϑΣʔε • ܧঝɾ࣮૷ՄೳͳΫϥεΛԼهͷΈʹݶఆ͢Δ Ϩίʔυ΋Մ • QFSNJUT۟Λ͚ͭͯڐՄͨ͠Ϋϥε sealed public interface Memo permits Text, TodoList, Image, Video • ಉ͡ϑΝΠϧʹఆٛͨ͠Ϋϥε • ܕʹΑΔύλʔϯϚονϯάͰ͢΂ͯͷܕΛ໢ཏ͍ͯ͠Δ͜ͱ Λ୲อͰ͖Δ ໢ཏ͍ͯ͠ͳ͍৔߹͸ίϯύΠϧΤϥʔ • ύλʔϯϚονϯάʹ͓͚ΔEFGBVMU͕ඞਢͰͳ͘ͳΔ 48

Slide 50

Slide 50 text

return switch (memo) { case null -> "nullが来た"; case Text t -> doSomethingForText(t); case TodoList td && 0 < td.tasks().size() -> doSomethingForTodoList(td); case TodoList td -> "ToDoが空っぽ"; case Image i -> doSomethingForImage(i) ; case Video v -> doSomethingForVideo(v); }; ϝϞͷछྨΛ૿΍͢ 49

Slide 51

Slide 51 text

͜͜·Ͱͷ͓͞Β͍ • ύλʔϯϚονϯάΛ׆༻ͯ͠ϘΠϥʔϓϨʔτ͕ݮΒͤΔ • ݱঢ় +BWBͷύλʔϯϚονϯά͸TXJUDIΛ׆༻͢Δ • ܕύλʔϯΛ࢖͏ͱ͖͸γʔϧΫϥεͰϛε΋ݮΒͤΔ • ܕΛ׆༻͢Δ্ͰϨίʔυ͸͔ܽͤͳ͍ 50

Slide 52

Slide 52 text

Ϩίʔυ͚ͩ ύλʔϯϚονϯάͱ བྷΊΔʹ͸ͪΐͬͱऑ͍ʜʁ 51 ͋ͱɺࠓ೔ͷྫͷΑ͏ʹ ෼ذޙʹ݁ہಉ͡Α͏ͳ ॲཧΛ͍ͤͨ͞৔߹ɺ ܧঝͰྑ͍ͷͰ͸ʁͱ͔

Slide 53

Slide 53 text

+BWBʹظ଴ if (memo instanceof Text(Id id, Title title, Body body)) { show(body); } --- OR --- if (memo instanceof Text(var id, var title, var body)) { show(body); } • Ϩίʔυύλʔϯ͕ಋೖ͞ΕΔ༧ఆ ϓϨϏϡʔ • ϨίʔυΛ༻͍ͨύλʔϯϚονϯάʹ͓͍ͯ෼ղ͕༰қʹͳΔ 52

Slide 54

Slide 54 text

΋ͬͱকདྷ ˞ΠϝʔδͰ͢ String doSomethingForEach(Memo memo) { return switch (memo) { case null -> "nullが来た"; case Text(Id id, Title title, Body body) -> doSomethingForText(body); case TodoList(Id id Title title, List tasks) && 0 < tasks().size() -> doSomethingForTodoList(tasks); case TodoList _ -> "ToDoが空っぽ"; case Image(Id id, Title title, ImageUrl url, Body body) -> doSomethingForImage(url, body); }; } 53

Slide 55

Slide 55 text

Ϩίʔυύλʔϯɺ෼ղ 54 • ʮͲͷܕ͔ʯͷΈͳΒͣʮͲΜͳߏ଄͔ʯΛ;·͑ͯύλʔϯ ϚονϯάͰ͖Δ • ܧঝʹΑΔϙϦϞʔϑΟζϜ͚ͩͰදݱͮ͠Β͍ෳࡶͳέʔε ʢΦʔόʔϩʔυͨ͘͠ͳͬͨ࣌ͱ͔ʣͰ͸ಛʹ׆༻Ͱ͖Δ

Slide 56

Slide 56 text

+BWBͰͷখ͞ͳมߋ case TodoList td when 0 < td.tasks().size() -> doSomethingForTodoList(td); • Ψʔυύλʔϯͷࢦఆ͕ Ͱ͸ͳ͘ XIFOʹมΘΔ • ෼͔Γ΍͢͞ͷͨΊΒ͍͠ 55

Slide 57

Slide 57 text

+BWBύλʔϯϚονϯάมભ ϓϨϏϡʔ ਖ਼ࣜϦϦʔε TXJUDIࣜ JOTUBODFPG ύλʔϯϚον Ϩίʔυ γʔϧυ TXJUDI ύλʔϯϚον Ϩίʔυ ύλʔϯ 56

Slide 58

Slide 58 text

1SPKFDU"NCFS • 0QFO+%,ͷ։ൃ͸ϓϩδΣΫτ୯ҐͰਐΉ • IUUQTPQFOKELKBWBOFUQSPKFDUT • ΰʔϧΛ໨ࢦͯ͠গͣͭ͠ػೳ௥Ճ͞ΕΔͷͰɺϓϩδΣΫτ ͱ͍͏୯Ґʹ஫໨͢Δͱ෼͔Γ΍͍͢ • ͜͜·Ͱ঺հͨ͠ύλʔϯϚονϯάɺςΩετϒϩοΫɺ WBS͸શ෦ʮ1SPKFDU"NCFSʯͷ੒Ռ • IUUQTPQFOKELKBWBOFUQSPKFDUTBNCFS • 1SPKFDU"NCFS͸ݴޠʹؔ͢Δػೳվળू 57

Slide 59

Slide 59 text

࠷৽ͷ৘ใΛಘΔʹ͸ • +&1 +%,&OIBODFNFOU1SPQPTBM ͰϩʔυϚοϓΛ֬ೝͰ͖Δ • ྫTXJUDIࣜ͸+&1 +&1ͦͷ΋ͷͷઆ໌͸+&1 • 0QFO+%,ͷެࣜϖʔδΛݟΔͱ෼͔Γ΍͍͢ • IUUQTPQFOKELKBWBOFUQSPKFDUTKEL • ໨తɾ࢓༷΍࢖͍ํɾલճͱͷࠩ෼͕؆ܿʹॻ͔Ε͍ͯΔ • 'VUVSFXPSLΛಡΉͱ͞ΒͳΔల๬͕෼͔Δ • +&1ಉ࢜ͷؔΘΓ͕௫ΊΔ 58

Slide 60

Slide 60 text

࠷ޙʹҰൠ+BWBϢʔβʔ໨ઢͰʜ • ௥͏ͷ͸େม • ͲΜͲΜ৽͍͠όʔδϣϯ͕΍ͬͯ͘Δ • ϓϨϏϡʔػೳ΋͋ͬͯࠓԿ͕ग़དྷΔͷ͔෼͔Βͳ͍ • ԕ͘ʹ͋Δ໨త΍ҙຯΛ೺Ѳ͢Δͱ͔͑ͬͯ෼͔Γ΍͍͢ • +&1΍ϓϩδΣΫτ͸ϚχΞοΫͳ஌ࣝͩͱࢥ͍ͬͯΔํ΋ɺ ஌Δ͜ͱͰָʹͳΕΔ͔΋ʜʁ ʜͦ͏͸͍ͬͯ΋େมͳͷͰίϛϡχςΟ΋׆༻͠Α͏ʂ🌟 59

Slide 61

Slide 61 text

5IBOLZPV 60