2017年8月1日火曜日

Kotlin メモ : takeIf

Java
  1. public Hoge createFromParcel(Parcel source) {  
  2.     final int length = source.readInt();  
  3.  final byte[] data;  
  4.     if (length > 0) {  
  5.         data = new byte[length];  
  6.         source.readByteArray(data);  
  7.     } else {  
  8.         data = null;  
  9.     }  
  10.   
  11.     return new Hoge(data);  
  12. }  
Kotlin 変換直後
  1. override fun createFromParcel(source: Parcel): Hoge {  
  2.     val length = source.readInt()  
  3.     val data: ByteArray?  
  4.     if (length > 0) {  
  5.         data = ByteArray(length)  
  6.         source.readByteArray(data)  
  7.     } else {  
  8.         data = null  
  9.     }  
  10.   
  11.     return Hoge(data)  
  12. }  
source.run {} を使う
  1. override fun createFromParcel(source: Parcel): Hoge = source.run {  
  2.     val length = readInt()  
  3.     val data: ByteArray?  
  4.     if (length > 0) {  
  5.         data = ByteArray(length)  
  6.         readByteArray(data)  
  7.     } else {  
  8.         data = null  
  9.     }  
  10.   
  11.     Hoge(data)  
  12. }  
also を使う
  1. override fun createFromParcel(source: Parcel): Hoge = source.run {  
  2.     val length = readInt()  
  3.     val data: ByteArray?  
  4.     if (length > 0) {  
  5.         data = ByteArray(length).also { readByteArray(it) }  
  6.     } else {  
  7.         data = null  
  8.     }  
  9.   
  10.     Hoge(data)  
  11. }  
if 式にしてみる
  1. override fun createFromParcel(source: Parcel): Hoge = source.run {  
  2.     val length = readInt()  
  3.     val data: ByteArray? = if (length > 0) {  
  4.         ByteArray(length).also { readByteArray(it) }  
  5.     } else {  
  6.         null  
  7.     }  
  8.   
  9.     Hoge(data)  
  10. }  
length に let を使う
  1. override fun createFromParcel(source: Parcel): Hoge = source.run {  
  2.     val length = readInt()  
  3.     val data: ByteArray? = if (length > 0) {  
  4.         length.let { ByteArray(it).also { readByteArray(it) } }  
  5.     } else {  
  6.         null  
  7.     }  
  8.   
  9.     Hoge(data)  
  10. }  
readInt() に takeIf を使う
  1. override fun createFromParcel(source: Parcel): Hoge = source.run {  
  2.     val data: ByteArray? = readInt()  
  3.             .takeIf { it > 0 }  
  4.             ?.let { ByteArray(it).also { readByteArray(it) } }  
  5.   
  6.     Hoge(data)  
  7. }  



0 件のコメント:

コメントを投稿