Slide 1

Slide 1 text

৽ݴޠ KotlinͰ Androidϓϩάϥϛϯά %SPJE,BJHJ ! ೔ຊ,PUMJOϢʔβάϧʔϓ
 ௕ᖒଠ࿠!OHTX@UBSP ͜ͱΓΜ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

͸͡Ί·ͯ͠ʂ w ௕ᖒଠ࿠!OHTX@UBSP w ࢓ࣄͰ͸+BWB "OESPJEɺͱ͖Ͳ͖4DBMB w ࡀɺֈ࠲ɺͱ͕େ޷͖

Slide 4

Slide 4 text

Θͨ͠ͱAndroid w ग़ձ͍͸೥ɻ)5"Ͱ༡ΜͰΈͨͷ͕࠷ॳ w ݸਓͰʮເͱຐ๏ͷ଴ͪ࣌ؒʯͱ͍͏ΞϓϦΛ։ ൃɾެ։͍ͯ͠·͢ ສ%- w ॻ੶΍ٕज़ܥಉਓࢽͳͲʹܞΘΒ͍͍ͤͯͨͩͨ ܦݧ͕͋Γ·͢

Slide 5

Slide 5 text

Θͨ͠ͱKotlin w ເதʹͳΓ࢝Ίͨͷ͸೥ w Ҏདྷɺϒϩά΍ษڧձͰ৘ใൃ৴ w 4PGUXBSF%FTJHO ٕධ Ͱ,PUMJOهࣄΛ࿈ࡌத

Slide 6

Slide 6 text

΋͘͡ ,PUMJOͱ͸ +BWBͱൺ΂Δ ,PUMJOͰ"OESPJEϓϩάϥϛϯά

Slide 7

Slide 7 text

1. Kotlinͱ͸

Slide 8

Slide 8 text

࣭໰ Kotlinͱ͍͏ϓϩάϥϛϯάݴޠ Λฉ͍ͨ͜ͱ͕͋Γ·͔͢ʁ

Slide 9

Slide 9 text

w !+BLF8IBSUPO͞Μ w ʮ6TJOH1SPKFDU,PUMJOGPS"OESPJEʯ w !LJSJNJO͞Μ w ʮ೥ͷ"OESPJE։ൃ͸,PUMJOͰܾ·Γ͔΋ ͠Εͳ͍ʯ Androidք۾Ͱόζͬͨʁ

Slide 10

Slide 10 text

Kotlinͱ͸

Slide 11

Slide 11 text

Kotlinͱ͸ Better Java

Slide 12

Slide 12 text

w ೥Նʹ+FU#SBJOTʹΑΓൃද w Φʔϓϯιʔε "QBDIF-JDFOTF w +7.ݴޠɺBMU+4ɺ"OESPJE΋αϙʔτ w ੩తܕ෇͚ΦϒδΣΫτࢦ޲ݴޠ Kotlinͱ͸ (ৄ͘͠)

Slide 13

Slide 13 text

ଞͷJVMݴޠͱͷҧ͍͸

Slide 14

Slide 14 text

ଞͷJVMݴޠͱͷҧ͍͸ ϚΠϧυ ݱ࣮ݟͯΔײ

Slide 15

Slide 15 text

Kotlinͷಛ௃ ؆୯ ҆શ

Slide 16

Slide 16 text

2. Javaͱൺ΂Δ

Slide 17

Slide 17 text

Hello World (Java) class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }

Slide 18

Slide 18 text

Hello World (Kotlin) fun main(args: Array) { println("Hello, world!") }

Slide 19

Slide 19 text

Hello World (Kotlin) fun main(args: Array) { println("Hello, world!") } τοϓϨϕϧʹ ؔ਺Λஔ͚Δ ഑ྻʹ δΣωϦΫε ηϛίϩϯ ෆཁ

Slide 20

Slide 20 text

ม਺ (Java) final int a = 0;

Slide 21

Slide 21 text

ม਺ (Kotlin) val a = 0

Slide 22

Slide 22 text

