
https://trends.google.com/trends/explore?q=%2Fm%2F0_lcrx4
äžèšã¯ãkotlinããšããåèªãæ€çŽ¢ãããšãã®Googleãã¬ã³ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã çªç¶ã®æ¥å¢ã¯ã GoogleãKotlinãAndroidã®äž»èŠèšèªã«ãªã£ãŠããããšãçºè¡šãããšãã§ã ã ããã¯æ°é±éåã®Google I / Oã«ã³ãã¡ã¬ã³ã¹ã§èµ·ãããŸããã ãããŸã§ãããªãã¯ããªãã®åšãã®èª°ããçªç¶ããã«ã€ããŠè©±ãå§ããã®ã§ãããªãã¯ä»¥åã«ãã®èšèªã䜿çšãããããŸãã¯ããã«èå³ãæã¡ãŸããã
Kotlinã®äž»ãªæ©èœã®1ã€ã¯ãJavaãšã®çžäºéçšæ§ã§ããJavaããKotlinã³ãŒããåŒã³åºããKotlinããJavaã³ãŒããåŒã³åºãããšãã§ããŸãã ããã¯ãããããèšèªãåºãé
åžãããŠãããããæãéèŠãªæ©èœã§ãã ãã¹ãŠãããã«ç§»è¡ããå¿
èŠã¯ãããŸãããæ¢åã®ã³ãŒãããŒã¹ã®äžéšãååŸããŠãKotlinã³ãŒãã®è¿œå ãéå§ããã ãã§æ©èœããŸãã Kotlinã詊ããŠã¿ãŠãæ°ã«å
¥ããªãå Žåã¯ããã€ã§ãæåŠã§ããŸãïŒãã ãã詊ããŠã¿ãããšããå§ãããŸãïŒã
Javaã§5幎éåããåŸãåããŠKotlinã䜿çšãããšããããã€ãã®ããšãéæ³ã®ããã«æããŸããã
ãã¡ãã£ãšåŸ
ã£ãŠãäœïŒ å®åã³ãŒããåé¿ããããã«data class
ãèšè¿°ããããšã¯ã§ããŸããïŒã
ããããŠã apply
ãæžããããããã«é¢ããŠã¡ãœãããåŒã³åºããã³ã«ãªããžã§ã¯ããå®çŸ©ããå¿
èŠã¯ãããŸãããïŒã
æä»£é
ãã§é¢åã§ã¯ãªãèšèªãããããç»å Žãããšããäºå®ããã®æåã®å®ighã®ãããç§ã¯äžå¿«æãæãå§ããŸããã Javaãšã®çžäºäºææ§ãå¿
èŠãªå Žåãããããã¹ãŠã®åªããæ©èœã¯Kotlinã§ã©ã®çšåºŠæ£ç¢ºã«å®è£
ãããŸããïŒ ãã£ããã¯äœã§ããïŒ
ãã®èšäºã¯å°çšã§ãã Kotlinã³ã³ãã€ã©ãŒãç¹å®ã®ã³ã³ã¹ãã©ã¯ããã©ã®ããã«å€æããŠJavaãšã®äºææ§ãæãããããåŠã¶ããšã«éåžžã«èå³ããããŸããã ç§ã®ç ç©¶ã§ã¯ãKotlinæšæºã©ã€ãã©ãªããæãäžè¬çãª4ã€ã®æ¹æ³ãéžæããŸããã
apply
with
let
run
ãã®èšäºãèªããšãæããå¿
èŠããªããªããŸãã ä»ãç§ã¯ãã¹ãŠãã©ã®ããã«æ©èœããããçè§£ããèšèªãšã³ã³ãã€ã©ãä¿¡é Œã§ããããšãç¥ã£ãŠããã®ã§ãã¯ããã«èªä¿¡ãæããŠããŸãã
é©çšãã
@kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
apply
ã¯åçŽã§ããããã¯ãæ¡åŒµåã€ã³ã¹ã¿ã³ã¹ïŒãã¬ã·ãŒããŒããšåŒã°ããïŒã«é¢ããŠãããã¯ãã©ã¡ãŒã¿ãŒãå®è¡ããã¬ã·ãŒããŒèªäœãè¿ãæ¡åŒµé¢æ°ã§ãã
ãã®æ©èœãé©çšããã«ã¯å€ãã®æ¹æ³ããããŸãã ãªããžã§ã¯ãã®äœæãåææ§æã«ãã€ã³ãã§ããŸãã
val layout = LayoutStyle().apply { orientation = VERTICAL }
ã芧ã®ããã«ãäœææã«æ°ããLayoutStyle
æ§æãæäŸããŸããããã«ããã ã³ãŒããã¯ãªãŒã³ã«ãªãã å®è£
ã®ãšã©ãŒãã¯ããã«å°ãªããªããŸãã åãååã§ãããããééã£ãã€ã³ã¹ã¿ã³ã¹ã§ã¡ãœãããåŒã³åºããŸãããïŒ ããã«æªãããšã«ããªãã¡ã¯ã¿ãªã³ã°ã«å®å
šã«æ¬ é¥ããã£ããšãã¯ïŒ äžèšã®ã¢ãããŒãã§ã¯ããã®ãããªåé¡ã«çŽé¢ããã®ãã¯ããã«å°é£ã«ãªããŸãã ãŸãã this
ãã©ã¡ãŒã¿ãŒãå®çŸ©ããå¿
èŠããªãããšã«æ³šæããŠãã ããã ã¯ã©ã¹èªäœãšåãã¹ã³ãŒãå
ã«ããŸã ã ã¯ã©ã¹èªäœãæ¡åŒµããŠãããã®ããã§ããããã this
ã¯æé»çã«æå®ãããŸãã
ããããããã¯ã©ã®ããã«æ©èœããŸããïŒ çãäŸãèŠãŠã¿ãŸãããã
enum class Orientation { VERTICAL, HORIZONTAL } class LayoutStyle { var orientation = HORIZONTAL } fun main(vararg args: Array<String>) { val layout = LayoutStyle().apply { orientation = VERTICAL } }
IntelliJ IDEA Show Kotlinãã€ãã³ãŒãããŒã«ïŒ[ Tools > Kotlin > Show Kotlin Bytecode
Kotlinãã€ãã³ãŒãã®è¡šç€º]ïŒã®ãããã§ãã³ã³ãã€ã©ãã³ãŒããJVMãã€ãã³ãŒãã«å€æããæ¹æ³ã確èªã§ããŸãã
NEW kotlindeepdive/LayoutStyle DUP INVOKESPECIAL kotlindeepdive/LayoutStyle.<init> ()V ASTORE 2 ALOAD 2 ASTORE 3 ALOAD 3 GETSTATIC kotlindeepdive/Orientation.VERTICAL : Lkotlindeepdive/Orientation; INVOKEVIRTUAL kotlindeepdive/LayoutStyle.setOrientation (Lkotlindeepdive/Orientation;)V ALOAD 2 ASTORE 1
ãã€ãã³ãŒãã®æåãããŸããããªãå Žåã¯ã ãããã® çŽ æŽããã èšäºãèªãããšããå§ãããŸãããã®åŸãããããçè§£ããããšãã§ããŸãïŒåã¡ãœããã¯ã¹ã¿ãã¯ã§åŒã³åºããããããã³ã³ãã€ã©ã¯æ¯åãªããžã§ã¯ããããŒãããå¿
èŠãããããšã«æ³šæããããšãéèŠã§ãïŒã
ãã€ã³ããåæããŸãããïŒ
LayoutStyle
æ°ããã€ã³ã¹ã¿ã³ã¹LayoutStyle
ã¹ã¿ãã¯ã«è€è£œLayoutStyle
ãŸãã- ãã©ã¡ãŒã¿ãŒããŒãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããŸãã
- ã¹ãã¢/ããŒãæäœãå®è¡ãããŸãïŒä»¥äžãåç
§ïŒã
- å€
Orientation.VERTICAL
ã¹ã¿ãã¯ã«æž¡ãããŸãã setOrientation
ãsetOrientation
ããã¹ã¿ãã¯ãããªããžã§ã¯ããšå€ãçºçããŸãã
ããã§æ³šæãã¹ãç¹ãããã€ããããŸãã ãŸããéæ³ã¯äžåé¢ä¿ãªãããã¹ãŠãæåŸ
ã©ããã«è¡ãsetOrientation
ãŸããäœæããLayoutStyle
ã€ã³ã¹ã¿ã³ã¹ã«é¢é£ããŠã LayoutStyle
ã¡ãœãããsetOrientation
ãŸãã ããã«ãã³ã³ãã€ã©ãŒãã€ã³ã©ã€ã³åããããã apply
颿°ã¯ã©ãã«ã衚瀺ãããŸããã
ããã«ããã€ãã³ãŒãã¯ãJavaã®ã¿ã䜿çšããå Žåã«çæããããã®ãšã»ãŒåãã§ãïŒ èªåã§å€æããïŒ
// Java enum Orientation { VERTICAL, HORIZONTAL; } public class LayoutStyle { private Orientation orientation = HORIZONTAL; public Orientation getOrientation() { return orientation; } public void setOrientation(Orientation orientation) { this.orientation = orientation; } public static void main(String[] args) { LayoutStyle layout = new LayoutStyle(); layout.setOrientation(VERTICAL); } } // Bytecode NEW kotlindeepdive/LayoutStyle DUP ASTORE 1 ALOAD 1 GETSTATIC kotlindeepdive/Orientation.VERTICAL : kotlindeepdive/Orientation; INVOKEVIRTUAL kotlindeepdive/LayoutStyle.setOrientation (kotlindeepdive/Orientation;)V
ãã³ãïŒå€æ°ã®ASTORE/ALOAD
æ°ã¥ãããããããŸããã ãããã¯Kotlinã³ã³ãã€ã©ãŒã«ãã£ãŠæ¿å
¥ãããããããããã¬ãŒã¯ã©ã ãã§ãæ©èœããŸãïŒ ããã«ã€ããŠã¯ãèšäºã®æåŸã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
ãš
@kotlin.internal.InlineOnly public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
apply
ã«äŒŒãŠãapply
ãããã€ãã®éèŠãªéãããããŸãã ãŸãã with
åã®æ¡åŒµé¢æ°ã§ã¯ãããŸãããã¬ã·ãŒããŒã¯ãã©ã¡ãŒã¿ãŒãšããŠæç€ºçã«æž¡ãããå¿
èŠããããŸãã ããã«ã with
ã¯ãããã¯é¢æ°ã®çµæãè¿ãã apply
ã¯ã¬ã·ãŒããŒèªäœã®çµæãè¿ããŸãã
äœã§ãè¿ãããšãã§ããã®ã§ããã®äŸã¯éåžžã«ä¿¡ãããããã§ãã
val layout = with(contextWrapper) {
ããã§ã¯ã contextWrapper
ãã¬ãã£ãã¯ã¹ãçç¥ã§ããŸãã contextWrapper
ã¯with
颿°ã®ã¬ã·ãŒããŒã§ããããã context
ããã³attrs
å Žåã ãããããã®å Žåã§ããé©ç𿹿³ã¯apply
ãšæ¯èŒãããšããã»ã©æçœã§ã¯ãããŸããããã®é¢æ°ã¯ç¹å®ã®æ¡ä»¶äžã§åœ¹ç«ã€å ŽåããããŸãã
ãããäžããããã®ã§ãäŸã«æ»ãã以äžã§äœ¿çšwith
å Žåã«äœãèµ·ããããèŠãŠã¿ãŸãããïŒ
enum class Orientation { VERTICAL, HORIZONTAL } class LayoutStyle { var orientation = HORIZONTAL } object SharedState { val previousOrientation = VERTICAL } fun main() { val layout = with(SharedState) { LayoutStyle().apply { orientation = previousOrientation } } }
ãwith
ã¬ã·ãŒããŒã¯SharedState
ã·ã³ã°ã«ãã³ã§ãããã¬ã€ã¢ãŠãã«èšå®ããæ¹åãã©ã¡ãŒã¿ãŒãå«ãŸããŠããŸãã ãããã¯é¢æ°å
ã§ã LayoutStyle
ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã apply
ãããã§ã SharedState
ããèªã¿åãããšã§ç°¡åã«æ¹åãèšå®ã§ãapply
ã
çæããããã€ãã³ãŒããããäžåºŠèŠãŠã¿ãŸãããã
GETSTATIC kotlindeepdive/SharedState.INSTANCE : Lkotlindeepdive/SharedState; ASTORE 1 ALOAD 1 ASTORE 2 NEW kotlindeepdive/LayoutStyle DUP INVOKESPECIAL kotlindeepdive/LayoutStyle.<init> ()V ASTORE 3 ALOAD 3 ASTORE 4 ALOAD 4 ALOAD 2 INVOKEVIRTUAL kotlindeepdive/SharedState.getPreviousOrientation ()Lkotlindeepdive/Orientation; INVOKEVIRTUAL kotlindeepdive/LayoutStyle.setOrientation (Lkotlindeepdive/Orientation;)V ALOAD 3 ASTORE 0 RETURN
ç¹å¥ãªããšã¯äœããããŸããã SharedState
ã¯ã©ã¹ã®éçãã£ãŒã«ããšããŠå®è£
ãããååŸãããã·ã³ã°ã«ãã³ã 以åãšåæ§ã«LayoutStyle
ã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããŸãSharedState
å
ã§previousOrientation
å€ãååŸããå¥ã®åŒã³åºãSharedState
ããã³LayoutStyle
ã€ã³ã¹ã¿ã³ã¹ã«å€ãå²ãåœãŠãæåŸã®åŒã³åºãã
ãã³ãïŒãShow Kotlin Bytecodeãã䜿çšããå ŽåããDecompileããã¯ãªãã¯ãããšãKotlinã³ã³ãã€ã©ãŒçšã«äœæããããã€ãã³ãŒãã®Java衚çŸã確èªã§ããŸãã ãã¿ãã¬ïŒããã¯ãŸãã«ããªããæåŸ
ãããã®ã§ãïŒ
ããã
@kotlin.internal.InlineOnly public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
let
ãnullã«ãªãå¯èœæ§ããããªããžã§ã¯ããæäœãããšãã«éåžžã«äŸ¿å©ã§ãã if-elseåŒã®ç¡éã®ãã§ãŒã³ãäœæãã代ããã«ãåçŽã«ã¹ããŒãã¡ã³ããçµåã§ããŸã?
ïŒãå®å
šãªåŒã³åºãã¹ããŒãã¡ã³ãããšåŒã°ããïŒ let
ã䜿çšãããšãçµæãšããŠãåŒæ°ãå
ã®ãªããžã§ã¯ãã®nulläžå¯ããŒãžã§ã³ã§ããã©ã ããååŸããŸãã
val layout = LayoutStyle() SharedState.previousOrientation?.let { layout.orientation = it }
äŸå
šäœãèããŠã¿ãŸãããã
enum class Orientation { VERTICAL, HORIZONTAL } class LayoutStyle { var orientation = HORIZONTAL } object SharedState { val previousOrientation: Orientation? = VERTICAL } fun main() { val layout = LayoutStyle()
ããã§ã previousOrientation
ã¯nullã«ãªãå ŽåããããŸãã ã¬ã€ã¢ãŠãã«çŽæ¥å²ãåœãŠãããšãããšãnull蚱容åãnon-null蚱容åã«å²ãåœãŠãããšãã§ããªããããã³ã³ãã€ã©ãæããŸãã ãã¡ãããifåŒãèšè¿°ã§ããŸãããããã«ããSharedState.previousOrientation
åŒãžã®äºéåç
§ãSharedState.previousOrientation
ãŸãã let
ã䜿çšãããšãã¬ã€ã¢ãŠãã«å®å
šã«å²ãåœãŠãããšãã§ããåããã©ã¡ãŒã¿ãŒãžã®nulläžå¯ã®åç
§ãååŸããŸãã
ãã€ãã³ãŒãã®èгç¹ããèŠããšããã¹ãŠãéåžžã«åçŽã§ãã
NEW kotlindeepdive/let/LayoutStyle DUP INVOKESPECIAL kotlindeepdive/let/LayoutStyle.<init> ()V GETSTATIC kotlindeepdive/let/SharedState.INSTANCE : Lkotlindeepdive/let/SharedState; INVOKEVIRTUAL kotlindeepdive/let/SharedState.getPreviousOrientation ()Lkotlindeepdive/let/Orientation; DUP IFNULL L2 ASTORE 1 ALOAD 1 ASTORE 2 ALOAD 0 ALOAD 2 INVOKEVIRTUAL kotlindeepdive/let/LayoutStyle.setOrientation (Lkotlindeepdive/let/Orientation;)V GOTO L9 L2 POP L9 RETURN
åçŽãªIFNULL
æ¡ä»¶ä»ãé·ç§»ã䜿çšããŸããããã¯ãæ¬è³ªçã«ã¯æåã§è¡ãå¿
èŠããããŸãããã ããã³ã³ãã€ã©ãå¹ççã«å®è¡ããå Žåãé€ããèšèªã¯ãã®ãããªã³ãŒããäœæããåªããæ¹æ³ãæäŸããŸãã ããã¯çŽ æŽããããšæããŸãïŒ
èµ°ã
runã«ã¯2ã€ã®ããŒãžã§ã³ããããŸãã1ã€ç®ã¯åçŽãªé¢æ°ã2ã€ç®ã¯ãžã§ããªãã¯åã®æ¡åŒµé¢æ°ã§ãã æåã®é¢æ°ã¯ãã©ã¡ãŒã¿ãŒãšããŠæž¡ããããããã¯é¢æ°ã®ã¿ãåŒã³åºãããã2çªç®ã®é¢æ°ãåæããŸãã
@kotlin.internal.InlineOnly public inline fun <T, R> T.run(block: T.() -> R): R = block()
ããããã run
ã¯ãèããããæãåçŽãªé¢æ°ã§ãã ããã¯ãã€ã³ã¹ã¿ã³ã¹ãã¬ã·ãŒããŒãšããŠæž¡ãããã¿ã€ãã®æ¡åŒµé¢æ°ãšããŠå®çŸ©ããã block
颿°ã®å®è¡çµæãè¿ããŸãã run
ã¯let
ãšapply
ãã€ããªããã®ããã«æãããããããŸããããå®éã¯ããã§ãã å¯äžã®éãã¯æ»ãå€ã§ãã apply
ã®å Žåã¯åä¿¡è
èªèº«ãè¿ãã run
ã®å Žåã¯block
颿°ã®çµæãè¿ããŸãïŒ let
ã®å Žåãšåæ§ïŒã
ãã®äŸã§ã¯ã run
ãblock
颿°ã®çµæãè¿ããšããäºå®ã匷調ããŠrun
ãŸãããã®å Žåãããã¯å²ãåœãŠïŒ Unit
ïŒã§ãã
enum class Orientation { VERTICAL, HORIZONTAL } class LayoutStyle { var orientation = HORIZONTAL } object SharedState { val previousOrientation = VERTICAL } fun main() { val layout = LayoutStyle() layout.run { orientation = SharedState.previousOrientation }
åçã®ãã€ãã³ãŒãïŒ
NEW kotlindeepdive/LayoutStyle DUP INVOKESPECIAL kotlindeepdive/LayoutStyle.<init> ()V ASTORE 0 ALOAD 0 ASTORE 1 ALOAD 1 ASTORE 2 ALOAD 2 GETSTATIC kotlindeepdive/SharedState.INSTANCE : Lkotlindeepdive/SharedState; INVOKEVIRTUAL kotlindeepdive/SharedState.getPreviousOrientation ()Lkotlindeepdive/Orientation; INVOKEVIRTUAL kotlindeepdive/LayoutStyle.setOrientation (Lkotlindeepdive/Orientation;)V RETURN
run
ã¯ä»ã®é¢æ°ãšåæ§ã«ã€ã³ã©ã€ã³ã§ãããåçŽãªã¡ãœããåŒã³åºãã«ãªããŸããã ããã§ãå¥åŠãªããšã¯ãããŸããïŒ
æšæºã©ã€ãã©ãªã®æ©èœã«ã¯å€ãã®é¡äŒŒç¹ãããããšã«æ³šæããŸãããããã¯ãã§ããã ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ãã«ããŒããããã«æå³çã«è¡ãããŸããã äžæ¹ãç¹å®ã®ã¿ã¹ã¯ã«ã©ã®é¢æ°ãæé©ã§ããããçè§£ããããšã¯ããããã®éãããããã§ããããšãèãããšãããã»ã©ç°¡åã§ã¯ãããŸããã
æšæºã©ã€ãã©ãªãæ±ãã®ãå©ããããã«ãèæ
®ãããäž»ãªæ©èœéã®ãã¹ãŠã®éããèŠçŽãã衚ãæããŸããïŒäŸå€ããããŸã ïŒïŒ

ã¢ããªã±ãŒã·ã§ã³ïŒè¿œå ã®store/load
æäœ
ãJavaãã€ãã³ãŒãããšãKotlinãã€ãã³ãŒãããæ¯èŒãããšããŸã å®å
šã«çè§£ã§ããŸããã§ããã ç§ãèšã£ãããã«ãKotlinã§ã¯ãJavaãšã¯ç°ãªãã远å ã®æäœastore/aload
ã ããã¯ã©ã ããšé¢ä¿ãããããšã¯ç¥ã£ãŠããŸãããããªãã©ã ããå¿
èŠãªã®ãçè§£ã§ããŸããã
ãããã¬ãŒãã©ã ããã¹ã¿ãã¯ãã¬ãŒã ãšããŠåŠçããã«ã¯ããããã®è¿œå ã®æäœãå¿
èŠã§ããããã«æãããŸã ãããã«ãããäœæ¥ã«ä»å
¥ïŒã¹ãããã€ã³ïŒã§ããŸãã ããŒã«ã«å€æ°ãäœã§ãããã誰ãã©ã ããåŒã³åºããŠãããã誰ãã©ã ãããåŒã³åºãããããªã©ã確èªã§ããŸãã
ããããAPKãå®çšŒåç°å¢ã«æž¡ããšãããããã¬ã®æ©èœã¯æ°ã«ããŸãããïŒ ãã®ããããããã®é¢æ°ã¯ããµã€ãºãå°ããéèŠã§ãªãã«ãããããããåé·ã§ãããåé€ãããå¯èœæ§ããããšèããããšãã§ããŸãã
ãã®ããã«ã¯ããã¹ãŠã®äººã«ç¥ããã誰ããæããããŒã«ã§ããProGuardãé©ããŠããŸãã ãã€ãã³ãŒãã¬ãã«ã§åäœããé£èªåãšããªãã³ã°ã«å ããŠãæé©åãã¹ãå®è¡ããŠãã€ãã³ãŒããããã³ã³ãã¯ãã«ããŸãã JavaãšKotlinã§åãã³ãŒããäœæãã1ã€ã®ã«ãŒã«ã»ããã䜿çšããŠProGuardã®äž¡æ¹ã®ããŒãžã§ã³ã«é©çšããçµæãæ¯èŒããŸããã ãããäœãèµ·ãã£ãã®ãã§ãã
ProGuardã®æ§æ
-dontobfuscate -dontshrink -verbose -keep,allowoptimization class kotlindeepdive.apply.LayoutStyle -optimizationpasses 2 -keep,allowoptimization class kotlindeepdive.LayoutStyleJ
ãœãŒã¹ã³ãŒã
JavaïŒ
package kotlindeepdive enum OrientationJ { VERTICAL, HORIZONTAL; } class LayoutStyleJ { private OrientationJ orientation = HORIZONTAL; public OrientationJ getOrientation() { return orientation; } public LayoutStyleJ() { if (System.currentTimeMillis() < 1) { main(); } } public void setOrientation(OrientationJ orientation) { this.orientation = orientation; } public OrientationJ main() { LayoutStyleJ layout = new LayoutStyleJ(); layout.setOrientation(VERTICAL); return layout.orientation; } }
ã³ããªã³ïŒ
package kotlindeepdive.apply enum class Orientation { VERTICAL, HORIZONTAL } class LayoutStyle { var orientation = Orientation.HORIZONTAL init { if (System.currentTimeMillis() < 1) { main() } } fun main() { val layout = LayoutStyle().apply { orientation = Orientation.VERTICAL } layout.orientation } }
ãã€ãã³ãŒã
JavaïŒ
sgotti@Sebastianos-MBP ~/Desktop/proguard5.3.3/lib/PD/kotlindeepdive > javap -c LayoutStyleJ.class Compiled from "SimpleJ.java" final class kotlindeepdive.LayoutStyleJ { public kotlindeepdive.LayoutStyleJ(); Code: 0: aload_0 1: invokespecial #8 // Method java/lang/Object."<init>":()V 4: aload_0 5: getstatic #6 // Field kotlindeepdive/OrientationJ.HORIZONTAL$5c1d747f:I 8: putfield #5 // Field orientation$5c1d747f:I 11: invokestatic #9 // Method java/lang/System.currentTimeMillis:()J 14: lconst_1 15: lcmp 16: ifge 34 19: new #3 // class kotlindeepdive/LayoutStyleJ 22: dup 23: invokespecial #10 // Method "<init>":()V 26: getstatic #7 // Field kotlindeepdive/OrientationJ.VERTICAL$5c1d747f:I 29: pop 30: iconst_1 31: putfield #5 // Field orientation$5c1d747f:I 34: return }
ã³ããªã³ïŒ
sgotti@Sebastianos-MBP ~/Desktop/proguard5.3.3/lib/PD/kotlindeepdive > javap -c apply/LayoutStyle.class Compiled from "Apply.kt" public final class kotlindeepdive.apply.LayoutStyle { public kotlindeepdive.apply.LayoutStyle(); Code: 0: aload_0 1: invokespecial #13 // Method java/lang/Object."<init>":()V 4: aload_0 5: getstatic #11 // Field kotlindeepdive/apply/Orientation.HORIZONTAL:Lkotlindeepdive/apply/Orientation; 8: putfield #10 // Field orientation:Lkotlindeepdive/apply/Orientation; 11: invokestatic #14 // Method java/lang/System.currentTimeMillis:()J 14: lconst_1 15: lcmp 16: ifge 32 19: new #8 // class kotlindeepdive/apply/LayoutStyle 22: dup 23: invokespecial #16 // Method "<init>":()V 26: getstatic #12 // Field kotlindeepdive/apply/Orientation.VERTICAL:Lkotlindeepdive/apply/Orientation; 29: putfield #10 // Field orientation:Lkotlindeepdive/apply/Orientation; 32: return }
2ã€ã®ãã€ãã³ãŒããªã¹ããæ¯èŒããåŸã®çµè«ïŒ
- ãKotlinãã€ãã³ãŒããã®è¿œå ã®
astore/aload
ã¯æ¶ããŸããastore/aload
ã¯ããããåé·ã§ãããšå€æããããã«åé€ããããã§ãïŒãã®ããã1ã€ãåé€ãããªãã£ãåŸã2ã€ã®æé©åãã¹ãäœæããå¿
èŠããããŸããïŒã - Javaãã€ãã³ãŒããšKotlinãã€ãã³ãŒãã¯ã»ãŒåãã§ãã æåã®ãã®ã¯åæå€ãæäœãããšãã«é¢çœã/å¥åŠãªç¬éããããŸãããKotlinã«ã¯ãã®ãããªãã®ã¯ãããŸããã
ãããã«
éçºè
ã«éåžžã«å€ãã®æ©èœãæäŸããæ°ããèšèªãååŸããããšã¯çŽ æŽãããããšã§ãã ãããã䜿çšããããŒã«ã«é Œãããšãã§ããããšãçè§£ãããããã䜿çšãããšãã«èªä¿¡ãæã£ãŠããããšãéèŠã§ãã ã³ã³ãã€ã©ãäœåãªããšãå±éºãªããšãäœãããªãããšãç¥ã£ãŠãããšããæå³ã§ããç§ã¯Kotlinãä¿¡é ŒããŠããŸãããšèšãããšãã§ããŠããããã§ãã Javaã§æåã§è¡ãå¿
èŠãããããšã ããè¡ããæéãšãªãœãŒã¹ãç¯çŽããŸãïŒãããŠãJVMã®ã³ãŒãã£ã³ã°ã®é·å¹Žã®åã³ãè¿ããŸãïŒã ããã¯ããšã³ããŠãŒã¶ãŒã«ãšã£ãŠãããçšåºŠã®ã¡ãªããããããŸããããå³å¯ãªåã®å®å
šæ§ã«ãããã¢ããªã±ãŒã·ã§ã³ã®ãã°ãå°ãªããªãããã§ãã
ããã«ãKotlinã³ã³ãã€ã©ãŒã¯çµ¶ããæ¹åãããŠãããããçæãããã³ãŒãã¯ããå¹ççã«ãªã£ãŠããŸãã ãã®ãããã³ã³ãã€ã©ã䜿çšããŠKotlinã³ãŒããæé©åããå¿
èŠã¯ãããŸãããããå¹ççã§æ
£çšçãªã³ãŒãã®äœæã«å°å¿µããæ®ãã¯ã³ã³ãã€ã©ã«ä»»ããããšããå§ãããŸãã