Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin on the Cloud

Kotlin on the Cloud

Slides for my 'Kotlin on the Cloud' talk at the Google Developer Group Lisboa's Kotlin Night.

João Carvalho

October 12, 2017
Tweet

More Decks by João Carvalho

Other Decks in Programming

Transcript

  1. Kotlin on the
    Cloud
    João Carvalho - GDG Lisboa - Oct 12 2017

    View Slide

  2. About me

    View Slide

  3. About me
    ● Senior Developer / Team Lead @ Talkdesk
    ● Backend Developer
    ● IST Alumni (Student & Developer)
    ● PT.JUG Speaker
    ● Follow me on Twitter @johnkarva

    View Slide

  4. Cloud Native Apps
    https://pivotal.io/cloud-native

    View Slide

  5. “Cloud-native is an approach to building and
    running applications that fully exploits the
    advantages of the cloud computing delivery
    model. Cloud-native is about how
    applications are created and deployed, not
    where.”

    View Slide

  6. ● Devops
    ● Continuous Delivery
    ● Microservices
    ● Containerization

    View Slide

  7. Predictability

    View Slide

  8. 12 Factor App
    1. Single codebase, multiple deploys
    2. Explicit Dependencies
    3. Store Config in Environment
    4. Backing Services as resources
    5. Separate Build, Release, Execution
    6. Standalone (Volatile) Process
    7. Port Binding
    8. Multiple Process Types
    9. Disposability
    10. Environment Parity
    11. Logs as Event Streams
    12. One-off Admin Tasks

    View Slide

  9. OS-Agnostic

    View Slide

  10. Auto-Scaling

    View Slide

  11. Independence

    View Slide

  12. Quick Recovery

    View Slide

  13. Agility

    View Slide

  14. Kotlin

    View Slide

  15. Why not Java 8/9?

    View Slide

  16. Null Safety

    View Slide

  17. public void printName(Person person) {
    System.out.println(person.getName());
    }

    View Slide

  18. public void printName(Person person) {
    System.out.println(person.getName());
    }
    null

    View Slide

  19. View Slide

  20. fun printName(person: Person) {
    println(person.name)
    }

    View Slide

  21. printName(null)
    ERROR: Null cannot be a value of non-null
    type Person.

    View Slide

  22. fun printName(person: Person?) {
    if (person != null) {
    println(person.name)
    }
    }

    View Slide

  23. Safe Navigation

    View Slide

  24. private String safeGetName(Person person) {
    return person == null ? null :
    person.getName();
    }

    View Slide

  25. fun safeGetName(person: Person?): String? {
    return person?.name
    }

    View Slide

  26. fun safeGetName(person: Person?): String {
    return person?.name ?: "Unknown"
    }

    View Slide

  27. Properties

    View Slide

  28. class Person(name: String) {
    private val name: String
    init {
    this.name = name
    }
    }

    View Slide

  29. class Person(private val name: String)

    View Slide

  30. Delegated Properties

    View Slide

  31. val lazyValue: String by lazy {
    println("computed!")
    "Hello"
    }

    View Slide

  32. Extension Functions

    View Slide

  33. fun String.helloize() = "Hello $this"
    "World".helloize()

    View Slide

  34. Data Classes

    View Slide

  35. public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }
    (...)
    }

    View Slide

  36. public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @Override
    public boolean equals(Object o) {
    (Stuff generated by your IDE)
    }
    @Override
    public int hashCode() {
    int result = name.hashCode();
    result = 31 * result + age;
    return result;
    }

    View Slide

  37. View Slide

  38. data class Person(var name: String,
    var age: Int)

    View Slide

  39. data class Person(val name: String,
    val age: Int)

    View Slide

  40. val john = Person("John", 21)
    val olderJohn = john.copy(age = 78)

    View Slide

  41. And much more...
    ● No Semicolons!
    ● Lambda Expressions and Inline Functions
    ● Type inference
    ● Named Arguments
    ● Default Values
    ● String Interpolation
    ● Ranges
    ● Immutable Collections (Kind of)
    ● Collection helpers
    ● Infix Functions
    ● DSL Support

    View Slide

  42. Performance

    View Slide

  43. Tooling

    View Slide

  44. Getting Started

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. @RestController
    @SpringBootApplication
    public class DemoApplication {
    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello() {
    return "Hello World!";
    }
    }

    View Slide

  50. http://shop.oreilly.com/product/0636920038252.do

    View Slide

  51. Cloud-Native Kotlin?

    View Slide

  52. View Slide

  53. https://docs.spring.io/spring/docs/current/spring-framework-reference/kotlin.html

    View Slide

  54. Demo Time!

    View Slide

  55. Questions?

    View Slide