ããã«ã¡ã¯ãHabrïŒ JetBrainsã®Kotlin Coding Conventionsããã¥ã¡ã³ããŒã·ã§ã³ããŒãžã®èè
ã®ç¿»èš³ã«æ³šç®ããŠãã ããã
â ãªãªãžãã«ã®ããã¥ã¡ã³ã
å
容ïŒ
Intellij Ideaã®ã¹ã¿ã€ã«ã¬ã€ãã®äœ¿çš
çŸåšã®ããã¥ã¢ã«ã«åŸã£ãŠIntellij Ideaã§ãã©ãŒããããé©çšããã«ã¯ãKotlinãã©ã°ã€ã³ããŒãžã§ã³1.2.20以éãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã[èšå®] | [ ãšãã£ã¿ãŒ| ã³ãŒãã¹ã¿ã€ã«| Kotlinã®å³äžé
ã«ãã[âŠããèšå®]ãªã³ã¯ãã¯ãªãã¯ããããããããŠã³ã¡ãã¥ãŒãã[å®çŸ©æžã¿ã¹ã¿ã€ã«] / Kotlinã¹ã¿ã€ã«ã¬ã€ããéžæããŸãã
ã³ãŒããæšå¥šã¹ã¿ã€ã«ã«åŸã£ãŠãã©ãŒããããããŠããããšã確èªããã«ã¯ãæ€æ»èšå®ã«ç§»åããŠããKotlin |ã¹ã¿ã€ã«ã®åé¡|ãã¡ã€ã«ããããžã§ã¯ãèšå®ã«åŸã£ãŠãã©ãŒããããããŠããŸããããã§ãã¯ãæå¹ã«ããŸãã åœåèŠåãªã©ã®ä»ã®æ€èšŒã«ãŒã«ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã
ãããžã§ã¯ãæ§é
ãã©ã«ããŒæ§é
ç°ãªãèšèªã䜿çšãããããžã§ã¯ãã§ã¯ãKotlinã³ãŒããå«ããã¡ã€ã«ã¯ä»ã®èšèªã®ã³ãŒããšåããã©ã«ããŒã«ãããã¡ã€ã³èšèªã§åãå
¥ããããŠããåããã¡ã€ã«æ§é ã䜿çšããå¿
èŠããããŸãã ããšãã°ãJavaã®å Žåããã¡ã€ã«ã¯ããã±ãŒãžåã«å¿ãããã©ã«ããŒæ§é ã«ããå¿
èŠããããŸãã
Kotlinã®ã¿ã䜿çšãããããžã§ã¯ãã§ã¯ãæšå¥šããããã©ã«ããŒæ§é ã¯æ¬¡ã®ãšããã§ãããã©ã«ããŒã䜿çšããŠãã«ãŒããã£ã¬ã¯ããªãã¹ãããããŠããã±ãŒãžãæŽçããŸãã ãããžã§ã¯ãå
ã®ãã¹ãŠã®ã³ãŒããããã±ãŒãžãorg.example.kotlinãããã³ãã®ããã±ãŒãžã«ããå Žåãããã±ãŒãžãorg.example.kotlinãã«å±ãããœãŒã¹ãã¡ã€ã«ã¯ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ãããããã±ãŒãžã®ãœãŒã¹ã³ãŒããå«ãŸãããã¡ã€ã«ã¯ãorgãã§ããå¿
èŠããããŸãã example.kotlin.foo.bar "ãµããã£ã¬ã¯ããªã«ããã¹ãã§ã" foo / bar "ãããžã§ã¯ãã®ã«ãŒãã«å¯ŸããŠçžå¯Ÿçã§ãã
ãœãŒã¹ãã¡ã€ã«ã®åå
Kotlinãã¡ã€ã«ã«å«ãŸããã¯ã©ã¹ã1ã€ã ãã®å ŽåïŒãããã¬ãã«ã®å®£èšã«é¢é£ããŠããå¯èœæ§ããããŸãïŒãæ¡åŒµå.kt
ã¯ã©ã¹ãšåæ§ã«ååãä»ããå¿
èŠããããŸãã ãã¡ã€ã«ã«è€æ°ã®ã¯ã©ã¹ãå«ãŸããŠããå ŽåããŸãã¯ãããã¬ãã«ã®å®£èšã®ã¿ãå«ãŸããŠããå Žåã¯ããã¡ã€ã«ã®å
容ã説æããååãéžæããããã«å¿ããŠãã¡ã€ã«ã«ååãä»ããŸãã ãã¡ã€ã«ã«ååãä»ããã«ã¯ã倧æåã®ãã£ã¡ã«ãã³ãã䜿çšããŸãïŒäŸïŒ ProcessDeclarations.kt
ïŒã
ãã¡ã€ã«åã«ã¯ããã¡ã€ã«å
ã®ã³ãŒããå®è¡ããå
容ãèšè¿°ããå¿
èŠããããŸãã ã€ãŸãããã¡ã€ã«ã®åœåã«ãUtilãã®ãããªç¡æå³ãªåèªã䜿çšããªãã§ãã ããã
ãœãŒã¹ãã¡ã€ã«ã®æŽç
è€æ°ã®å®£èšïŒã¯ã©ã¹ã颿°ããŸãã¯æäžäœã®ããããã£ïŒãåãKotlinãœãŒã¹ãã¡ã€ã«ã«é
眮ããããšã¯ããããã®å®£èšãæå³çã«çžäºã«å¯æ¥ã«é¢é£ããŠããããã¡ã€ã«ãµã€ãºãåççïŒæ°çŸè¡ä»¥å
ïŒã§ããå Žåã«æè¿ãããŸãã
ç¹ã«ããã®ã¯ã©ã¹ã®é©çšã®ãã¹ãŠã®åŽé¢ã«é©çšãããã¯ã©ã¹ã®æ¡åŒµé¢æ°ãå®çŸ©ããå Žåãã¯ã©ã¹èªäœãå®çŸ©ãããŠããã®ãšåããã¡ã€ã«ã«ããããé
眮ããŸãã ãã®ã¯ã©ã¹ã䜿çšããç¹å®ã®ã³ã³ããã¹ãã§ã®ã¿æå³ã®ããæ¡åŒµæ©èœãå®çŸ©ããå Žåã¯ããã®æ¡åŒµæ©èœã䜿çšããã³ãŒãã®é£ã«é
眮ããŸãã ããã¹ãŠã®Fooæ¡åŒµæ©èœããä¿åããããã ãã«ãã¡ã€ã«ãäœæããªãã§ãã ããã
ã¯ã©ã¹æ§é
éåžžãã¯ã©ã¹ã®ã³ã³ãã³ãã¯æ¬¡ã®é åºã§ãœãŒããããŸãã
- ããããã£å®£èšãšåæååãããã¯
- äºæ¬¡ã³ã³ã¹ãã©ã¯ã¿
- ã¡ãœãã宣èš
- ã³ã³ãããªã³ãªããžã§ã¯ã
ã¡ãœãã宣èšãã¢ã«ãã¡ãããé ãŸãã¯èŠèŠçã«äžŠã¹æ¿ããããéåžžã®ã¡ãœãããæ¡åŒµã¡ãœããããåé¢ãããããªãã§ãã ããã 代ããã«ãè«ççã«æ¥ç¶ãããã³ãŒãããŸãšããŠãã¯ã©ã¹ãäžããäžã«èªã人ãäœãèµ·ãããã®ããžãã¯ã«åŸãããšãã§ããããã«ããŸãã äžŠã¹æ¿ãé åºã1ã€éžæãïŒé«ã¬ãã«ã®ã³ãŒããæåã«[é«ã¬ãã«ã®ãã®ãæåã«]ã詳现ãåŸã§ããŸãã¯ãã®éã«ïŒãããã«åŸã£ãŠãã ããã
ãããã®ã¯ã©ã¹ã䜿çšããã³ãŒãã®æšªã«ãã¹ããããã¯ã©ã¹ãé
眮ããŸãã ã¯ã©ã¹ãå€éšã§ã®äœ¿çšãç®çãšããŠãããã¯ã©ã¹å
ã§åç
§ãããŠããªãå Žåã¯ãã¯ã©ã¹ãã³ã³ãããªã³ãªããžã§ã¯ãã®åŸã«é
眮ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹å®è£
ãã¬ãŒã ã¯ãŒã¯
ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ãããšããå®è£
ãããã€ã³ã¿ãŒãã§ã€ã¹ãšåãæ§é ãç¶æããŸãïŒå¿
èŠã«å¿ããŠãå®è£
ã«äœ¿çšããã远å ã®ãã©ã€ããŒãã¡ãœãããšäº€äºã«åãæ¿ããŸãïŒ
æ§é ããªãŒããŒã©ã€ãããŸã
åå®çŸ©ã¯åžžã«æ¬¡ã
ã«ãŸãšããããŸãã
åœåèŠå
Kotlinã¯ãJavaãšåãåœåèŠåã«åŸããŸãã ç¹ã«ïŒ
ããã±ãŒãžåã¯å°æåã§ãããã¢ã³ããŒã¹ã³ã¢ïŒorg.example.myprojectïŒã¯äœ¿çšããŸããã éåžžãè€æ°ã®åèªã®ååã䜿çšããããšã¯ãå§ãããŸããããè€æ°ã®åèªã䜿çšããå¿
èŠãããå Žåã¯ãããããåçŽã«çµã¿åãããããã©ã¯ãã®ãã¶ïŒorg.examle.myProjectïŒã䜿çšã§ããŸãã
ã¯ã©ã¹ãšãªããžã§ã¯ãã®ååã¯å€§æåã§å§ãŸããã©ã¯ãã®ãã¶ã䜿çšããŸãã
open class DeclarationProcessor { ... } object EmptyDeclarationProcessor : DeclarationProcessor() { ... }
æ©èœå
颿°ãããããã£ãããã³ããŒã«ã«å€æ°ã®ååã¯å°æåã§å§ãŸããã¢ã³ããŒã¹ã³ã¢ã¯å«ãŸããŸããã
fun processDeclarations() { ... } var declarationCount = ...
äŸå€ïŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åã«äœ¿çšããããã¡ã¯ããªãŒé¢æ°ã¯ãäœæãããã¯ã©ã¹ãšåãååãæã€å ŽåããããŸãã
abstract class Foo { ... } class FooImpl : Foo { ... } fun Foo(): Foo { return FooImpl(...) }
è©Šéšæ¹æ³ã®åå
ãã¹ãïŒããã³ãã¹ãã®ã¿ïŒã§ã¯ãã¹ããŒã¹ãéã³ã³ãã§å²ãã ã¡ãœããåã䜿çšã§ããŸãã ïŒãã®ãããªã¡ãœããåã¯çŸåšAndroidã©ã³ã¿ã€ã ã§ãµããŒããããŠããªãããšã«æ³šæããŠãã ãããïŒã¡ãœããåã«ã¢ã³ããŒã¹ã³ã¢ã䜿çšããããšããã¹ãã³ãŒãã§èš±å¯ãããŠããŸãã
class MyTestCase { @Test fun `ensure everything works`() { ... } @Test fun ensureEverythingWorks_onAndroid() { ... } }
ããããã£ã®åœå
宿°åïŒ const
ã©ãã«ãä»ããããããã£ããããã¬ãã«ããããã£ããŸãã¯äžå€ããŒã¿ãå«ãã«ã¹ã¿ã get
颿°ãæããªãval
ãªããžã§ã¯ãïŒã¯ãã¢ã³ããŒã¹ã³ã¢ã§åºåã£ãŠå€§æåã«ããå¿
èŠããããŸãã
const val MAX_COUNT = 8 val USER_NAME_FIELD = "UserName"
åäœãŸãã¯å€æŽå¯èœãªããŒã¿ãæã€ãªããžã§ã¯ããå«ããããã¬ãã«ã®ååãŸãã¯ãªããžã§ã¯ãããããã£ã¯ãã©ã¯ããã³ãã§å
±éåã䜿çšããå¿
èŠããããŸãã
val mutableCollection: MutableSet<String> = HashSet()
ã·ã³ã°ã«ãã³ãªããžã§ã¯ããåç
§ããããããã£åã¯ãã¯ã©ã¹å®£èšãšåãåœåã¹ã¿ã€ã«ã䜿çšã§ããŸãã
val PersonComparator: Comparator<Person> = ...
åæåã§ã¯ã䜿çšç¶æ³ã«å¿ããŠãã¢ã³ããŒã¹ã³ã¢ã§åºåããã倧æåãŸãã¯ãã£ã¡ã«ãã³ãã¹ã¿ã€ã«ã§æžãããååã䜿çšã§ããŸãã
enum class Color { RED, GREEN }
enum class Color { RedColor, GreenColor }
翻蚳è
泚ïŒç°ãªãã¹ã¿ã€ã«ãæ··ããªãã§ãã ããã ããããã®ã¹ã¿ã€ã«ãéžæããŠããã¶ã€ã³ã§ããã«åºå·ããŸãã
é衚瀺ããããã£ã®åœå
ã¯ã©ã¹ã«æŠå¿µçã«åã2ã€ã®ããããã£ããããäžæ¹ããããªãã¯APIã®äžéšã§ãããããäžæ¹ãå®è£
ã®äžéšã§ããå Žåãã¢ã³ããŒã¹ã³ã¢ãé衚瀺ããããã£ã®ååã®ãã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããŸãã
class C { private val _elementList = mutableListOf<Element>() val elementList: List<Element> get() = _elementList }
é©åãªååã®éžæ
ã¯ã©ã¹åã¯éåžžãã¯ã©ã¹ãäœã§ãããã説æããåè©ãŸãã¯ãã¬ãŒãºã§ãã
List, PersonReader
ã¡ãœããã®ååã¯éåžžãã¡ãœããã®æ©èœã説æããåè©ãŸãã¯ãã¬ãŒãºã¢ã¯ã·ã§ã³ã§ãã
close, readPersons
ãŸããååã¯ãã¡ãœããããªããžã§ã¯ãã倿Žããããæ°ãããªããžã§ã¯ããè¿ããã瀺ãå¿
èŠããããŸãã ããšãã°ã sort
ã¯ã³ã¬ã¯ã·ã§ã³ã倿Žããsort
ãããsortã¯ã³ã¬ã¯ã·ã§ã³ã®æ°ãããœãŒããããã³ããŒã®æ»ãå€ã§ãã
ååã¯ãšã³ãã£ãã£ã®ç®çãæç¢ºã«ç€ºãå¿
èŠããããŸãããããã£ãŠãååã«æå³ã®ãªãåèªïŒ Manager
ã Wrapper
ãªã©ïŒã䜿çšããªãããã«ããããšããå§ãããŸãã
åºååã®äžéšãšããŠé åèªã䜿çšããå Žåã2æåïŒ IOStream
ïŒã§æ§æãããå Žåã¯å€§æåã䜿çšããŸãã ãŸãã¯ãé·ãå Žåã¯æåã®æåã®ã¿ã倧æåã«ããŸãïŒ XmlFormatter
ã HttpInputStream
ïŒã
ã»ãšãã©ã®å ŽåãKotlinã¯Javaã®ãã©ãŒãããèŠåã«åŸããŸãã
ã€ã³ãã³ãããã«ã¯4ã€ã®ã¹ããŒã¹ã䜿çšããŸãã ã¿ãã䜿çšããªãã§ãã ããã
ãã¬ãŒã¹ã®å Žåãæ§é ãéå§ããè¡ã®æ«å°Ÿã«éããã¬ãŒã¹ãé
眮ããé壿§é ãšæ°Žå¹³æ¹åã«æŽåããå¥ã®è¡ã«éããã¬ãŒã¹ãé
眮ããŸãã
if (elements != null) { for (element in elements) {
ïŒæ³šïŒKotlinã§ã¯ãã»ãã³ãã³ã¯ãªãã·ã§ã³ã§ãããããè¡ã®æãè¿ããéèŠã§ããèšèªèšèšã«ã¯Javaã¹ã¿ã€ã«ã®æ³¢æ¬åŒ§ãå«ãŸããŸããå¥ã®ãã©ãŒãããã¹ã¿ã€ã«ã䜿çšããããšãããšãäºæããªãã³ãŒãå®è¡åäœãçºçããå ŽåããããŸããïŒ
æ°Žå¹³æ¹åã®ã¹ããŒã¹
äºé
æŒç®å(a + b)
åšãã«ã¹ããŒã¹ã眮ããŸãã äŸå€ïŒæŒç®åãç¯å²ã (0..i)
åšãã«ã¹ããŒã¹ãå
¥ããªãã§ãã ãã
åé
æŒç®åã®åšãã«ã¹ããŒã¹ãå
¥ããªãã§ãã ãã(a++)
ããŒå¶åŸ¡èªïŒ if
ã when
ã for
while
ïŒãšå¯Ÿå¿ããéãæ¬åŒ§ã®éã«ã¹ããŒã¹ãå
¥ããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒãã¡ãœããããŸãã¯ã¡ãœããã®ãã©ã€ããªå®£èšã§ãéãæ¬åŒ§ã®åã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
class A(val x: Int) fun foo(x: Int) { ... } fun bar() { foo(1) }
(
ã [
ãŸãã¯å]
ã )
åŸã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
ãã€ã³ãã®åšãã«ã¹ããŒã¹ã眮ããªãã§ãã ãã.
ãŸãã¯æŒç®å?.
ïŒ
foo.bar().filter { it > 2 }.joinToString() foo?.()
ã³ã¡ã³ã//
äºéã¹ã©ãã·ã¥ã®åŸã«ã¹ããŒã¹ãå
¥ããŸãã
åãã©ã¡ãŒã¿ãŒã瀺ãããã«äœ¿çšãããå±±æ¬åŒ§ã®åšãã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
Class Map<K, V> { ... }
::
ã¯ã©ã¹ã¡ãœãããžã®åç
§ã瀺ãããã«ãäºéã³ãã³ã®åšãã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
Foo::class String::length
åã«ã¹ããŒã¹ãå
¥ããªãã§ãã ãã?
null
ãããŒã¯ããããã«äœ¿çšïŒ
String?
äžè¬çã«ãããããçš®é¡ã®æ°Žå¹³æ¹åã®é
眮ã¯é¿ããŠãã ããã èå¥åã®ååãå¥ã®é·ãã®ååã«å€æŽããŠããã³ãŒãã®ãã©ãŒãããã«ã¯åœ±é¿ããŸããã
ã³ãã³
次ã®å Žåãã³ãã³ã®åã«ã¹ããŒã¹ãå
¥ããŸãã
- ã¿ã€ããã¹ãŒããŒã¿ã€ãããåé¢ããããã«äœ¿çšãããå Žå;
abstract class Foo<out T : Any>
- ã¹ãŒããŒã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯åãã¯ã©ã¹ã®å¥ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«å§ä»»ããå Žåã
constructor(x: String) : super(x) { ... } constructor(x: String) : this(x) { ... }
- ããŒã¯ãŒããªããžã§ã¯ãã®åŸã
val x = object : IFoo { ... }
åºåãšãã®ã¿ã€ããåºåããšãã«:
åã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
abstract fun foo(a: Int): T
:
åŸã«ã¯å¿
ãã¹ããŒã¹ãå
¥ããŠ:
abstract class Foo<out T : Any> : IFoo { abstract fun foo(a: Int): T } class FooImpl : Foo() { constructor(x: String) : this(x) { ... } val x = object : IFoo { ... } }
ããã€ãã®åºæ¬çãªã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãšçãååãæã€ã¯ã©ã¹ã¯ã1è¡ã§èšè¿°ã§ããŸãã
class Person(id: Int, name: String)
ããé·ãååãŸãã¯ãã©ã¡ãŒã¿ã®æ°ãæã€ã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ã®åã¡ã€ã³ãã©ã¡ãŒã¿ãã€ã³ãã³ãä»ãã®åå¥ã®è¡ã«ãªãããã«ãã©ãŒãããããå¿
èŠããããŸãã ãŸããéãæ¬åŒ§ã¯æ°ããè¡ã«ãªããã°ãªããŸããã ç¶æ¿ã䜿çšããå Žåãã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯å®è£
ãããã€ã³ã¿ãŒãã§ã€ã¹ã®ãªã¹ãã®åŒã³åºãã¯ããã©ã±ãããšåãè¡ã«é
眮ããå¿
èŠããããŸãã
class Person( id: Int, name: String, surname: String ) : Human(id, name) { ... }
ã€ã³ã¿ãŒãã§ã€ã¹ãæå®ããŠã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãå Žåãæåã«ã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãèŠã€ããŠãããæ°ããè¡ã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ååãå·Šæãã«ããŸãã
class Person( id: Int, name: String, surname: String ) : Human(id, name), KotlinMaker { ... }
ã¹ãŒããŒã¿ã€ãã®é·ããªã¹ããæã€ã¯ã©ã¹ã®å Žåãã³ãã³ã®åŸã«æ¹è¡ãå
¥ããŠããã¹ãŠã®ã¹ãŒããŒã¿ã€ãåãæ°Žå¹³ã«å·Šã«æããå¿
èŠããããŸãã
class MyFavouriteVeryLongClassHolder : MyLongHolder<MyFavouriteVeryLongClass>(), SomeOtherInterface, AndAnotherOne { fun foo() { ... } }
ã¯ã©ã¹ã®èŠåºããé·ããšãã«ã¯ã©ã¹ã®èŠåºããšãã®æ¬æãæç¢ºã«åé¢ããã«ã¯ãã¯ã©ã¹ã®èŠåºãã®åŸã«ç©ºã®è¡ãé
眮ãããïŒäžèšã®äŸã®ããã«ïŒãéå§ãã¬ãŒã¹ãå¥ã®è¡ã«é
眮ããŸãã
class MyFavouriteVeryLongClassHolder : MyLongHolder<MyFavouriteVeryLongClass>(), SomeOtherInterface, AndAnotherOne { fun foo() { ... } }
ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãã©ã¡ãŒã¿ãŒã«ã¯ãéåžžã®ã€ã³ãã³ãïŒ4ã¹ããŒã¹ïŒã䜿çšããŸãã
çç±ïŒããã«ãããã¡ã€ã³ã³ã³ã¹ãã©ã¯ã¿ãŒã§å®£èšãããããããã£ããã¯ã©ã¹æ¬äœã§å®£èšãããããããã£ãšåãã€ã³ãã³ããæã€ããã«ãªããŸãã
修食å
åºåã«è€æ°ã®ä¿®é£Ÿåãå«ãŸããå Žåã¯ãåžžã«æ¬¡ã®é åºã§é
眮ããŸãã
public / protected / private / internal expect / actual final / open / abstract / sealed / const external override lateinit tailrec vararg suspend inner enum / annotation companion inline infix operator data
ãã¹ãŠã®æ³šéã修食åã®åã«é
眮ããŸãã
@Named("Foo") private val foo: Foo
ã©ã€ãã©ãªã§äœæ¥ããŠããªãå Žåã¯ãåé·ãªä¿®é£ŸåïŒäŸïŒpublicïŒãçç¥ããŸãã
泚éã¯éåžžãæ·»ä»å
ã®å®£èšã®åã®å¥ã®è¡ã«ãåãã€ã³ãã³ãã§é
眮ãããŸãã
@Target(AnnotationTarget.PROPERTY) annotation class JsonExclude
åŒæ°ãªãã®æ³šéã¯1è¡ã«é
眮ã§ããŸãã
@JsonExclude @JvmField var x: String
åŒæ°ãªãã®1ã€ã®æ³šéã¯ã察å¿ãã宣èšãšåãè¡ã«é
眮ã§ããŸãã
@Test fun foo() { ... }
ãã¡ã€ã«æ³šé
ãã¡ã€ã«ãžã®æ³šéã¯ããã¡ã€ã«ã®ã³ã¡ã³ãïŒååšããå ŽåïŒã®åŸãããã±ãŒãžã¹ããŒãã¡ã³ãã®åã«é
眮ããã空è¡ã§ããã±ãŒãžããåé¢ãããŸãïŒããã±ãŒãžã§ã¯ãªããã¡ã€ã«ã察象ã«ããŠãããšããäºå®ã匷調ããããïŒã
@file:JvmName("FooBar") package foo.bar
ã¡ãœããã·ã°ããã£ã1è¡ã«åãŸããªãå Žåã¯ãæ¬¡ã®æ§æã䜿çšããŸãã
fun longMethodName( argument: ArgumentType = defaultValue, argument2: AnotherArgumentType ): ReturnType {
颿°ãã©ã¡ãŒã¿ãŒã«ã¯éåžžã®ã€ã³ãã³ãïŒ4ã€ã®ã¹ããŒã¹ïŒã䜿çšããŸãã
æ ¹æ ïŒã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãšã®äžè²«æ§
1è¡ã§æ§æããã颿°ã«ã¯ãäžæ¬åŒ§ãªãã®åŒã䜿çšããããšããå§ãããŸãã
fun foo(): Int {
åäžè¡é¢æ°ã®æ¬äœã宣èšãšåãè¡ã«åãŸããªãå Žåã¯ãæåã®è¡ã«=èšå·ãå
¥ããŸãã åŒã®æ¬æã4ã¹ããŒã¹åã€ã³ãã³ãããŸãã
fun f(x: String) = x.length
åçŽãªèªã¿åãå°çšããããã£ã®å Žåãåäžè¡ãã©ãŒãããã䜿çšããããšããå§ãããŸãã
val isEmpty: Boolean get() = size == 0
ããè€éãªããããã£ã®å Žåã¯ãåžžã«å¥ã®è¡ã§get
ããã³set
ã䜿çšãget
ã
val foo: String get() { ... }
åæåã®ããããããã£ã®å Žåãåæååãé·ãããå Žåãçå·ã®åŸã«æ¹è¡ã远å ããåæåæååã«4ã€ã®ã¹ããŒã¹ã®ã€ã³ãã³ãã远å ããŸãã
private val defaultCharset: Charset? = EncodingRegistry.getInstance().getDefaultCharsetForPropertiesFiles(file)
if
ãŸãã¯when
å¶åŸ¡ã¹ããŒãã¡ã³ãã®æ¡ä»¶ãè€æ°è¡ã®å Žåãã¹ããŒãã¡ã³ãã®æ¬äœã®åšãã«äžæ¬åŒ§ãåžžã«äœ¿çšããŸãã æ¡ä»¶ã®åŸç¶ã®åè¡ããæã®å
é ãã4ã¹ããŒã¹åã€ã³ãã³ãããŸãã æ¡ä»¶ã®éãæ¬åŒ§ãšéãäžæ¬åŒ§ãå¥ã®è¡ã«é
眮ããŸãã
if (!component.isSyncing && !hasAnyKotlinRuntimeInScope(module) ) { return createKotlinNotConfiguredPanel(module) }
æ ¹æ ïŒæ¡ä»¶æ¬äœãšæ¡ä»¶æ¬äœã®ãã¡ããšããæŽåãšæç¢ºãªåé¢
else
ã catch
ã finally
ããŒã¯ãŒããããã³do / whileã«ãŒãã®while
ããŒã¯ãŒããåã®éãäžæ¬åŒ§ãšåãè¡ã«é
眮ããŸãã
if (condition) {
åœä»€ã®when
æ¡ä»¶ãè€æ°ã®ãããã¯ã§æ§æãããŠããå Žåããããã空è¡ã§äºãã«åé¢ããããšããå§ãããŸãã
private fun parsePropertyValue(propName: String, token: Token) { when (token) { is Token.ValueToken -> callback.visitValue(propName, token.value) Token.LBRACE -> {
when
ã¹ããŒãã¡ã³ãã®çããããã¯ãäžæ¬åŒ§ãªãã§åãè¡ã«é
眮ããŸãã
when (foo) { true -> bar()
ãã©ã¡ãŒã¿ã®é·ããªã¹ãã䜿çšããå Žåã¯ãæ¬åŒ§ã®åŸã«æ¹è¡ãå
¥ããŠãã ããã 4ã€ã®ã¹ããŒã¹ãã€ã³ãã³ããã1è¡ã«è«ççã«æ¥ç¶ãããåŒæ°ãã°ã«ãŒãåããŸãã
drawSquare( x = 10, y = 10, width = 100, height = 100, fill = true )
ãã©ã¡ãŒã¿ãŒåãšãã®å€ã®éã®çå·ã®ååŸã«ã¹ããŒã¹ã䜿çšããŸãã
é£éåŒã³åºãã䜿çšããå Žåã¯ããå
¥ã.
ãŸãã¯?.
4ã€ã®ã¹ããŒã¹ã«1ã€ã®ã€ã³ãã³ããããæ°ããè¡ã®æŒç®åïŒ
val anchor = owner ?.firstChild!! .siblings(forward = true) .dropWhile { it is PsiComment || it is PsiWhiteSpace }
ãã§ãŒã³ã®æåã®åŒã³åºãã§ã¯ãéåžžããã®åã«æ¹è¡ãå¿
èŠã§ãããã³ãŒããé©åã«èªã¿åãããæå³ãããå Žåã¯ããããè¡ããªãã®ãæ®éã§ãã
ã©ã ãåŒã§ã¯ãäžæ¬åŒ§ãšãã©ã¡ãŒã¿ãŒãæ¬æããåé¢ããç¢å°ã®åšãã«ã¹ããŒã¹ã䜿çšããå¿
èŠããããŸãã åŒã³åºããåäžã®ã©ã ãæåãåãå
¥ããå Žåãå¯èœãªéãæ¬åŒ§ã®å€åŽã§äœ¿çšããå¿
èŠããããŸãã
list.filter { it > 10 }
ã©ãã«ãã©ã ãåŒã«å²ãåœãŠãå Žåãã©ãã«ãšå·Šäžæ¬åŒ§ã®éã«ã¹ããŒã¹ãå
¥ããªãã§ãã ããã
fun foo() { ints.forEach lit@{
è€æ°è¡ã®ã©ã ãåŒã§ãã©ã¡ãŒã¿åã宣èšããå Žåãååãæåã®è¡ã«ã次ã«ç¢å°ã«ãæ°ããè¡ã«é¢æ°æ¬äœã®å
é ã«é
眮ããŸãã
appendCommaSeparated(properties) { prop -> val propertyValue = prop.get(obj)
ãã©ã¡ãŒã¿ãªã¹ãã1è¡ã«åãŸããªãå Žåã¯ãç¢å°ãå¥ã®è¡ã«é
眮ããŸãã
foo { context: Context, environment: Env -> context.configureEnv(environment) }
è€æ°è¡ã®ããã¥ã¡ã³ãã䜿çšããå Žåã¯ã /**
ãå¥ã®è¡ã«çœ®ããåŸç¶ã®åè¡ãã¢ã¹ã¿ãªã¹ã¯ã§éå§ããŸãã
çãããã¥ã¡ã³ãã1è¡ã«é
眮ã§ããŸãã
äžè¬ã«ã paramããã³returnã¿ã°ã®äœ¿çšã¯é¿ããŠãã ããã 代ããã«ããã©ã¡ãŒã¿ãŒã®èª¬æãšæ»ãå€ãããã¥ã¡ã³ãã³ã¡ã³ãã«çŽæ¥å«ããèšèŒãããŠããå Žæã«ãã©ã¡ãŒã¿ãŒåç
§ã远å ããŸãã paramã䜿çšããŠãã¡ã€ã³ããã¹ãã®æå³ã«åããªãé·ã説æãå¿
èŠãªå Žåã«ã®ã¿æ»ããŸãã
äžèŠãªæ§é ã®åé¿
Kotlinã®å€ãã®æ§ææ§é ã¯ãªãã·ã§ã³ã§ãããéçºç°å¢ã§ã¯äžèŠã§ãããšåŒ·èª¿ãããŠããŸã;ã³ãŒãããæç¢ºãã«ããããã ãã«ã³ãŒãã§äœ¿çšããªãã§ãã ããã
åäœããŒã¯ãŒãã®äœ¿çš
颿°ã§ã¯ãUnitããŒã¯ãŒãã®äœ¿çšã¯äœ¿çšããªãã§ãã ããã
fun foo() {
ã»ãã³ãã³
ããããæ©äŒã«ã»ãã³ãã³ã䜿çšããªãã§ãã ããã
æååãã¿ãŒã³
åçŽãªå€æ°ããã³ãã¬ãŒãæååã«è²Œãä»ãããšãã«ãäžæ¬åŒ§ã䜿çšããªãã§ãã ããã é·ã衚çŸã«å¯ŸããŠã®ã¿äžæ¬åŒ§ã䜿çšããŸãã
println("$name has ${children.size} children")
èšèªæ©èœã®æ
£çšçãªäœ¿çš
äžå€æ§
å¯å€ããŒã¿ã®åã«äžå€ããŒã¿ã䜿çšããããšããå§ãããŸãã ããŒã«ã«å€æ°ãšããããã£ã¯ãå®éã«å€æŽãããªãéããåžžã«var
ã§ã¯ãªãval
ãšããŠå®£èšããŠãã ããã
倿Žããªãã³ã¬ã¯ã·ã§ã³ã宣èšããã«ã¯ãåžžã«äžå€ã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒ Collection
ã List
ã Set
ã Map
ïŒã䜿çšããŸãã å¯èœãªéããã³ã¬ã¯ã·ã§ã³ã®äœæã«ãã¡ã¯ããªã¡ãœããã䜿çšããå Žåã¯ãäžå€ã®ã³ã¬ã¯ã·ã§ã³ãè¿ãå®è£
ã䜿çšããŸãã
: .
.
[Type alias]
, , :
typealias MouseClickHandler = (Any, MouseEvent) -> Unit typealias PersonIndex = Map<String, Person>
-
-, , it
. - .
-
. - , . , - .
( @
) .
, , boolean
, .
drawSquare(x = 10, y = 10, width = 100, height = 100, fill = true)
try
, if
when
, return
:
return if (x) foo() else bar()
if
when
if
when
when (x) { null -> ... else -> ... } if (x == null) ... else ...
, when
.
Boolean?
Boolean?
, if (value == true)
if (value == false)
, if (value ?: false)
if (value != null && value)
.
filtet
, map
.. . : forEach
( for
null forEach
)
, , , .
until
( ):
for (i in 0..n - 1) { ... }
.
\n
escape- .
, trimIndent
, , trimMargin
, :
assertEquals( """ Foo Bar """.trimIndent(), value ) val a = """if(a > 1) { | return a |}""".trimMargin()
. , , .
:
. , , , , . API, , . , .
infix
, , . : and
, to
, zip
. : add
.
infix
, .
, , . , , . , , .
class Point(val x: Double, val y: Double) { companion object { fun fromPolar(angle: Double, radius: Double) = Point(...) } }
, , .
: , , Kotlin null
, null
public
/, , Kotlin:
fun apiCall(): String = MyJavaApi.getProperty("name")
(package-level class-level) Kotlin:
class Person { val name: String = MyJavaApi.getProperty("name") }
, , Kotlin :
fun main() { val name = MyJavaApi.getProperty("name") println(name) }
apply
/ with
/ run
/ also
/ let
Kotlin . , :
- ? , ,
it
, this
( also
let
). also
, .
- ? ,
apply
also
. , with
, let
run
.
- null ? ,
apply
, let
run
. , with
also
.
API:
- ( API)
- ( )
- KDoc public api, , /