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

はじめのKotlin

 はじめのKotlin

ABC 2017 Autumn(Android Bazaar and Conference 2017 in KAWASAKI)(http://abc.android-group.jp/2017a/ )で発表したスライドです。

Taro Nagasawa

October 16, 2017
Tweet

More Decks by Taro Nagasawa

Other Decks in Programming

Transcript

  1. 自己紹介 • 長澤 太郎(たろーって呼んでね) • @ngsw_taro • エムスリー株式会社 • ディズニーが大好き!

    エムスリーは 国内最大規模の 医療情報プラット フォームを開発・ 運営しています。 エンジニア募 集中!
  2. Kotlinとは? • 静的型付けオブジェクト指向言語 • いわゆる「JVM言語」 • 開発元: JetBrains • 2016年2月に正式リリース

    • Apache License ver2.0 静的型付け: プログラムの実行前(コンパイル時)に型が決まる オブジェクト指向: Javaと同じく対象物(オブジェクト)に着目してプログラ ムを組み上げる
  3. Kotlinとは? • 静的型付けオブジェクト指向言語 • いわゆる「JVM言語」 • 開発元: JetBrains • 2016年2月に正式リリース

    • Apache License ver2.0 Java仮想マシン(JVM)の上で動作する「Javaバイトコード」 にコンパイルされるようなプログラミング言語 JavaScriptやLLVMもターゲットに!?
  4. Kotlinとは? • 静的型付けオブジェクト指向言語 • いわゆる「JVM言語」 • 開発元: JetBrains • 2016年2月に正式リリース

    • Apache License ver2.0 統合開発環境 IntelliJ IDEAの開発元の会社。 Googleと共同で財団の設立。 大きな後ろ盾があることを意味する。
  5. Kotlinとは? • 静的型付けオブジェクト指向言語 • いわゆる「JVM言語」 • 開発元: JetBrains • 2016年2月に正式リリース

    • Apache License ver2.0 オープンソースです。 ソースコードを自由に入手・改造できる!
  6. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 パッケージがファイルシステムと無関係 : srcディレクトリ直下に置いたにも関わらず、パッ ケージを切れる。
  7. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 funキーワードで関数を定義
  8. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 トップレベル(パッケージ直下) に関数を置ける
  9. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 main関数がKotlinプログラムの エントリポイント
  10. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 変数(引数)の型は後置
  11. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 配列はクラスで表現。 特別な文法はない
  12. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 Kotlin標準ライブラリの 関数呼び出し
  13. package sample fun main(args: Array<String>) { println("Hello, world!") } Hello

    Worldに見るKotlinの特徴 セミコロン不要
  14. いろんなオブジェクトをprintしてみよう! fun main(args: Array<String>) { println(123) // 整数 println(123.4) //

    浮動小数点数 println(true) // 真偽値 println('A') // 文字 println("Hello") // 文字列 }
  15. オブジェクトを操作しよう! fun main(args: Array<String>) { println(1 + 2) //=> 3

    println(2 * 3) //=> 6 println(3 * 4.0) //=> 12.0 println(4 < 5) //=> true println('A'.toDigit()) //=> false println("Hi".toUpperCase()) //=> Hi }
  16. fun main(args: Array<String>) { println(1 + 2) //=> 3 println(2

    * 3) //=> 6 println(3 * 4.0) //=> 12.0 println(4 < 5) //=> true println('A'.toDigit()) //=> false println("Hi".toUpperCase()) //=> HI } オブジェクトを操作しよう! 演算子やメソッドを呼び出したり、 だいたいJavaと同じ感じ!
  17. オブジェクトに名前をつけよう! fun main(args: Array<String>) { val userName: String = "たろう"

    val userAge: Int = 28 println("${userName}さんは${userAge}歳です") }
  18. fun main(args: Array<String>) { val userName: String = "たろう" val

    userAge: Int = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! オブジェクトに名前を付けることで、 以降この名前でオブジェクトを参照できる
  19. fun main(args: Array<String>) { val userName: String = "たろう" val

    userAge: Int = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! このキーワードがミソ
  20. fun main(args: Array<String>) { val userName: String = "たろう" val

    userAge: Int = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! 名前(変数)
  21. fun main(args: Array<String>) { val userName: String = "たろう" val

    userAge: Int = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! 変数の型
  22. fun main(args: Array<String>) { val userName: String = "たろう" val

    userAge: Int = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! 「文字列テンプレート」と呼ばれる機能により ${...}内が評価された結果が、文字列リテラルに埋め込まれる
  23. fun main(args: Array<String>) { val userName = "たろう" val userAge

    = 28 println("${userName}さんは${userAge}歳です") } オブジェクトに名前をつけよう! 型を省略することができる=型推論
  24. 条件分岐 val score = 65 if (score >= 60) {

    println("合格") } else { println("失格") } Javaや他の言語と同じ感じ
  25. ifは式(値を返すよ) val score = 65 val message = if (score

    >= 60) { "合格だよ〜ん" } else { "残念、失格" } println(message) //=> 合格だよ〜ん
  26. val names = listOf("foo", "bar", "baz") for(name in names) {

    println(name) } forループ リストを作る関数listOf
  27. val names = listOf("foo", "bar", "baz") for(name in names) {

    println(name) } forループ Javaで言う拡張for文のイメージ
  28. 代入 val nums = listOf(1, 4, 2) var sum =

    0 for(n in nums) { sum = sum + n } println(sum) //=> 7
  29. val nums = listOf(1, 4, 2) var sum = 0

    for(n in nums) { sum = sum + n } println(sum) //=> 7 代入 varにより代入可能となる sumの指す値は、場所や時間によって変化し得る
  30. 安全呼び出し s?.length if (s != null) s.length else null 同じ

    if-elseは式 (評価されて値になる)
  31. 安全呼び出し s?.length if (s != null) s.length else null 同じ

    if-elseは式 (評価されて値になる) foo?.bar()?.baz()?.qux() メソッドチェーンで役立つ
  32. KotlinコードをAndroidで動かす方法 1. File→New→New Project… またはStart a Android Studio project 2.

    すべてデフォルトの設定でOK 3. ウィザードのFinishボタンを押す 4. Tools→Kotlin→Configure Kotlin in Project 5. 「Kotlin 1.1.51」になっていることを確認してOK 6. Code→Convert Java File to Kotlin File 7. ビルド&実行
  33. 簡単に解説 class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }
  34. 簡単に解説 class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 継承 + スーパクラスのコンストラクタ呼び出し
  35. class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main) } } 簡単に解説 オーバライドするために必須
  36. class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main) } } 簡単に解説 BundleのNullable型(null許容型)
  37. まとめ • Kotlin概要 ◦ 静的型付けオブジェクト指向JVM言語 ◦ JetBrains, Googleにより開発・サポート • HelloWorld

    • 基本的な文法 ◦ if-else式、for文、型推論、文字列テンプレートなど • 特徴的な機能 ◦ 拡張関数: 既存の型にメソッドを追加してるっぽく ◦ Null安全: nullの扱いを慎重に安全に