Slide 1

Slide 1 text

(PΛ͸͡ΊΔʹ͋ͨͬͯ ஌͓͍ͬͯͯ΄͍͠πʔϧ΍ςετ Part2 8PNFO8IP(P5PLZP!NJDDIJF HPMBOHUPLZP

Slide 2

Slide 2 text

8PNFO8IP(P • 8PNFO8IP(P͸ɺ೥ʹαϯϑϥϯ γείͰɺঁੑɾδΣϯμʔϚΠϊϦςΟͷํ ͷͨΊͷ (PͷάϩʔόϧίϛϡχςΟͱͯ͠ ઃཱ͞Ε·ͨ͠ɻ • 8PNFO8IP(P5PLZP͸ɺ೥݄ ʹ೔ຊͰॳΊͯͷ 8PNFO8IP(Pͷίϛϡ χςΟͱͯ͠ઃཱ͞Ε·ͨ͠ɻ • ݄ʹҰճ ϫʔΫγϣοϓܗࣜͰͷษڧձΛ։ ࠵͍ͯ͠·͢ɻ IUUQTXXXXPNFOXIPHPPSH

Slide 3

Slide 3 text

 ςετʹ͍ͭͯ  ͪΐͬ͜ͱ

Slide 4

Slide 4 text

!NJDDIJFCFBS 8PNFO8IP(P5PLZP 1SPKFDU.BOBHFS!-*/& (P (PPHMF$MPVE1MBUGPSN ,FZCPBSE 7JN #FBS #FFS #FBS $ZDMJOH ॴଐ ࢓ࣄ ޷͖ͳ΋ͷ

Slide 5

Slide 5 text

ςετ

Slide 6

Slide 6 text

͍ΖΜͳςετ͕͋Δ ݴޠ ςετϑϨʔϜϫʔΫ 1)1 1)16OJU $PEFDFQUJPO 1)14QFD  +BWB +6OJU 5FTU/(  3VCZ .JOJ5FTU 34QFD  +BWB4DSJQU +FTU +BTNJOF 

Slide 7

Slide 7 text

(Pͷςετ UFTUJOH func Janken(you, challenger Hand) Result { r := (you - challenger + 3) % 3 return Result(r) } func TestJanken(t *testing.T) { … } ͜ΜͳॲཧΛςετ͍ͨ͠ɻ 5FTU\ؔ਺໊^ খจࣈͰ͸࢝·Βͳ͍

Slide 8

Slide 8 text

(Pͷςετ UFTUJOH • @UFTUHPͰऴΘΔ໊લͷϑΝΠϧΛ࡞੒͢Δɻ • @UFTUHP͸ ύοέʔδϏϧυʹ͸ؚ·Εͳ͍ɻ • @UFTUHP͸ HPUFTUΛ͢Δͱ͖ͷΈ ධՁ͞ΕΔɻ

Slide 9

Slide 9 text

5BCMF%SJWFO5FTU func TestJanken(t *testing.T) { tests := []struct { user, computer Hand want Result }{ {Rock, Rock, Even}, {Rock, Paper, Lose}, {Rock, Scissors, Win}, … } for _, tt := range tests { got := Janken(tt.user, tt.computer) if got != tt.want { t.Errorf("%v, want %v", got, tt.want) } } } ςʔϒϧͰ༻ҙͨ͠ςετΛϧʔϓͰॲཧ͢Δɻ === RUN TestJanken --- PASS: TestJanken (0.00s) PASS All tests passed.

Slide 10

Slide 10 text

4VC5FTU func TestJanken(t *testing.T) { tests := []struct { name string user, computer Hand want Result }{ {"RockEven", Rock, Rock, Even}, {"RockLose", Rock, Paper, Lose}, {"RockWin", Rock, Scissors, Win}, … } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := Janken(tt.user, tt.computer) if got != tt.want { t.Errorf("%v, want %v", got, tt.want) } }) } } === RUN TestJanken === RUN TestJanken/RockEven === RUN TestJanken/RockLose === RUN TestJanken/RockWin --- PASS: TestJanken (0.00s) --- PASS: TestJanken/RockEven (0.00s) --- PASS: TestJanken/RockLose (0.00s) --- PASS: TestJanken/RockWin (0.00s) PASS All tests passed.

Slide 11

Slide 11 text

4VC5FTU for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() got := Janken(tt.user, tt.computer) if got != tt.want { t.Errorf("%v, want %v", got, tt.want) } }) } ςετͷฒྻॲཧͷ੍ޚʹ΋ར༻Ͱ͖Δɻ

Slide 12

Slide 12 text

.BJO func TestMain(m *testing.M) { fmt.Println("Janken Test Started.") os.Exit(m.Run()) } ςετͷલॲཧΛઃఆ͢Δ͜ͱ͕Ͱ͖Δɻ • Ҿ਺ͷύʔε • ؀ڥม਺ͷϩʔυ • σʔλϕʔεͷ઀ଓ

Slide 13

Slide 13 text

5FTUͷ࣮ߦ lHPIFMQUFTUz΍ lHPIFMQUFTUGMBHzʹ͢΂͕ͯɻ IUUQTHPMBOHPSHQLHUFTUJOH // すべてのテストをする go test -run ’’ // 処理名の先頭が “Bear” を含むテストをする go test -run Bear // 処理名の先頭が “Bear” を含み, サブテストが “A“ にマッチするテストをする go test -run Bear/A // サブテストが “A” にマッチするテストをする go test -run /A

Slide 14

Slide 14 text

5FTUJOH͕Ͱ͖Δ͜ͱ ͦͷଞ • ϕϯνϚʔΫΛऔΔɻ • ΧόϨοδΛऔಘ͢Δɻ • ςετΛεΩοϓ͢Δɻ

Slide 15

Slide 15 text

͓·͚ (P1MBZHSPVOEͰ΋ςετΛॻ͘͜ͱ͕Ͱ͖Δɻ IUUQTQMBZHPMBOHPSHQPY#B4Z-

Slide 16

Slide 16 text

ͪΐͬ͜ͱ

Slide 17

Slide 17 text

஌͓ͬͯ͘ͱΑ͍͜ͱ 1 άϩʔόϧͱϓϥΠϕʔτ // パッケージの中だけで利⽤できる func hello() { fmt.Println("Hello, Gopher!!") } // パッケージの外からも利⽤できる func Hello() { fmt.Println("Hello, Gopher!!") }

Slide 18

Slide 18 text

஌͓ͬͯ͘ͱྑ͍͜ͱ 2 EFGFSͷ͜ͱ func main() { // 関数の最後に実行 defer fmt.Println("gopher") fmt.Println("hello") } hello gopher Program exited. • EFGFSΛແࢹͯ͠ऴྃ͢Δॲཧ͕͋Δɻ PT&YJU • ϧʔϓม਺͸ಉ͡ࢀরઌͳͷͰ ͜͏͢Δͱ͍͍ɻ defer func() { fmt.Println(i) }() // loop variable i captured by func literal defer func(i int) { fmt.Println(i) }(i) // OK

Slide 19

Slide 19 text

஌͓ͬͯ͘ͱΑ͍͜ͱ 3 TXJUDIͷจ๏ switch bear { case PolarBear: fmt.Println("白い") // break がいらない case AmericanBlackBear: fmt.Println("黒い") // break がいらない … }

Slide 20

Slide 20 text

஌͓ͬͯ͘ͱྑ͍͜ͱ 4 ؔ਺ͷ໭Γ஋ func main() { a, b, c := example("ビール", "日本酒") fmt.Println(a) fmt.Println(b) fmt.Println(c) } // 複数の戻り値を指定することができる func example(a, b string) (c, d, e string) { return a, b, fmt.Sprintf("%s, %s", a, b) }

Slide 21

Slide 21 text

HPMBOHUPLZP ͸͡Ίͯຊʂ