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

Android TVとXamarinとKotlin

Android TVとXamarinとKotlin

Mayuki Sawatari

January 21, 2017
Tweet

More Decks by Mayuki Sawatari

Other Decks in Programming

Transcript

  1. View Slide

  2. http://github.com/mayuki

    View Slide

  3. Android TV
    AgqrPlayer for Android TV
    Xamarin Kotlin

    View Slide

  4. View Slide

  5. TV Android
    #10ft=3m …
    Android==

    View Slide

  6. UI
    https://www.google.com/design/spec-tv/
    Recommendation

    View Slide

  7. Design Pattern: Browse Lane

    View Slide

  8. Design Pattern: Detail View

    View Slide

  9. Design Pattern: Wizard

    View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. View Slide

  22. Android
    ( )

    View Slide

  23. adb shell & logcat

    View Slide

  24. View Slide

  25. A&G+

    View Slide

  26. View Slide

  27. http://agqr.jp/

    View Slide

  28. View Slide

  29. View Slide

  30. presents
    17:00 30
    YouTube
    https://www.youtube.com/playlist?list=PLAJedE0KWalQUzGD354wuweVYEdJxqwTg

    View Slide

  31. A&G+

    View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. JetBrains JVM
    Better Java
    Java
    IntelliJ(Android Studio) IDE

    View Slide

  37. AgqrPlayer for Android TV Xamarin Kotlin

    View Slide

  38. ( )

    View Slide

  39. View Slide

  40. Kotlin
    null
    Primary Constructor
    if, when
    Delegation
    override by default
    Type Erasure
    Lazy

    View Slide

  41. C# Java
    null

    View Slide

  42. class Greeter(val message: String) {
    private val prefix = "Hello!"
    fun hello() {
    println("$prefix $message")
    }
    }
    class Program {
    fun main() {
    Greeter("Konnichiwa!").hello() // => Konnichiwa!
    }
    }

    View Slide

  43. // 再代入不可 (プロパティも同じ)
    val valueA = "Hello"
    valueA = "Konnichiwa!" // Compile Error: Val cannot reassigned
    var valueB = "Hello"
    valueB = "Konnichiwa!" // OK
    // null許容
    var valueNullable: String? = "Hogehoge"
    valueNullable = null
    // null非許容
    var valueNonNullable = "Mogemoge"
    valueNonNullable = null // Error: Null can not be a value of a non-null
    type String

    View Slide

  44. C#
    class NanikaData(val valueA: String, val valueB: Int) {
    }
    NanikaData("Hoge", 1).valueA // => Hoge

    View Slide

  45. (0..10)
    // ラムダ式のデフォルト引数 it
    .map({ it * 2 })
    // カッコ不要
    .filter { it > 5 }
    // 引数に名前を付ける
    .forEach { i -> println(i) }

    View Slide

  46. val value = NantokaType.ARIENAI
    // when, if
    val message = when (value) {
    NantokaType.SUGOI -> "Sugoi"
    NantokaType.YABAI -> "Yabai"
    else -> "Majikayo"
    }
    println(message) // => "Majikayo"
    enum class NantokaType {
    SUGOI, YABAI, ARIENAI
    }

    View Slide

  47. var valueA: String? = "nantoka"
    // この時点では null かもしれないので ?. または !! が必要
    valueA?.substring(0, 3)
    if (valueA == null) { return }
    // ここに来れば null ではないと判断され null-safe/non-null
    assert 不要
    valueA.substring(0, 3)

    View Slide

  48. val valueB: Any = "Nantoka" // Any == Object
    if (valueB is String) {
    valueB.substring(0, 3) // 値が String だと判断できる
    }
    valueB.substring // Compile Errorで呼べない
    TypeScript

    View Slide

  49. interface BaseA { fun hoge() }
    interface BaseB { fun moge() }
    class BaseAImpl : BaseA {
    override fun hoge() = println(“BaseA”)
    }
    class BaseBImpl : BaseB {
    override fun moge() = println(“BaseB”)
    }
    class AAndBImpl(b: BaseB) : BaseA by BaseAImpl(), BaseB by b {
    // BaseAの実装BaseAImpl, BaseBはb
    // mix-in
    }
    class NantokaKantoka {
    fun methodA() {
    AAndBImpl(BaseBImpl()).hoge() // => BaseA
    AAndBImpl(BaseBImpl()).moge() // => BaseB
    }
    }

    View Slide

  50. Delegated Proeprties

    View Slide

  51. View Slide

  52. View Slide

  53. Kotlin
    Kotlin JVM 1

    View Slide

  54. IDE

    View Slide

  55. No LINQPad & No ConsoleApplication
    REPL&Playground

    View Slide

  56. is hard

    View Slide

  57. Xamarin

    View Slide

  58. C#

    View Slide

  59. View Slide

  60. Android TV
    A&G+
    Kotlin
    C#

    View Slide