Slide 1

Slide 1 text

ಡΈ΍͍͢-ίʔυͷ-ॻ͖ํ ୈ-2-ճ ໋_໊

Slide 2

Slide 2 text

લճͷ͓͞Β͍: ಋೖͱݪଇ ಡΈ΍͍͢ίʔυ: ੜ࢈ੑΛҡ࣋͢Δखஈ ϘʔΠεΧ΢τϧʔϧ: ίʔυมߋલΑΓಡΈ΍͘͢ YAGNI: ඞཁʹͳͬͨͱ͖ʹॳΊ࣮ͯ૷ KISS: ୯७ͳํ๏Λ࢖͏, ඒ͍͠ != ಡΈ΍͍͢ ୯Ұ੹೚ݪଇ: ੹೚ൣғΛ໌֬ʹ ࣌ظঘૣͳ࠷దԽ: ࠷దԽͷલʹϓϩϑΝΠϦϯάɾݟੵ΋Γ

Slide 3

Slide 3 text

ߨٛͷߏ੒ - ಋೖͱݪଇ - ࣗવݴޠ: ໋໊, ίϝϯτ - ܕͷߏ଄: ঢ়ଶ, ؔ਺ - ܕؒͷߏ଄: ґଘؔ܎I, ґଘؔ܎II - ϨϏϡʔ ໋໊ > ಋೖ

Slide 4

Slide 4 text

໋໊ͷର৅ - Ϋϥε, ΠϯλʔϑΣΠε, ྻڍܕ, ߏ଄ମ, ϓϩτίϧ, τϨΠτ - ม਺, ϓϩύςΟ, ϑΟʔϧυ, ύϥϝʔλ, ఆ਺ - ؔ਺, ϝιου, खଓ͖, αϒϧʔνϯ - είʔϓ, ύοέʔδ, Ϟδϡʔϧ, ໊લۭؒ - Ϧιʔε, ϑΝΠϧ, σΟϨΫτϦ, ID - etc. ໋໊ > ಋೖ

Slide 5

Slide 5 text

Α໊͍લͱ͸ ਖ਼֬ - isVisible ΛʮԻʯʹ࢖ͬͯ͸͍͚ͳ͍ આ໌త - w / h ΑΓ΋ width / height - image ΑΓ΋ imageView / imageBitmap / imageUrl ໋໊ > ಋೖ

Slide 6

Slide 6 text

Α໋໊͍Λ͢Δʹ͸ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ಋೖ

Slide 7

Slide 7 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ಋೖ

Slide 8

Slide 8 text

จ๏͕ॏཁͳཧ༝ ໰୊ 1: CallbackEventMessageClickViewText ͸ԿΛҙຯ͢Δʁ ղ౴ 1ʁ: A text of a click view (?) of callback event message (???) ໰୊ 2: MessageTextViewClickEventCallback ͸ԿΛҙຯ͢Δʁ ղ౴ 2: A callback of click events on a message text view ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 9

Slide 9 text

ਖ਼͍͠จ๏Λ࢖͏ ʮจ๏ʯ͸ϓϩάϥϛϯάݴޠ΍ن໿ʹґଘ͢Δ Java / Kotlin ͷྫΛ঺հ ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 10

Slide 10 text

໊લͷछྨ 1/2 - ໊ࢺ: Ϋϥεɾม਺ɾঢ়ଶ΍ଐੑΛࣔؔ͢਺ imageView, HashSet, indexOf - ໋ྩܗ: ؔ਺ findMessage, compareTo ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 11

Slide 11 text

໊લͷछྨ 2/2 - ܗ༰ࢺɾ෼ࢺ: ΠϯλʔϑΣΠεɾঢ়ଶΛࣔ͢ܕ΍஋ Iterable , PLAYING , CONNECTED - ٙ໰ܗɾࡾਓশͷ(ॿ)ಈࢺ: ਅِ஋ɾਅِ஋Λฦؔ͢਺ isTextVisible , contains , equalsTo , may / shouldShow - લஔࢺΛ࣋ͭ෭ࢺ: ܕม׵Λ͢Δؔ਺, ίʔϧόοΫؔ਺ toInt , fromMemberId , onClickEvent ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 12

Slide 12 text

จ๏: ໊ࢺ ॏཁͳ୯ޠΛ࠷ޙʹஔ͘ (= ࠷ޙͷ୯ޠͰͦΕ͕ԿͰ͋Δ͔ɾԿΛ͢Δ͔Λࣔ͢) ! : MessageEventHandler , buttonHeight ! : xyzHeightForPortrait (Ϋϥε໊ͱͯ͠͸ෆద) ! : HandlerMessageEvent (ϋϯυϥͷ৔߹), heightPortrait ྫ֎: ʮঢ়ଶ΍ଐੑΛࣔؔ͢਺໊ʯ͸લஔࢺͰऴΘΔ৔߹͕͋Δ e.g., indexOf(value) , maxValueIn(array) ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 13

