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

KotlinをJavaで理解する

 KotlinをJavaで理解する

AndroidでKotlin勉強会 @Sansan
2016/1/15

Jumpei Yamamoto

January 15, 2016
Tweet

More Decks by Jumpei Yamamoto

Other Decks in Programming

Transcript

  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  
  2. Copyright  ©  Sansan,  Inc.  All  rights  reserved.  2015年年Play  Storeの

      ベストアプリに選ばれました! (2年年連続)  
  3. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > &JHIUΞϓϦͱ,PUMJO 

    2015/8ࠒ͔Β࢖͍࢝Ί   طଘͷJavaϓϩδΣΫτʹಋೖ   m13͘Β͍͔ΒຊؾΛग़͢   ݱࡏ͸৽نίʔυ͸΄΅KotlinͰهड़   ࠓͷͱ͜ΖKotlinൺ཰12%͘Β͍  
  4. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > ,PUMJO͕+BWB͔ΒͲ͏ݟ͑Δ͔ 

    • val  /  var   • Null  safety   • Singleton  object   • Companion  object   • Package  level  function   • 拡張関数   • Operator  Overload   • 関数オブジェクト   • ⾼高階関数   • 関数のデフォルト引数   • Interfaceのデフォルト実装   • Sealed  class
  5. 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");
  6. 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";
  7. 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();  
  8. 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!  
  9. 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();  
  10. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > 4JOHMFUPOPCKFDU 

    //  Kotlin   object  KotlinSingleton  {          fun  func()  {}   }   //  Java   KotlinSingleton.INSTANCE.func();  
  11. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > 4JOHMFUPOPCKFDU 

    //  Kotlin   object  KotlinSingleton  {          @JvmStatic          fun  func()  {}   }   //  Java   KotlinSingleton.func();  
  12. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > $PNQBOJPOPCKFDU 

    //  Kotlin   class  KotlinClass  {          companion  object{                  fun  staticMethod(){}          }   }   //  Java   KotlinClass.Companion.staticMethod();  
  13. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > $PNQBOJPOPCKFDU 

    //  Kotlin   class  KotlinClass  {          companion  object{                  @JvmStatic                  fun  staticMethod(){}          }   }   //  Java   KotlinClass.staticMethod();  
  14. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > 1BDLBHFMFWFMGVODUJPO 

    //  KotlinFile.kt   fun  topLevelFunction(){}   //  Java   KotlinFileKt.topLevelFunction();  
  15. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > 1BDLBHFMFWFMGVODUJPO 

    //  KotlinFile.kt   @file:JvmName(“KotlinFunctions”)   package  demo   fun  topLevelFunction(){}   //  Java   KotlinFunctions.topLevelFunction();  
  16. 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();
  17. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > ֦ுؔ਺ 

    //  KotlinFile.kt   fun  String.prepend(prefix:String)  =  prefix  +  this   //  Java   KotlinFileKt.prepend("Kotlin",  “Hello!  ");     //  -­‐>  Hello!  Kotlin  
  18. 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  
  19. 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);  
  20. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > ؔ਺ΦϒδΣΫτ 

    //  Kotlin   class  KotlinClass  {          val  func:  ()  -­‐>  Unit  =  {}   }   //  Java   KotlinClass  obj  =  new  KotlinClass();   Function0<Unit>  func  =    obj.getFunc();   func.invoke();  
  21. 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;        }   });
  22. 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);        }   });  
  23. 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);  
  24. 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);  
  25. 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.          }   }  
  26. 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);          }   }  
  27. 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();  
  28. 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
  29. Copyright  ©  Sansan,  Inc.  All  rights  reserved. > ·ͱΊ 

    • Kotlin͕Java͔ΒͲ͏ݟ͑Δ͔Λ஌͓ͬͯ͘ ͱɺطଘͷJavaͷ؀ڥʹڞଘ͢Δ؀ڥʹ૊ΈࠐΉ ࣌΋҆৺   • KotlinͰϥΠϒϥϦΛॻ͘ͱ͖΋Java͔Βͷར ༻Λҙࣝ͠Α͏  
  30.  $PQZSJHIU˜4BOTBO *OD"MMSJHIUTSFTFSWFE  4BOTBO͸Ұॹʹ৽͍͠Ձ஋Λ࡞͍ͬͯ͘ ஥ؒΛ͕͍ͯ͞͠·͢ɻ 3VCZ 3VCZPO3BJMT ʢ8FCΞϓϦέʔγϣϯʣ $ɼ"41/&5.7$

    ʢ8FCΞϓϦέʔγϣϯʣ J04"OESPJEΞϓϦ   ݸਓ޲໊͚ࢗ؅ཧΞϓϦʮ&JHIUʯ   ໊ࢗσʔλԽ෼ࢄॲཧγεςϜ   ๏ਓ޲໊͚ࢗ؅ཧαʔϏεʮ4BOTBOʯ   ๏ਓ޲໊͚ࢗ؅ཧαʔϏε ʮ4BOTBOʯ   ݸਓ޲໊͚ࢗ؅ཧΞϓϦʮ&JHIUʯ ΤϯδχΞืूத 4BOTBO࠾༻ ݕࡧ SFDSVJU!TBOTBODPN·Ͱ ͓ؾܰʹ͝࿈བྷ͍ͩ͘͞ɻ ڵຯͷ͋Δํ͸