Panduan Gaya Kotlin untuk Pengembang Android (Bagian I)

Artikel ini tidak hanya membahas masalah pemformatan estetika, tetapi juga jenis konvensi dan standar lain yang perlu diketahui pengembang Android.





Fokus utamanya adalah, pertama-tama, pada aturan kaku yang diikuti oleh pengembang Google di mana saja!





Awalnya saya mengira artikel itu kecil, tetapi karena banyaknya jumlah contoh kode, itu telah berkembang cukup.





Jadi saya memutuskan untuk membaginya menjadi dua bagian.





Kedua bagian tersebut berisi deskripsi standar kode dalam bahasa pemrograman Kotlin.





:





  • , , , ..









  • - , , , , .









().





!





, .





UTF-8 .





, , : + .kt





( enum



) , :





// PhotoAdapter.kt

class PhotoAdapter(): RecyclerView.Adapter<PhotoViewHolder>() {
	// ...
}


// Utils.kt

class Utils {}

fun Utils.generateNumbers(start: Int, end: Int, step: Int) {
	// ...
}

// Map.kt

fun <T, O> Set<T>.map(func: (T) -> O): List<O> = // ...
fun <T, O> List<T>.map(func: (T) -> O): List<O> = // ...
      
      



Kotlin .kt :





  • , ()





  • ,





  • package





  • import





  • (, , )





:





/*
 * Copyright 2021 MyCompany, Inc.
 *
 *
 */
      
      



KDoc :





/** 
 * Copyright 2021 MyCompany, Inc.
 *
 */

// Copyright 2021 MyCompany, Inc.
//
      
      



@file



, use-site target package



:





/*
 * Copyright 2021 MyCompany, Inc.
 *
 */

@file:JvmName("Foo")

package com.example.android
      
      



package



import



:





package com.example.android.fragments  //  

import android.view.LayoutInflater //    
import android.view.View
      
      







import



, .





:





 import androidx.room.*  //    
      
      



Kotlin , , typealias



.





. extension , .









, .





, .





: , ,





, .





ASCII (0x20).





, :









  • Tab





, (\b, \r, \t, \\



) , Unicode (: \u000a



).





, ASCII, Unicode (∞), Unicode (\u221e



).





, :





//  :   
val symbol0 = "∞"	

// :       Unicode 
val symbol1 = "\u221e" // ∞	

// :    ,     
val symbol2 = "\u221e"

// :  Unicode    
return "\ufeff" + content	//    

      
      



!





when



if



( if



else



):





if (str.isEmpty()) return

when (option) {
    0 -> return
    // …
}
      
      



if, for, when



do



while



:





if (str.isEmpty())
    return  //   !

if (str.isEmpty()) {
    return  // OK
}
      
      



:









  • c









  • , , , .





class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        // ...
    }
}
      
      



K&R:





try {
    val response = fetchDogs("https://api.dog.com/dogs")
} catch (e: Exception) {} // 

try {
    val response = fetchDogs("https://api.dog.com/dogs")
} catch (e: Exception) {
} // OK
      
      



if/else



, :





val value = if (str.isEmpty()) 0 else 1  // OK

val value = if (str.isEmpty())	// 
	0
else
	1

val value = if (str.isEmpty()) { 	// OK
	0
} else {
	1
}

      
      



4 . ( ).





(;



)





100 .





:





  • , (: URL)





  • package



    import







  • , shell





:





  • infix .





  • , :





    • (.



      , .?



      )





    • (::



      )









  • (,)







  • (->



    ) lambda





, ( 4 ):





fun makeSomething(
  val param1: String,
  val param2: String,
  val param3: Int
) {

}
      
      



:





override fun toString(): String {
	return "Hello, $name"
}

override fun toString() = "Hello, $name"
      
      



, - - :





fun waitMe() = runBlocking {
	delay(1000)
}
      
      



(=



):





 val binding: ListItemBinding = 
 	DataBindingUtil.inflate(inflater, R.layout.list_item, parent, false)
      
      



get



set



(4 ):





 val items: LiveData<List<Item>>
 	get() = _items
      
      



Read-only :





val javaExtension: String get() = "java"

      
      



:





  • : , ,





    • . ( backing )









  • ()





( ) ASCII :





  • , : if



    , for



    catch



    :





// 
for(i in 1..6) {
}

// OK
for (i in 1..6) {
}
      
      



  • , else



    catch



    :





// 
}else {
}

// OK
} else {
}
      
      



  • :





// 
if (items.isEmpty()){
}

// OK
if (items.isEmpty()) {
}
      
      



  • :





// 
val four = 2+2

// OK
val four = 2 + 2

//        (->)

// 
items.map { item->item % 2 == 0 }

// OK
items.map { item -> item % 2 == 0 }
      
      



  • : (::



    ), (.



    ) range (..



    )





// 
val str = Any :: toString

// OK
val str = Any::toString

// 
item . toString()

// OK
item.toString()

// 
for (i in 1 .. 6) {
		println(i)
}

// OK
for (i in 1..6) {
		println(i)
}
      
      



  • Sebelum titik dua ( :



    ) untuk menunjukkan ekstensi dari kelas dasar atau antarmuka, dan dalam when



    ekspresi untuk tipe umum:





// 
class Worker: Runnable

// OK
class Worker : Runnable

// 
fun <T> min(a: T, b: T) where T: Comparable<T>
  
// OK
fun <T> min(a: T, b: T) where T : Comparable<T>
      
      



  • Setelah titik dua ( :



    ) atau koma ( ,



    )





// 
val items = listOf(1,2)

// OK
val items = listOf(1, 2)

// 
class Worker :Runnable

// OK
class Worker : Runnable
      
      



  • Di kedua sisi garis miring ganda:





// 
var debugging = false//  

// OK
val debugging = false //   
      
      



Kesimpulan

Artikel ini ternyata lumayan panjang, semoga bermanfaat.





Di artikel selanjutnya: penamaan, konstruksi khusus, dan dokumentasi.





Link yang berguna:





  • Panduan gaya Kotlin (dalam bahasa Inggris)





  • Gaya K&R





  • Buku: Kode Bersih (Bob Martin)





  • Secara singkat tentang buku karangan Bob Martin





Tunggu bagian selanjutnya!












All Articles