Slide 1

Slide 1 text

const val ಡΈ΍͍͢ίʔυͷॻ͖ํ ୈ 4 ճ var ঢ়ଶ

Slide 2

Slide 2 text

લճͷ͓͞Β͍: ίϝϯτ - ίϝϯτ͸ඞཁͳͱ͖ɺඞཁͳ͚ͩॻ͘ - ίϝϯτΛॻ͘લޙͰϦϑΝΫλϦϯάΛߦ͏ - υΩϡϝϯςʔγϣϯ: ཁ໿ (ඞਢ) ɾ ৄࡉ (Φϓγϣφϧ) - ඇܗࣜతͳίϝϯτ: େ͖ͳɾෳࡶͳɾඇ௚ײతͳίʔυͷઆ໌

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ίʔυͷ࣮ߦͱঢ়ଶ ίʔυͷධՁɾ࣮ߦͰ ঢ়ଶ͸มΘΓಘΔ var i = 1 println(i) // prints `"1"` i = i + 1 println(i) // prints `"2"` ঢ়ଶ > ಋೖ

Slide 5

Slide 5 text

ঢ়ଶͱίʔυͷಡΈ΍͢͞ͷؔ܎ 1/2 ঢ়ଶ͕ଟ͗͢Δίʔυ͸ಡΈʹ͍͘ ໰୊: ୯७ʹෆมʹ͢Ε͹ಡΈ΍͘͢ͳΔʁ ౴: NO! Մมͳঢ়ଶ΍෭࡞༻Λ࢖ͬͨ΄͏͕ಡΈ΍͘͢ͳΔ͜ͱ΋͋Δɻ ঢ়ଶ > ಋೖ

Slide 6

Slide 6 text

ঢ়ଶͱίʔυͷಡΈ΍͢͞ͷؔ܎ 2/2 ೋ෼໦ͷ෯༏ઌ୳ࡧͷ࣮૷Λൺֱ 5 6 8 3 1 9 5 node value ঢ়ଶ > ಋೖ

Slide 7

Slide 7 text

ঢ়ଶͱίʔυͷಡΈ΍͢͞ͷؔ܎ 2/2 ೋ෼໦ͷ෯༏ઌ୳ࡧͷ࣮૷Λൺֱ class Node(val value: Int, val left: Node?, val right: Node?) Case 1: ՄมͳΩϡʔΛར༻ Case 2: ࠶ؼݺͼग़͠Λར༻ ঢ়ଶ > ಋೖ

Slide 8

Slide 8 text

Case 1: ՄมͳΩϡʔΛར༻ fun search(valueToFind: Int, root: Node): Node? { val queue = ArrayDeque() var node: Node? = root while (node != null && node.value != valueToFind) { node.left?.let { queue.add(it) } node.right?.let { queue.add(it) } node = queue.poll() } return node } ঢ়ଶ > ಋೖ

Slide 9

Slide 9 text

Case 2: ࠶ؼݺͼग़͠Λར༻ fun search(valueToFind: Int, root: Node): Node? = innerSearch(valueToFind, listOf(root)) tailrec fun innerSearch(valueToFind: Int, queue: List): Node? { val node = queue.getOrNull(0) if (node == null || node.value == valueToFind) { return node } val nextQueue = queue.subList(1, queue.size) + (node.left?.let { listOf(it) } ?: emptyList()) + (node.right?.let { listOf(it) } ?: emptyList()) return innerSearch(valueToFind, nextQueue) } ঢ়ଶ > ಋೖ

Slide 10

Slide 10 text

࠶ؼݺͼग़͠ͷྫͷ໰୊఺ ΑΓෳࡶ - ࠶ؼ͢Δؔ਺ͱΠϯλʔϑΣΠεͷ෼཭͕ඞཁ - ʮ࣍ͷΩϡʔͷঢ়ଶʯͷԋࢉ͕ෳࡶ valueToFind ͕มΘΒͳ͍͜ͱ͕ະอূ - ࠶ؼݺͼग़͠Ͱ࣮Ҿ਺͕มΘΔ͔ෆ໌ - ࣮Ҿ਺Λݻఆ͢Δʹ͸ϩʔΧϧؔ਺͕ඞཁ ঢ়ଶ > ಋೖ

