Share
Embed
Transcript
33 slides
-
Copyright © Sansan, Inc. All rights reserved. > KotlinをJavaで理理解する AndroidでKotlin勉強会
@Sansan 2016.1.15 ⼭山本純平 1 -
Copyright © Sansan, Inc. All rights reserved. > ࣗݾհ
⼭山本純平 Sansan株式会社 Eight事業部 EightのAndroid版の開発 twitter: @boohbah github: https://github.com/yamamotoj 公開ライブラリ Subskription: KotlinでRxJavaを便便利利にするライブラリ https://github.com/yamamotoj/Subskription -
Copyright © Sansan, Inc. All rights reserved. 2015年年Play Storeの
ベストアプリに選ばれました! (2年年連続) -
Copyright © Sansan, Inc. All rights reserved. > &JHIUΞϓϦͱ,PUMJO
2015/8ࠒ͔Β͍࢝Ί طଘͷJavaϓϩδΣΫτʹಋೖ m13͘Β͍͔ΒຊؾΛग़͢ ݱࡏ৽نίʔυ΄΅KotlinͰهड़ ࠓͷͱ͜ΖKotlinൺ12%͘Β͍ -
Copyright © Sansan, Inc. All rights reserved. > ,PUMJO͕+BWB͔ΒͲ͏ݟ͑Δ͔
• val / var • Null safety • Singleton object • Companion object • Package level function • 拡張関数 • Operator Overload • 関数オブジェクト • ⾼高階関数 • 関数のデフォルト引数 • Interfaceのデフォルト実装 • Sealed class -
Copyright © Sansan, Inc. All rights reserved. > WBMWBS
// Kotlin class KotlinClass { val someVal = “value" var someVar = "variable" } // Java KotlinClass kotlinObj = new KotlinClass(); kotlinObj.getSomeVal(); // getter only kotlinObj.getSomeVar(); // getter/setter kotlinObj.setSomeVar("new value"); -
Copyright © Sansan, Inc. All rights reserved. > WBMWBS
// Kotlin class KotlinClass { @JvmField val someVal = "value" @JvmField var someVar = "variable" } // Java KotlinClass kotlinClass = new KotlinClass(); String val = kotlinClass.someVal; kotlinClass.someVal = "new value”; // build error String var = kotlinClass.someVar; kotlinClass.someVar = "new value"; -
Copyright © Sansan, Inc. All rights reserved. > /VMMTBGFUZ
// Kotlin class KotlinClass { var nullable:String? = null var notNull:String = "not null" } // Java KotlinClass obj = new KotlinClass(); String str1 = obj.getNullable(); String str2 = obj.getNotNull(); -
Copyright © Sansan, Inc. All rights reserved. > /VMMTBGFUZ
// Kotlin class KotlinClass { var nullable:String? = null var notNull:String = "not null" } // Java KotlinClass obj = new KotlinClass(); obj.setNullable(null); obj.setNotNull(null); // NullPointerException! -
Copyright © Sansan, Inc. All rights reserved. > /VMMTBGFUZ
// Kotlin class KotlinClass { var nullableInt:Int? = null var notNullInt:Int = 1 } // Java KotlinClass obj = new KotlinClass(); Integer i = obj.getNullableInt(); int i2 = obj.getNotNullInt(); -
Copyright © Sansan, Inc. All rights reserved. > 4JOHMFUPOPCKFDU
// Kotlin object KotlinSingleton { fun func() {} } // Java KotlinSingleton.INSTANCE.func(); -
Copyright © Sansan, Inc. All rights reserved. > 4JOHMFUPOPCKFDU
// Kotlin object KotlinSingleton { @JvmStatic fun func() {} } // Java KotlinSingleton.func(); -
Copyright © Sansan, Inc. All rights reserved. > $PNQBOJPOPCKFDU
// Kotlin class KotlinClass { companion object{ fun staticMethod(){} } } // Java KotlinClass.Companion.staticMethod(); -
Copyright © Sansan, Inc. All rights reserved. > $PNQBOJPOPCKFDU
// Kotlin class KotlinClass { companion object{ @JvmStatic fun staticMethod(){} } } // Java KotlinClass.staticMethod(); -
Copyright © Sansan, Inc. All rights reserved. > 1BDLBHFMFWFMGVODUJPO
// KotlinFile.kt fun topLevelFunction(){} // Java KotlinFileKt.topLevelFunction(); -
Copyright © Sansan, Inc. All rights reserved. > 1BDLBHFMFWFMGVODUJPO
// KotlinFile.kt @file:JvmName(“KotlinFunctions”) package demo fun topLevelFunction(){} // Java KotlinFunctions.topLevelFunction(); -
Copyright © Sansan, Inc. All rights reserved. > 1BDLBHFMFWFMGVODUJPO
// KotlinFile.kt @file:JvmName(“KotlinFunctions”) @file:JvmMultifileClass package demo fun topLevelFunction(){} // KotlinFile2.kt @file:JvmName(“KotlinFunctions”) @file:JvmMultifileClass package demo fun topLevelFunction2(){} // Java KotlinFunctions.topLevelFunction(); KotlinFunctions.topLevelFunction2(); -
Copyright © Sansan, Inc. All rights reserved. > ֦ுؔ
// KotlinFile.kt fun String.prepend(prefix:String) = prefix + this // Java KotlinFileKt.prepend("Kotlin", “Hello! "); // -‐> Hello! Kotlin -
Copyright © Sansan, Inc. All rights reserved. > ֦ுؔ
// KotlinFile.kt @file:JvmName(“KotlinExtensions”) package demo fun String.prepend(prefix:String) = prefix + this // Java KotlinExtensions.prepend("Kotlin", “Hello! "); // -‐> Hello! Kotlin -
Copyright © Sansan, Inc. All rights reserved. > 0QFSBUPSPWFSMPBE
// Kotlin class KotlinClass(val i:Int) { operator fun plus(o: KotlinClass) : KotlinClass { return KotlinClass(this.i + o.i) } } val o1 = KotlinClass(1) + KotlinClass(2) // Java KotlinClass o1 = new KotlinClass(1); KotlinClass o2 = new KotlinClass(1); KotlinClass o3 = o1 + o2; //ϏϧυΤϥʔ o1.plus(o2); -
Copyright © Sansan, Inc. All rights reserved. > ؔΦϒδΣΫτ
// Kotlin class KotlinClass { val func: () -‐> Unit = {} } // Java KotlinClass obj = new KotlinClass(); Function0<Unit> func = obj.getFunc(); func.invoke(); -
Copyright © Sansan, Inc. All rights reserved. > ߴ֊ؔ
// Kotlin class KotlinClass { fun func(f : () -‐> Unit) { f() } } // Java KotlinClass obj = new KotlinClass(); obj.func(new Function0<Unit>() { @Override public Unit invoke() { return null; } }); -
Copyright © Sansan, Inc. All rights reserved. > MFUؔ
// Kotlin "10".let { it.toInt() } // Java StandardKt.let("10", new Function1<String, Integer>() { @Override public Integer invoke(String string) { return Integer.valueOf(string); } }); -
Copyright © Sansan, Inc. All rights reserved. > ؔͷσϑΥϧτҾ
// Kotlin class KotlinClass { fun func(arg1:Int, arg2:Int = 0, arg3:Int = 0) = arg1 + arg2 + arg3 } // Java KotlinClass obj = new KotlinClass(); obj.func(1, 2, 3); -
Copyright © Sansan, Inc. All rights reserved. > ؔͷσϑΥϧτҾ
// Kotlin class KotlinClass { @JvmOverloads fun func(arg1:Int, arg2:Int = 0, arg3:Int = 0) = arg1 + arg2 + arg3 } // Java KotlinClass obj = new KotlinClass(); obj.func(1); obj.func(1, 2); obj.func(1, 2, 3); -
Copyright © Sansan, Inc. All rights reserved. > *OUFSGBDFͷσϑΥϧτ࣮
// Kotlin interface KotlinInterface { fun func(){ print("default implementation") } } // Java public class JavaClass implements KotlinInterface{ @Override public void func() { // implementation required. } } -
Copyright © Sansan, Inc. All rights reserved. > *OUFSGBDFͷσϑΥϧτ࣮
// Kotlin interface KotlinInterface { fun func(){ print("default implementation") } } // Java public class JavaClass implements KotlinInterface{ @Override public void func() { KotlinInterface.DefaultImpls.func(this); } } -
Copyright © Sansan, Inc. All rights reserved. > 4FBMFEDMBTT
// Kotlin sealed class KotlinSealedClass { class SubA : KotlinSealedClass(){} class SubB : KotlinSealedClass(){} } // Java KotlinSealedClass.SubA subA = new KotlinSealedClass.SubA(); KotlinSealedClass.SubB subB = new KotlinSealedClass.SubB(); -
Copyright © Sansan, Inc. All rights reserved. > 4FBMFEDMBTT
// Kotlin sealed class KotlinSealedClass { class SubA : KotlinSealedClass(){} class SubB : KotlinSealedClass(){} } // Java public class JavaClass extends KotlinSealedClass{ } // ϏϧυΤϥʔ // There is no default constructor available for // KotlinSealedClass -
Copyright © Sansan, Inc. All rights reserved. > ·ͱΊ
• Kotlin͕Java͔ΒͲ͏ݟ͑Δ͔Λ͓ͬͯ͘ ͱɺطଘͷJavaͷڥʹڞଘ͢ΔڥʹΈࠐΉ ࣌҆৺ • KotlinͰϥΠϒϥϦΛॻ͘ͱ͖Java͔Βͷར ༻Λҙࣝ͠Α͏ -
$PQZSJHIU4BOTBO *OD"MMSJHIUTSFTFSWFE 4BOTBOҰॹʹ৽͍͠ՁΛ࡞͍ͬͯ͘ ؒΛ͕͍ͯ͞͠·͢ɻ 3VCZ 3VCZPO3BJMT ʢ8FCΞϓϦέʔγϣϯʣ $ɼ"41/&5.7$
ʢ8FCΞϓϦέʔγϣϯʣ J04"OESPJEΞϓϦ ݸਓ໊͚ཧΞϓϦʮ&JHIUʯ ໊σʔλԽࢄॲཧγεςϜ ๏ਓ໊͚ཧαʔϏεʮ4BOTBOʯ ๏ਓ໊͚ཧαʔϏε ʮ4BOTBOʯ ݸਓ໊͚ཧΞϓϦʮ&JHIUʯ ΤϯδχΞืूத 4BOTBO࠾༻ ݕࡧ SFDSVJU!TBOTBODPN·Ͱ ͓ؾܰʹ͝࿈བྷ͍ͩ͘͞ɻ ڵຯͷ͋Δํ