Slide 13 text

จ๏: ໋ྩܗ ಈࢺΛ࠷ॳʹஔ͘ "X Λऔಘ͢Δ": ! getX, " xGet "Y Λ౤ߘ͢Δ": ! postY, " yPost "Z ʹରԠͤ͞Δ": ! mapToZ, " toZMap, zToMap ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 14

Slide 14 text

ؒҧͬͨޠॱ͕࢖ΘΕΔཧ༝ class UserActionEvent class UserActionEventSwipe: UserActionEvent() class UserActionEventClickMessageText: UserActionEvent() class UserActionEventClickProfileImage: UserActionEvent() mutableListOf() ίʔυΛʮ࢖͏ଆʯͰͲ͏ݟ͑Δ͔͕ॏཁ ݟͨ໨ͷ౷Ұײ ͷΈʹয఺Λ౰ͯͯ͸ͳΒͳ͍ ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 15

Slide 15 text

จ๏: ·ͱΊ - ໊લͷछྨ ໊ࢺɾ໋ྩܗɾܗ༰ࢺɾٙ໰จ(+ࡾਓশ)ɾ෭ࢺ - ޠॱͷॏཁੑ ίʔυΛʮ࢖͏ଆʯͰͲ͏ݟ͑Δ͔ ໋໊ > ਖ਼͍͠จ๏Λ࢖͏

Slide 16

Slide 16 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 17

Slide 17 text

ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ දݱ͢Δ΂͖಺༰ ! ͦͷม਺΍Ϋϥε͕ Կ Ͱ͋Δ͔ ! ͦͷؔ਺͕ Կ Λ͢Δ͔ ݴٴ͢Δ΂͖Ͱͳ͍಺༰ ! ͦͷίʔυΛ ͩΕ ͕࢖͏͔ ! ͦͷίʔυ͕ ͍ͭɾͲ͜ͰɾͳͥɾͲͷΑ͏ʹ ࢖ΘΕΔ͔ ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 18

Slide 18 text