Slide 11

Slide 11 text

ঢ়ଶͱಡΈ΍͢͞ͷؔ܎Ͱ஫ҙ͢Δ΂͖఺ ʮεςʔτϨεɾෆมɾࢀরಁաͳίʔυʯࣗମ͕໨తͰ͸ͳ͍ - ಡΈ΍͢͞ɾؤ݈ੑΛ࣮ݱ͢Δखஈ - ࠶ؼݺͼग़͠΍৞ΈࠐΈ͸ίʔυΛվળ͢ΔͨΊʹ࢖͏ ݟ͔͚ͷঢ়ଶ਺ΑΓ΋ϓϩάϥϜ࣮ߦঢ়ଶશମʹ஫໨͢Δ - ہॴతͳՄมੑ͸େ͖ͳ໰୊Ͱ͸ͳ͍ - ہॴతͳෆมੑ͕શମͷঢ়ଶ਺Λ૿΍͢͜ͱ΋͋Δ ঢ়ଶ > ಋೖ

Slide 12

Slide 12 text

ࠓճͷ಺༰ ಡΈ΍͢͞ͷͨΊʹؾΛ͚ͭΔ΂͖఺ - ม਺ؒͷؔ܎ - ঢ়ଶભҠͷઃܭ ঢ়ଶ > ಋೖ

Slide 13

Slide 13 text

ࠓճͷ಺༰ ಡΈ΍͢͞ͷͨΊʹؾΛ͚ͭΔ΂͖఺ - ม਺ؒͷؔ܎ - ঢ়ଶભҠͷઃܭ ঢ়ଶ > ม਺ؒͷؔ܎

Slide 14

Slide 14 text

௚ަͷؔ܎: ఆٛ 2 ͭͷม਺ͷ಺ͲͪΒ͔ͷ஋͕ܾ·ͬͨͱ͖ʹ ΋͏ 1 ͭͷ ม਺͕औΓ͏Δ஋ʹӨڹΛٴ΅͞ͳ͍ ঢ়ଶ > ม਺ؒͷؔ܎

Slide 15

Slide 15 text

௚ަͷؔ܎: ྫ αʔϏε಺௨՟ʮcoinʯͷදࣔը໘Λ૝ఆ ABC 123,456 coins 100,000 1,000 1,000 8 10 11 / / / 5 5 5 ঢ়ଶ > ม਺ؒͷؔ܎

Slide 16

Slide 16 text

௚ަͷؔ܎: ྫ αʔϏε಺௨՟ʮcoinʯͷදࣔը໘Λ૝ఆ ௚ަ: coinCount ͱ coinHistoryVisibility coinCount ͷ஋͸ coinHistoryVisibility ʹؔ܎͠ͳ͍ ඇ௚ަ: coinCount ͱ coinText coinCount ͱ coinText ͷऔΕΔ஋ͷ૊Έ߹Θ͕ͤݶΒΕΔ ঢ়ଶ > ม਺ؒͷؔ܎

Slide 17

Slide 17 text

௚ަੑʹ͓͚Δجຊํ਑ ʮඇ௚ަʯͳؔ܎Λආ͚Δ ඇ௚ަͳؔ܎ͷ͋ΔΫϥεͷྫ class CoinState(val coinCount: Int, val coinText: String) ෆਖ਼ͳঢ়ଶͷݪҼʹͳΔ CoinState(coinCount = 10, coinText = "0 coin") ঢ়ଶ > ม਺ؒͷؔ܎

Slide 18

Slide 18 text

ඇ௚ަͳؔ܎Λղܾ͢Δํ๏ - ؔ਺΍ήολʔϓϩύςΟʹஔ͖׵͑Δ - ௚࿨ܕΛ࢖͏ ঢ়ଶ > ม਺ؒͷؔ܎

Slide 19

Slide 19 text

