Compose Method のステキな例

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 の切り出しはこの目的のため「メソッドの抽出」を行っている。