ؔ਺໊ͷྫ: એݴଆ ! ͦͷؔ਺͕ Կ Λ͢Δ͔Λදݱ͢Δ class MessageRepository { fun storeReceivedMessage(data: MessageData) { ! ͦͷؔ਺͕ ͍ͭ ݺ͹ΕΔ͔Λදݱ͢Δ class MessageRepository { fun onMessageReceived(data: MessageData) { ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 19

Slide 19 text

ؔ਺໊ͷྫ: ݺͼग़͠ଆ ! ݺͼग़͠ଆͷίʔυͰ Կ͕ى͖Δ͔͕Θ͔Δ repository.storeReceivedMessage(messageData) presenter.showNewReceivedMessage(messageData) ! ݺͼग़͠ଆͷίʔυͰ Կ͕ى͖Δ͔͕Θ͔Βͳ͍ repository.onMessageReceived(messageData) presenter.onMessageReceived(messageData) ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 20

Slide 20 text

ؔ਺໊ͷྫ: ʮ͍ͭʯ͕Α͘ͳ͍ผͷཧ༝ ؔ਺ͷ੹೚͕ᐆດʹͳΔ class MessageViewPresenter { fun onMessageReceived(data: MessageData) { // View presentation code for new message ... repository.onMessageReceived(data) // !! ॏෳݺͼग़͠ͷόάͷݪҼʹͳΔ͜ͱ΋ repository.onMessageReceived(messageData) presenter.onMessageReceived(messageData) ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 21

Slide 21 text

Ҿ਺໊ͷྫ: એݴଆ ! true ͷͱ͖ Կ͕ى͜Δ͔͕Θ͔Δ fun showHistory(shouldShowDialogOnError: Boolean) ! true ͷͱ͖ Կ͕ى͜Δ͔Θ͔Βͳ͍ fun showHistory(isCalledAtMainScreen: Boolean) ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 22

Slide 22 text

Ҿ਺໊ͷྫ: ʮͩΕʯ͕Α͘ͳ͍ཧ༝ 1: ໊લ͕ ࠷৽ͷঢ়گ ͱҰக͠ͳ͘ͳΔ // ... from another screen requiring dialog showHistory(isCalledAtMainScreen = true) 2: Ҿ਺͕ ଞͷ໨త ͷͨΊʹ࢖ΘΕΔ if (isCalledAtMainScreen) { setScreenTitle("Main") ... 1 ͱ 2 ͕ಉ࣌ʹى͜Δͱ όά͕ൃੜ͢Δ ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 23

Slide 23 text

ʮԿʯΛઆ໌͢Δ: ྫ֎ ʮԿʯΛ͢Δ͔͕ܾ·͍ͬͯͳ͍ ந৅ίʔϧόοΫؔ਺ ྫ: onClicked, onSwiped, onDestroyedɹ ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 24

Slide 24 text

ʮԿʯΛઆ໌͢Δ: ྫ֎ ʮԿʯΛ͢Δ͔͕ܾ·͍ͬͯͳ͍ ந৅ίʔϧόοΫؔ਺ ྫ: onClicked, onSwiped, onDestroyedɹ ʮ͍ͭɾͲͷΑ͏ʹʯͰ໋໊͔͠Ͱ͖ͳ͍ ίʔϧόοΫͰ΋ʮԿʯΛ͢Δ͔͕ܾ·͍ͬͯΔ৔߹ʹ஫ҙ abstract fun toggleSelectionState() ... view.setClickCallback { toggleSelectionState() } ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 25

Slide 25 text

ʮԿʯΛઆ໌͢Δ: ·ͱΊ ͦΕ͕ʮԿʯͰ͋Δ͔ɾʮԿʯΛ͢Δ͔Λઆ໌͢Δ =ʮͩΕɾ͍ͭɾͲ͜ͰɾͳͥɾͲͷΑ͏ʹʯʹ͸ݴٴ͠ͳ͍ - ੹೚Λ໌ࣔ͢Δ - ʮ࢖͏ଆʯͷίʔυΛಡΈ΍͘͢͢Δ ྫ֎: ԿΛ͢Δ͔͕ܾ·͍ͬͯͳ͍ந৅ίʔϧόοΫؔ਺ ໋໊ > ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ

Slide 26

Slide 26 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ҙຯͷڱ͍ޠΛબͿ

Slide 27

Slide 27 text

୯ޠͷҙຯͷ޿͞: ྫ 1/2 ໰୊: initializationFlag ͸ԿΛҙຯ͢Δʁ - shouldInitialize - isInitializing - is/wasInitialized - isInitializable - isNotInitialized (!!) ʢ࠷ޙҎ֎ͷʣ্هͷͲΕ͔Ͱஔ͖׵͑Δ ໋໊ > ҙຯͷڱ͍ޠΛબͿ

Slide 28

Slide 28 text

୯ޠͷҙຯͷ޿͞: ྫ 2/2 ໰୊: sizeLimit ͸ԿΛҙຯ͢Δʁ - max, minʁ - height, width, byte, characters, lengthʁ maxHeight ౳ͱ໋໊͢Δ ໋໊ > ҙຯͷڱ͍ޠΛબͿ

Slide 29

Slide 29 text

ஔ͖׵͑Δ΂͖୯ޠͷྫ - flag: is, was, should, can, may, will ... - check: is, query, verify, measure, filter, notify, update ... - good, fine: valid, completed, reliable, secure, satisfies ... - old: previous, stored, expired, invalidated, deprecated ... - tmp, retval: ࣮ࡍͷ໊લ ࣙॻ΍ྨޠࣙయΛ࢖͏ ໋໊ > ҙຯͷڱ͍ޠΛબͿ

Slide 30

Slide 30 text

ҙຯͷڱ͍ޠΛબͿ: ·ͱΊ - flag ΍ check ౳ͷ ҙຯͷ޿͍୯ޠ Λஔ͖׵͑Δ - ࣙॻ ΍ ྨޠࣙయ Λ࢖͏ ໋໊ > ҙຯͷڱ͍ޠΛબͿ

Slide 31

Slide 31 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ࠞཚΛটུ͘ޠΛආ͚Δ

Slide 32

Slide 32 text

ུޠ: ྫ 1/2 ໰୊: im ͱ͍͏໊લ͸ԿΛҙຯ͢Δʁ input method, illegal message, instance manager ... ಠࣗͷུޠΛආ͚Δ ʮೝࣝʯ͸ʮ૝ىʯΑΓ΋؆୯3 3 100 Things: Every Designer Needs to Know About People, Susan Weinschenk, 2011 ໋໊ > ࠞཚΛটུ͘ޠΛආ͚Δ

Slide 33

Slide 33 text

ུޠ: ྫ 2/2 ໰୊: str ͱ͍͏໊લ͸ԿΛҙຯ͢Δ? string, structure, stream, streak, street, sorted transaction record Ұൠతͳུޠ͸ڐ༰Ͱ͖Δ͜ͱ΋ - URL ΍ TCP ౳ͷ࢖༻͸໰୊ͳ͍ - string Λҙຯ͢Δ str ͸ ݶΒΕͨείʔϓ ͳΒڐ༰͞ΕΔ͔΋ ໋໊ > ࠞཚΛটུ͘ޠΛආ͚Δ

Slide 34

Slide 34 text

ϓϩμΫτݻ༗ͷུޠ ϓϩμΫτݻ༗ͷུޠ͕࢖ΘΕΔ͜ͱ͕͋Δ νʔϜͷ৽نϝϯόʔ͕ཧղͰ͖ΔΑ͏ʹ͢Δ - Ϋϥεɾؔ਺ɾม਺ͷυΩϡϝϯςʔγϣϯΛॻ͘ - ༻ޠूΛผ్༻ҙ͓ͯ͘͠ ໋໊ > ࠞཚΛটུ͘ޠΛආ͚Δ

Slide 35

Slide 35 text

ࠞཚΛটུ͘ޠΛආ͚Δ: ·ͱΊ - ಠࣗͷུޠ: ࢖Θͳ͍ - Ұൠతͳུޠ: ڐ༰͞ΕΔ͜ͱ͕͋Δ - ϓϩμΫτݻ༗ͷུޠ: υΩϡϝϯςʔγϣϯɾ༻ޠूͰઆ໌ ໋໊ > ࠞཚΛটུ͘ޠΛආ͚Δ

Slide 36

Slide 36 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ

Slide 37

Slide 37 text

ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ ʮ੔਺ܕʯͰ͸୯Ґ΍࣮ମ͕ᐆດͳ͜ͱ͕͋Δ - timeout: timeoutInMillis, timeoutInSeconds - width: widthInPixels, widthInPoints, widthInInches - color: argbColorInt, colorResId - i, j, k: userIndex, row, col ໋໊ > ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ

Slide 38

Slide 38 text

ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ: ༨ஊ ΫϥεͰ୯ҐΛදݱ͢Δ͜ͱ΋Մೳ class Inch(val value: Int) class Centimeter(val value: Int) fun setWidth(width: Inch) = ... setWidth(Centimeter(10)) // Compile error! - Scala ͷ஋Ϋϥε΍ Kotlin ͷΠϯϥΠϯΫϥε౳΋༗ޮ - Kotlin ͷ Duration ͷΑ͏ʹ୯ҐΛಁաతʹѻ͏͜ͱ΋Ͱ͖Δ ໋໊ > ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ

Slide 39

Slide 39 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ߠఆతͳදݱΛ࢖͏

Slide 40

Slide 40 text

ߠఆతͳදݱΛ࢖͏ ! : ߠఆతͳޠ, isEnabled ! : ൱ఆతͳޠ, isDisabled ! : ߠఆతͳޠ + notɾnoɾnon, isNotEnabled ! : ൱ఆతͳޠ + notɾnoɾnon, isNotDisabled isNotDisabled → isEnabled isNotEnabled → isDisabled ͸ ୯७ʹஔ׵Մೳ ໋໊ > ߠఆతͳදݱΛ࢖͏

Slide 41

Slide 41 text

ࠓճͷ಺༰ - ਖ਼͍͠จ๏Λ࢖͏ - ʮ͍ͭɾͩΕ͕ʯΑΓʮԿʯΛઆ໌͢Δ - ҙຯͷڱ͍ޠΛબͿ - ࠞཚΛটུ͘ޠΛආ͚Δ - ܕ΍୯ҐΛࣔ͢୯ޠΛՃ͑Δ - ߠఆతͳදݱΛ࢖͏ ໋໊ > ݴޠɾϓϥοτϑΥʔϜɾϓϩμΫτͷن໿ʹै͏

Slide 42

Slide 42 text

ࠓճͷ಺༰: ௥Ճ ݴޠɾϓϥοτϑΥʔϜɾϓϩμΫτͷن໿ʹै͏ ໋໊ > ݴޠɾϓϥοτϑΥʔϜɾϓϩμΫτͷن໿ʹै͏

Slide 43

Slide 43 text

ݴޠɾϓϥοτϑΥʔϜɾϓϩμΫτͷن໿ʹै͏ ݴޠɾϓϥοτϑΥʔϜݻ༗ͷ ن໿ɾϧʔϧɾෆจ཯ ʹै͏ - จ๏: itemCount vs. numItem - ུޠ: milliSeconds vs. millis vs. ms ඪ४ϥΠϒϥϦɾAPI Λࢀর͢Δ ෆ໌ͳ఺ʹ͍ͭͯ͸ϓϩμΫτͰن໿ΛఆΊΔ ໋໊ > ݴޠɾϓϥοτϑΥʔϜɾϓϩμΫτͷن໿ʹै͏

Slide 44

Slide 44 text

·ͱΊ ໊લ͸ਖ਼͔֬ͭઆ໌తʹ - ໊લͷࣔ͢಺༰: ʮ͍ͭɾͩΕʯΑΓʮԿʯ - จ๏: ॏཁͳ୯ޠͷҐஔ - ୯ޠ: ҙຯ͕ڱ͍ɾলུ͠ͳ͍ɾߠఆత ໋໊ > ·ͱΊ