Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

San Diego Kotlin User Group www.meetup.com/sd-kotlin www.linkedin.com/company/sd-kotlin github.com/sdkotlin @sdkotlin on Twitter, Facebook, and Instagram #san-diego on kotlinlang.slack.com

Slide 3

Slide 3 text

Our Mission Advancing the Kotlin programming community in San Diego, and beyond.

Slide 4

Slide 4 text

Raffle! $1

Slide 5

Slide 5 text

A word from our sponsors...

Slide 6

Slide 6 text

Forging STEM pioneers https://www.brandt.academy/

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Call for Presenters Get your 15, 30, 45+ minutes of fame by sharing your favorite Kotlin-related whatever!

Slide 11

Slide 11 text

Call for Sponsors Get your name up in lights, and the eternal gratitude of San Diego’s Kotlin engineers!

Slide 12

Slide 12 text

Announcements? ● Hiring? ● Looking for work? ● Other meetups?

Slide 13

Slide 13 text

Dana Gibson ● Rocking his Kotlin shirt at the Neil Young concert

Slide 14

Slide 14 text

Kotlin News ● Kotlin 1.3 M1! ○ Coroutines graduating to stable ○ Assignment of when subject to variable ○ Unsigned integer types and arithmetic ○ Function types with 255 parameters ○ Multiplatform Random API ○ Companion object for Boolean

Slide 15

Slide 15 text

Try Kotlin Online https://try.kotlinlang.org/

Slide 16

Slide 16 text

Let’s slack off! http://slack.kotlinlang.org/ #san-diego

Slide 17

Slide 17 text

TDD in Kotlin Ian Brandt

Slide 18

Slide 18 text

A Set of Unit Test Rules A test is not a unit test if: ● It talks to the database ● It communicates across the network ● It touches the file system ● It can't run at the same time as any of your other unit tests ● You have to do special things to your environment (such as editing config files) to run it

Slide 19

Slide 19 text

Test and Assertion Frameworks ● Mostly as in Java ○ JUnit ○ TestNG ○ AssertJ ○ Mockito

Slide 20

Slide 20 text

Test and Assertion Frameworks ● Kotlin-specific frameworks evolving ○ Mockk ○ Atrium ○ KotlinTest ○ Spek ○ kotlin.test

Slide 21

Slide 21 text

The Cycles of TDD ● The Three Laws of TDD (seconds) ● The Red-Green-Refactor Cycle (minutes) ● The Specific/Generic Cycle (deca-minutes) ● The Architectural Boundaries Cycle (hours)

Slide 22

Slide 22 text

The Three Laws of TDD Second-by-Second ● Thou shalt not write any production code without first writing a failing unit test ● Thou shalt not write any more of a unit test than is necessary to fail (and not compiling is failing) ● Thou shalt not write any more production code than is needed to make the most recent failing unit test pass

Slide 23

Slide 23 text

The Red-Green-Refactor Cycle Minute-by-Minute ● Get RED ○ Just focus on the next test. ● Get GREEN ○ Just focus on the simplest way to make that test pass. Don’t worry about refactoring! ● Now REFACTOR ○ Keep the same tests passing

Slide 24

Slide 24 text

The Specific/Generic Cycle ~Ten Minutes ● As the tests get more specific, the code gets more generic ○ I.e. if your next test drives the code to be more specific, maybe you picked the wrong next test ○ You’ll know if you get stuck

Slide 25

Slide 25 text

The Architecture Boundaries Cycle Hour-by-Hour ● Pause to consider whether you’re evolving clean architecture ○ Are you Red-Green-Refactoring your way to a monolith? ● Refactor as needed with your awesome suite of super-fast unit tests

Slide 26

Slide 26 text

The Transformation Priority Premise ● Refactoring: Changing the structure of code without changing its behavior ● Transforming: Changing the behavior

Slide 27

Slide 27 text

The Transformation Priority Premise 1. ({} → nil) no code at all → code that employs nil 2. (nil → constant) 3. (constant → constant+) a simple constant to a more complex constant 4. (constant → scalar) replacing a constant with a variable or an argument 5. (statement → statements) adding more unconditional statements. 6. (unconditional → if) splitting the execution path 7. (scalar → array) 8. (array → container) 9. (statement → tail-recursion) 10. (if → while) 11. (statement → non-tail-recursion) 12. (expression → function) replacing an expression with a function or algorithm 13. (variable → assignment) replacing the value of a variable. 14. (case) adding a case (or else) to an existing switch or if

Slide 28

Slide 28 text

Let’s code!