ม਺ (Kotlin) val a = 0 ܕਪ࿦ Մมͳม਺ʹ͸ WBSΩʔϫʔυΛ

Slide 23

Slide 23 text

Ϋϥε (Java) class User { private final long id; private final String name; public User(long id, String name) { this.id = id; this.name = Objects.requireNonNull(name); } public long getId() { return id; } public String getName() { return name; } / / toString, equals, hashCodeͱ͔ }

Slide 24

Slide 24 text

Ϋϥε (Kotlin) class User(val id: Long, val name: String) { / / toString, equals, hashCodeͱ͔ }

Slide 25

Slide 25 text

Ϋϥε (Kotlin) class User(val id: Long, val name: String) { / / toString, equals, hashCodeͱ͔ } ίϯετϥΫλҾ਺͕ ͦͷ··ϓϩύςΟʹ

Slide 26

Slide 26 text

dataΞϊςʔγϣϯ data class User(val id: Long, val name: String)

Slide 27

Slide 27 text

σʔλΫϥε val taro = User(123, "Taro") println(taro.id) / / => 123 println(taro.name) / / => Taro println(taro) / / => User(id=123, name=Taro)

Slide 28

Slide 28 text

ؔ਺ܕΠϯλϑΣʔε (Java) / / anonymous class button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toast("Clicked!"); } }); ! / / lambda button.setOnClickListener(v -> toast("Clicked!"));

Slide 29

Slide 29 text

ؔ਺ܕΠϯλϑΣʔε (Kotlin) var count = 0 button.setOnClickListener { toast("${count++}") }

Slide 30

Slide 30 text

ؔ਺ܕΠϯλϑΣʔε (Kotlin) var count = 0 button.setOnClickListener { toast("${count++}") } Ϋϩʔδϟ

Slide 31

Slide 31 text

ߴ֊ؔ਺ͰίϨΫγϣϯૢ࡞ (1..999) .filter { it % 3 == 0 || it % 5 == 0 } .reduce { a, b -> a + b }

Slide 32

Slide 32 text

ߴ֊ؔ਺ͰίϨΫγϣϯૢ࡞ (1..999) .filter { it % 3 == 0 || it % 5 == 0 } .reduce { a, b -> a + b } ʮΠϯϥΠϯؔ਺ʯ ؔ਺Ϧςϥϧ͕ల։͞Ε ΦϒδΣΫτΛੜ੒͠ͳ͍

Slide 33

Slide 33 text

ಠࣗศརϝιου (Java) / / ఆٛ static void toast(Context c, String s) {...} ! / / ݺͼग़͠ MyUtils.toast(context, "Hello");

Slide 34

Slide 34 text

ಠࣗศརϝιου (Kotlin) / / ఆٛ fun Context.toast(s: String) {...} ! / / ݺͼग़͠ context.toast("Hello") ! / / ݺͼग़͠(ActivityͳͲͷத) toast("Hello")

Slide 35

Slide 35 text

ಠࣗศརϝιου (Kotlin) / / ఆٛ fun Context.toast(s: String) {...} ! / / ݺͼग़͠ context.toast("Hello") ! / / ݺͼग़͠(ActivityͳͲͷத) toast("Hello") ϝιουΛੜ΍ͤΔ ʮ֦ுؔ਺ʯ ੩తʹղܾ͞ΕΔʂ

Slide 36

Slide 36 text

Optional (Java) String a = "hoge"; Optional b = Optional.of("fuga"); Optional c = null;

Slide 37

Slide 37 text

Optional (Java) String a = "hoge"; Optional b = Optional.of("fuga"); Optional c = null; ΦϒδΣΫτੜ੒ ୭ʹ΋OVMM͸ࢭΊΒΕͳ͍ʂ

Slide 38

Slide 38 text

Optional (Kotlin) val a: String = "hoge" val b: String = null / / NG ! val c: String? = "hoge" val d: String? = null / / OK ! d.toUpperCase() / / NG

Slide 39

Slide 39 text