ඇ௚ަͳؔ܎Λղܾ͢Δํ๏ - ؔ਺΍ήολʔϓϩύςΟʹஔ͖׵͑Δ - ௚࿨ܕΛ࢖͏ ঢ়ଶ > ม਺ؒͷؔ܎

Slide 20

Slide 20 text

ؔ਺΍ήολʔϓϩύςΟʹΑΔஔ͖׵͑ 1/2 coinText ͸ coinCount ͔ΒٻΊΒΕΔ class CoinState( val coinCount: Int, val coinText: String ) coinCount ͷΈΛࢦఆՄೳʹ͢Δ ঢ়ଶ > ม਺ؒͷؔ܎ > ؔ਺΍ήολʔϓϩύςΟʹΑΔஔ͖׵͑

Slide 21

Slide 21 text

ؔ਺΍ήολʔϓϩύςΟʹΑΔஔ͖׵͑ 2/2 coinText Λ coinCount ͔ΒٻΊΔ class CoinState( val coinCount: Int ) { fun coinText(formatter: Formatter): String = formatter.getQuantityString(coinCount, "coin") } ෆਖ਼ͳ CoinState ͷΠϯελϯε͸ଘࡏ͑͠ͳ͍ ঢ়ଶ > ม਺ؒͷؔ܎ > ؔ਺΍ήολʔϓϩύςΟʹΑΔஔ͖׵͑

Slide 22

Slide 22 text

ඇ௚ަͳؔ܎Λղܾ͢Δํ๏ - ؔ਺΍ήολʔϓϩύςΟʹஔ͖׵͑Δ - ௚࿨ܕΛ࢖͏ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 23

Slide 23 text

௚࿨ܕΛ࢖͏ 1/3 ίΠϯͷදࣔͰΤϥʔ͕ى͖͏Δ͜ͱΛ૝ఆ ABC ... 123,456 coins ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 24

Slide 24 text

௚࿨ܕΛ࢖͏ 2/3 resultText ͱ errorCode ͷͲͪΒ͔Ұํ͚͕ͩ non-null class QueryResponse( val resultText: String?, val errorCode: Int? ) ҰํͷϓϩύςΟ͸΋͏Ұํ͔ΒٻΊΒΕͳ͍ ഉଞతͳ஋Λ௚࿨ܕͰදݱ͢Δ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 25

Slide 25 text

௚࿨ܕ ෳ਺ͷܕͷ஋ͷத͔Βͪΐ͏Ͳ 1 ͭͷ஋ΛऔΔܕ ू߹࿦ͷ௚࿨ू߹ʹ૬౰ QueryResponse ͷྫ: QueryResponse = Result | Error ࣮ݱखஈ: Tagged union, variant, sealed class, associated value ... ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 26

Slide 26 text

௚࿨ܕΛ࢖͏ 3/3 sealed class QueryResponse { class Result(val resultText: String): QueryResponse() class Error(val errorCode: Int): QueryResponse() } QueryResponse ͸ resultText ͔ errorCode Λഉଞతʹ࣋ͭ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 27

Slide 27 text

ඇ௚ަͳؔ܎Λղܾ͢Δํ๏ - ؔ਺΍ήολʔϓϩύςΟʹஔ͖׵͑Δ - ௚࿨ܕΛ࢖͏ - খ͞ͳΫϥεͰ୅༻͢Δ - ಛघܥͱͯ͠ྻڍܕΛ࢖͏ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 28

Slide 28 text

௚࿨ܕͷ୅༻ 1/2 ௚࿨ܕ͕ͳ͍ݴޠ΋͋Δ (ྫ: Java ~14) ௚࿨ܕʹ͍ۙ໾ׂΛখ͞ͳΫϥεͰ࣮ݱ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 29

Slide 29 text

