Compose Method の例がステキだったのでメモ。
public class List { public void add(Object element) { if(!readOnly) { int newSize = size + 1; if (newSize > elements.length) { Object[] newElements = new Object[elements.length + 10]; for (int i = 0; i < size; i++ ) newElements[i] = elements[i]; elements = newElements; } elements[size++] = element; } } …
Compose Method 適用。
public class List { public void add(Object element) { if (readOnly) return; if (atCapacity()) grow(); addElement(element); } private boolean atCapacity() { return (size + 1) > elements.length; } private void grow() { Object[] newElements = new Object[elements.length + 10]; for (int i = 0; i < size; i++ ) newElements[i] = elements[i]; elements = newElements; } private void addElement(Object element) { elements[size++] = element; } …
ポイントはメソッドの詳細レベルをあわせること。addElement の切り出しはこの目的のため「メソッドの抽出」を行っている。