NULL҆શ val a: String? = "hoge" val b: String? = null ! if (a != null) a.toUpperCase() else null / / => HOGE if (b != null) b.toUpperCase() else null / / => null ! a?.toUpperCase() / / => HOGE b?.toUpperCase() / / => null

Slide 40

Slide 40 text

NULL҆શ val a: String? = "hoge" val b: String? = null ! if (a != null) a.toUpperCase() else null / / => HOGE if (b != null) b.toUpperCase() else null / / => null ! a?.toUpperCase() / / => HOGE b?.toUpperCase() / / => null OVMMͰͳ͍͜ͱ͕อূ͞Ε͍ͯΔ ৔ॴͰ͸/PU/VMMܕͱͯ͠ѻ͑Δ

Slide 41

Slide 41 text

3. KotlinͰ Androidϓϩάϥϛϯά

Slide 42

Slide 42 text

Android StudioͰ࢖͏ ී௨ʹϓϩδΣΫτΛ࡞੒ +BWB,PUMJOม׵ Φϓγϣϯ CVJMEHSBEMFͷઃఆ ָ͍͠,PUMJOϥΠϑͷ࢝·Γʂ

Slide 43

Slide 43 text

KotterKnife w,PUMJO൛#VUUFS,OJGF w࡞ऀ͸+BLF8IBSUPO͞Μ wಋೖ΍࢓૊Έղઆ͸ͪ͜ΒΛࢀর IUUQRJJUBDPNOHTX@UBSPJUFNTDEDEE

Slide 44

Slide 44 text

KotterKnife ࢖༻લ var button: Button? = null ! button = findViewById(R.id.button) as Button ! button?.setOnClickListener {...}

Slide 45

Slide 45 text

KotterKnife ࢖༻લ var button: Button? = null ! button = findViewById(R.id.button) as Button ! button?.setOnClickListener {...} "DUJWJUZͱ͔ͷϓϩύςΟ ຖ౓ͷpOE7JFX#Z*E ͦͯ͠Ωϟετʜ

Slide 46

Slide 46 text

KotterKnife ࢖༻ޙ var button: Button by bindView(R.id.button) ! button.setOnClickListener {...}

Slide 47

Slide 47 text

KotterKnife ࢖༻ޙ var button: Button by bindView(R.id.button) ! button.setOnClickListener {...} ϓϩύςΟ ಉ͡ CZΩʔϫʔυʹଓ͚ͯ 3JECVUUPOΛόΠϯυ pOE7JFX#Z*EෆཁͰ ී௨ʹ࢖͑ΔΑ͏ʹͳͬͯΔ

Slide 48

Slide 48 text

Kotlin Android Extensions w"4 ͱ*OUFMMJ+*%&" ͷϓϥάΠϯ wpOE7JFX#Z*EΛۦஞ͢Δ΍ͭ wνϡʔτϦΞϧ͸ͪ͜ΒΛࢀর IUUQLPUMJOMBOHPSHEPDTUVUPSJBMTBOESPJEQMVHJOIUNM

Slide 49

Slide 49 text

࢖༻ྫ import kotlinx.android.synthetic.activity_main.button ! public class MainActivity: Activity() { override fun onCreate(savedInstaceState: Bundle?) { super.onCreate(savedInstaceState) setContentView(R.layout.activity_main) button.setOnClickListener {...}

Slide 50

Slide 50 text

Anko w͍ΖΜͳ%4- wओʹϨΠΞ΢τΛ૊Ή%4- wܕ҆શɺ؆ܿɾϦʔμϒϧɺ෦඼Խɾ ࠶ར༻ੑ wৄࡉ͸ͪ͜Β IUUQTHJUIVCDPN+FU#SBJOTBOLP

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

·ͱΊ w ,PUMJO͸ϓϩάϥϚʹ༏͍͠ʮݱ࣮ࢦ޲ʯݴޠ w "OESPJEͰ࢖͏ͱ޾ͤʹͳΕΔ͔΋

Slide 53

Slide 53 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Let’s enjoy Kotlin!