௚࿨ܕͷ୅༻ 2/2 class QueryResponse { @Nullable private final String resultText; @Nullable private final Integer errorCode; private QueryResponse(...) { ... } @NonNull static QueryResponse asResult(@NonNull String ...) { ... } @NonNull static QueryResponse asError(int errorCode) { ... } ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 30

Slide 30 text

ඇ௚ަͳؔ܎Λղܾ͢Δํ๏ - ؔ਺΍ήολʔϓϩύςΟʹஔ͖׵͑Δ - ௚࿨ܕΛ࢖͏ - খ͞ͳΫϥεͰ୅༻͢Δ - ಛघܥͱͯ͠ྻڍܕΛ࢖͏ ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 31

Slide 31 text

ಛघܥͱͯ͠ͷྻڍܕ ඇ௚ަͳؔ܎ͷഉআʹྻڍܕͰे෼ͳ͜ͱ΋ // isResultViewShown && isErrorViewShown can't happen var isResultViewShown: Boolean var isErrorViewShown: Boolean ྻڍʹΑͬͯ (true, true) ͷ৔߹Λഉআ͢Δ enum class VisibleViewType { RESULT_VIEW, ERROR_VIEW, NOTHING } ঢ়ଶ > ม਺ؒͷؔ܎ > ௚࿨ܕΛ࢖͏

Slide 32

Slide 32 text

ม਺ؒͷؔ܎: ·ͱΊ ௚ަɾඇ௚ަͷؔ܎ - ஋ͷऔΕΔൣғ͕Өڹ͢Δ͔Ͳ͏͔ - ʮෆਖ਼ͳঢ়ଶʯΛ࡞Βͳ͍ͨΊʹॏཁ ඇ௚ަͷؔ܎ͷഉআํ๏ - ؔ਺ɾήολʔϓϩύςΟ - ௚࿨ܕɾྻڍܕɾখ͞ͳΫϥε ঢ়ଶ > ม਺ؒͷؔ܎ > ·ͱΊ

Slide 33

Slide 33 text

ࠓճͷ಺༰ ಡΈ΍͢͞ͷͨΊʹؾΛ͚ͭΔ΂͖఺ - ม਺ؒͷؔ܎ - ঢ়ଶભҠ ঢ়ଶ > ঢ়ଶભҠͷઃܭ

Slide 34

Slide 34 text

ঢ়ଶભҠͷछྨ - ෆม: ఆ਺ ౳ - ႈ౳: Closable, Lazy ౳ - ඇ८ճ (ࣗݾϧʔϓΛআ͘): ϦιʔεͷετϦʔϜ ౳ - ८ճ: ࠶ར༻ՄೳΦϒδΣΫτ ౳ ঢ়ଶ > ঢ়ଶભҠͷઃܭ

Slide 35

Slide 35 text

ঢ়ଶભҠͷछྨ - ෆม: ఆ਺ ౳ - ႈ౳: Closable, Lazy ౳ - ඇ८ճ (ࣗݾϧʔϓΛআ͘): ϦιʔεͷετϦʔϜ ౳ - ८ճ: ࠶ར༻ՄೳΦϒδΣΫτ ౳ ঢ়ଶ > ঢ়ଶભҠͷઃܭ

Slide 36

Slide 36 text

ෆมͳΦϒδΣΫτ ͢΂ͯͷϓϩύςΟ͕มԽ͠ͳ͍ // Examples of "immutable" class Immutable(val value: Int) class AnotherImmutable(val immutable: Immutable) // Examples of "mutable" class Mutable(var value: Int) class AnotherMutable(var immutable: Immutable) class YetAnotherMutable(val mutable: Mutable) ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ෆม

Slide 37

Slide 37 text

ෆมɾՄมͷ஫ҙ఺ 1/3 Ұ෦ͷϓϩύςΟ͚ͩͰ΋ෆมʹͰ͖ͳ͍͔ݕ౼͢Δ class CheckBoxViewModel( val text: String, var isEnabled: Boolean ) ஋ͷϥΠϑαΠΫϧ͝ͱʹΫϥεΛ෼͚Δ͜ͱ΋ߟྀ͢Δ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ෆม

Slide 38

Slide 38 text

ෆมɾՄมͷ஫ҙ఺ 2/3 ෆมͱಡΈऔΓઐ༻ͷҧ͍ʹ஫ҙ͢Δ val mutableList: MutableList = mutableListOf() val list: List = mutableList println(list.size) // => "0" mutableList += itemModel println(list.size) // => "1" ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ෆม

Slide 39

Slide 39 text

ෆมɾՄมͷ஫ҙ఺ 3/3 ࢀরͱࢀরઌΦϒδΣΫτΛಉ࣌ʹՄมʹ͠ͳ͍ʢՄೳͳݶΓʣ var itemModelList: MutableList fun clearItemModelList() { // itemModelList.clear() or itemModelList = emptyMutableList() } ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ෆม

Slide 40

Slide 40 text

ෆมɾՄมͷ஫ҙ఺ 3/3 ࢀরͱࢀরઌΦϒδΣΫτΛಉ࣌ʹՄมʹ͠ͳ͍ʢՄೳͳݶΓʣ var itemModelList: MutableList val list = itemModelList fun clearItemModelList() { // itemModelList.clear() or itemModelList = emptyMutableList() } มߋͷӨڹൣғ͕Θ͔Γʹ͘͘ͳΔ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ෆม

Slide 41

Slide 41 text

ঢ়ଶભҠͷछྨ - ෆม: ఆ਺ ౳ - ႈ౳: Closable, Lazy ౳ - ඇ८ճ (ࣗݾϧʔϓΛআ͘): ϦιʔεͷετϦʔϜ ౳ - ८ճ: ࠶ར༻ՄೳΦϒδΣΫτ ౳ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 42

Slide 42 text

ႈ౳ੑ ʮ1 ճʯͱʮෳ਺ճʯͰ࣮ߦ݁Ռ͕౳͍͠ val closable = Closable() // "Open" state closable.close() // "Closed" state closable.close() // Valid. Keep "Closed" state ෭࡞༻ΛӅṭͰ͖Δ͜ͱ͕͋Δ (ྫ: Kotlin ͷ Lazy) ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 43

Slide 43 text

ႈ౳ͷঢ়ଶભҠਤ 2 ͭͷঢ়ଶͱ 1 ճͷભҠύε Open Closed ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 44

Slide 44 text

ႈ౳ͷར఺ ෆਖ਼ͳঢ়ଶભҠͷഉআ // We may forget to check `isClosed` if (!nonIdempotentClosable.isClosed()) { nonIdempotentClosable.close() } // We can simply call `close` for an idempotent instance idempotentClosable.close() ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 45

Slide 45 text

ࣗݾϧʔϓͷԠ༻ ႈ౳Ҏ֎ʹରͯ͠΋ࣗݾϧʔϓ͸༗ޮ ঢ়ଶભҠͷऴ୺Ͱࣗݾϧʔϓ͢Δ Zero Two One ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 46

Slide 46 text

ࣗݾϧʔϓͷԠ༻ ႈ౳Ҏ֎ʹରͯ͠΋ࣗݾϧʔϓ͸༗ޮ ঢ়ଶભҠͷऴ୺Ͱࣗݾϧʔϓ͢Δ None Multiple Single ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ႈ౳

Slide 47

Slide 47 text

ঢ়ଶભҠͷछྨ - ෆม: ఆ਺ ౳ - ႈ౳: Closable, Lazy ౳ - ඇ८ճ (ࣗݾϧʔϓΛআ͘): ϦιʔεͷετϦʔϜ ౳ - ८ճ: ࠶ར༻ՄೳΦϒδΣΫτ ౳ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 48

Slide 48 text

ඇ८ճͱ८ճ 1/2 ඇ८ճ: Ҏલͷঢ়ଶʹ໭Δ ܦ࿏͕ͳ͍ ८ճ: Ҏલͷঢ়ଶʹ໭Δ ܦ࿏͕͋Δ State1 State2 State3 State1 State2 State3 ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 49

Slide 49 text

ඇ८ճͱ८ճ 2/2 (ࣗݾϧʔϓΛআ͍ͯ) ඇ८ճ͕๬·͍͠ ΦϒδΣΫτΛ࢖͍ࣺͯΔ - ঢ়ଶΛϦηοτ͢Δ͝ͱʹ৽ͨͳΠϯελϯεΛ࡞Δ - ύϑΥʔϚϯεͰෆརͳ͜ͱ΋ // This class instance works only a given `videoPath`. class VideoPlayer(videoPath: String) { enum class State { LOADING, PLAYING, FINISHED, ERROR } ... ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 50

Slide 50 text

ඇ८ճͷྫɹ1/2 DurationLogger Ϋϥεͷ࣮૷ Measuring Finished finishMeasurement finishMeasurement ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 51

Slide 51 text

ඇ८ճͷྫɹ2/2 class DurationLogger(...) { private var state: State = State.Measuring(...) fun finishMeasureMent() { val measuringState = state as? State.Measuring ?: return ... state = State.Finished } private sealed class State { class Measuring(val startedTimeInNanos: Long) : State() object Finished : State() ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 52

Slide 52 text

८ճͷྫɹ1/2 startMeasurement ʹΑΓ࠶ར༻Մೳ Measuring Stopped finishMeasurement finishMeasurement startMeasurement startMeasurement initial state ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 53

Slide 53 text

८ճͷྫɹ2/2 class DurationLogger(...) { private var state: State = State.Stopped fun startMeasurement() { if (state == State.Stopped) { state = State.Measuring(...) } } fun finishMeasurement() { val measuringState = state as? State.Measuring ?: return ... state = State.Stopped ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 54

Slide 54 text

८ճͷ໰୊఺ ࢖͍ํΛؒҧ͍΍͍͢ private val logger = DurationLogger(...) fun runSomeHeavyTask() { logger.startMeasurement() ... runAnotherHeavyTask() // Bug: `logger` is touched internally logger.finishMeasurement() } private fun runAnotherHeavyTask() { /* Use `logger` here, too */ } ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 55

Slide 55 text

ඇ८ճͷঢ়ଶભҠͱݱ࣮ Ϟσϧͷ୯७ԽͷͨΊʹ८ճ͕ඞཁʹͳΔ - ແཧͳ८ճͷ࡟আ͸ίʔυΛΑΓෳࡶʹ͢Δ͔΋ - DurationLogger ͷྫ: Measuring <-> Paused ८ճͷൣғΛখ͘͢͞Δ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 56

Slide 56 text

८ճͷہॴԽ ८ճΛ 1 ͭͷঢ়ଶʹด͡ࠐΊΔ = େ͖ͳ८ճΛ࡞Βͳ͍ Measuring Finished Paused finish pause resume Measuring/Paused ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ८ճɾඇ८ճ

Slide 57

Slide 57 text

ঢ়ଶભҠͷछྨ - ෆม: ఆ਺ ౳ - ႈ౳: Closable, Lazy ౳ - ඇ८ճ (ࣗݾϧʔϓΛআ͘): ϦιʔεͷετϦʔϜ ౳ - ८ճ: ࠶ར༻ՄೳΦϒδΣΫτ ౳ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ·ͱΊ

Slide 58

Slide 58 text

ঢ়ଶભҠͷઃܭ: ·ͱΊ - ෆม΍ႈ౳Λར༻͢Δ - ঢ়ଶભҠͷ८ճΛ࡟আɾہॴԽ͢Δ ঢ়ଶ > ঢ়ଶભҠͷઃܭ > ·ͱΊ

Slide 59

Slide 59 text

·ͱΊ ಡΈ΍͢͞ɾؤ݈ੑͷͨΊʹঢ়ଶΛ୯७Խ͢Δ - ୯७Խͦͷ΋ͷΛ໨తʹ͠ͳ͍ ඇ௚ަͳؔ܎Λഉআ͢Δ - ؔ਺ʹΑΔஔ͖׵͑ɾ௚࿨ܕ΍ྻڍͷར༻ ঢ়ଶભҠͷઃܭʹؾΛ഑Δ - ෆมɾႈ౳ɾ८ճ ঢ়ଶ > ·ͱΊ