07/09/2018, 18:12

Code Clean-up Kotlin

Giống như những ngôn ngữ khác thì việc refactor giúp chúng ta code nhanh , người khác đọc code cũng dễ hiểu hơn. Sử dụng apply cho các câu lệnh khởi tạo đối tượng để cho code sạch hơn, dễ đọc hơn. // Don't val textView = TextView( this ) textView.visibility = View.VISIBLE textView.text ...

  • Giống như những ngôn ngữ khác thì việc refactor giúp chúng ta code nhanh , người khác đọc code cũng dễ hiểu hơn.
  • Sử dụng apply cho các câu lệnh khởi tạo đối tượng để cho code sạch hơn, dễ đọc hơn.
// Don't 
val textView = TextView(this)
textView.visibility = View.VISIBLE
textView.text = "Framgia"
// Do
val textView = TextView(this).apply {
    visibility = View.VISIBLE
    text = "Framgia"
}
  • Sử dụng let{ } thay vì là if
// Don't 
activity?.childFragmentManager
        ?.beginTransaction()
        ?.setCustomAnimations(...)
        ?.replace(...)
        ?.addToBackStack(...)
        ?.commit()
// Do
activity?.let { activity ->
    activity.childFragmentManager
            .beginTransaction(...)
            .setCustomAnimations(...)
            .replace(...)
            .addToBackStack(...)
            .commit()
}
  • when thay thế cho switch của java, nó giống như 1 sự nâng cấp của switch vậy
// Don't
fun  parseResponse(Response response) : Product {
   if (response == null) {
       throw new HTTPException("Something bad happened");
   }
   int code = response.code();
   if (code == 200 || code == 201) {
       return parse(response.body());
   }
   if (code >= 400 && code <= 499) {
       throw new HTTPException("Invalid request");
   }
   if (code >= 500 && code <= 599) {
       throw new HTTPException("Server error");
   }
   throw new HTTPException("Error! Code " + code);
}
// Do
fun parseResponse(response: Response?) = when (response?.code()) {
   null -> throw HTTPException("Something bad happened")
   200, 201 -> parse(response.body())
   in 400..499 -> throw HTTPException("Invalid request")
   in 500..599 -> throw HTTPException("Server error")
   else -> throw HTTPException("Error! Code ${response.code()}")
}
  • Khi chúng ta khai báo 1 view ở xml và lấy giá trị của view đó thì hay sử dụng thuộc tính set() và get() của kotlin để code được tối ưu hơn.
// Don't
private var email: String? = null
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        email = etEmail.text
    }
// Do 
  private var email: String
        get() = etEmail.text  
        set(v) {
            etEmail.text = v
        }
  • Extention fuctions là một trong những tính năng tuyệt vời của kotlin, hay tận dụng nó thật tốt để giúp chúng ta đơn giản trong việc code.
// Don't
        ivCool.setOnClickListener(this)
        ivHeat.setOnClickListener(this)
        ivAutomatic.setOnClickListener(this)
        ivAirFlow.setOnClickListener(this)
        tvCould.setOnClickListener(this)
// Do
fun View.OnClickListener.listenToViews(vararg views: View) {
    views.forEach { it.setOnClickListener(this) }
}
listenToViews(ivCool, ivHeat,ivAutomatic, ivAirFlow, tvCould)
  • Cảm ơn các bạn đã đọc bài viết của mình.
0