Sean's Note: 6月 2015

2015年6月18日 星期四

Set maximal text length of EditText

In XML:
android:maxLength="20"

In Code:
// EditText 並沒有直接提供 setMaxLength() 這類的方法,所以只能透過 setFilters 來達成
int maxLength = 20;
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});


2015年6月14日 星期日

[讀書筆記] Refactoring - CH9 - 10

Chapter 9. Simplifying Conditional Expressions

Decompose Conditional
把複雜的 conditional expressions 寫成回傳布林值的函式也許會更清楚。(視情況而定)

Consolidate Conditional Expression
把多個有相同結果的判斷式,利用 Ors 和 Ands 寫成一個判斷式。(視情況而定)

Consolidate Duplicate Conditional Fragments
簡而言之,如果 if 和 else 裡有部分同樣的邏輯,何不把它搬到外面呢?

Remoce Control Flag
有些人會用 control flag 來決定是否終止 while 或 for 迴圈,何不直接用 break 和 return 呢?但對於多層迴圈,control flag 還是蠻好用的。

Replace Nested Conditional with Guard Clauses
把巢層的判斷式改寫成單層的判斷式。(看範例比較清楚)

Remove Condition with Polymorphism
這取決於有沒有要把 Object type 改寫成 subclass。

Introduce Null Object
可能得要多寫好幾個 Null classes...

Introduce Assertion
使用 assertion 可以即使反應 programmer 使用函式時的錯誤。


Chapter 10. Making Method Calls Simpler

Rename Method
簡單又常用,沒什麼好說的。

Add Parameter/Remove Parameter
...

Separate Query from Modifier
範例舉得好像不太好。

Parameterize Method
如果有幾個函式有著相同的邏輯依賴於某些變數,可以寫成一個帶有參數的函式。

Replace Parameter with Explicit Method
根本就不會想寫出課本舉的第一個範例,第二個 factory method 的範例倒是可以參考。

Preserve Whole Object
如果有個函式傳遞某個 object 的多個成員變數當作參數,不如傳遞整個 object 吧。

Replace Parameter with Method
a = funcA(); funcB(a); 可以的話,考慮直接在 funcB 裡,直接呼叫 funcA。

Introduce Parameter Object
如果有一些函式的參數列都一樣,隱含著我們可以為此建立一個 object 來持有這些資料,然後 Preserve Whole Object。

Remove Setting Method
封裝成員變數,public to private + accessors。如果一個成員變數是 immutable 的,就不要提供 setting method。

Hide Method
如果函式沒要給其它人用,就把它設成 private 吧。

Replace Constructor with Factory Method
...

Encapsulate Downcast
return Object 讓 caller 去做 cast,不如 cast 完再 return 回去。

Replace Error Code with Exception
...

Replace Exception with Test
...

2015年6月1日 星期一

Android Dashboards 2015.6.1

Android 官網公布了六月的各版本使用率圖表,看來目前 Android 4.4 還是佔大宗。

圖片來源: http://developer.android.com/about/dashboards/index.html