Czytelność kodu/nazw – przykłady

Posted on Updated on

Taki przykład w javascript(typescript):

private deepClone(item) {
    return jQuery.extend(true, {}, item);
}

to że akurat deep copy zrobi “jQuery.extend(true, {}, item)” to implementacja. Myśląc “implementacja” myślę “szczegół implementacyjny”, a dalej myślę i traktuję to jako “szczegół”. Czytając metodę która coś tam robi (akurat tutaj zmienia relację parent-child na indeksy, zeby klonowanie nie miało cykli, klonuje delikwenta i ustatwia z powrotem relacje), wystarczy nam wiedza że robimy “deepClone”. Nie tylko wystarczy, ale większa wiedza byłaby szkodliwa.

private changeParentRelationsToIds(item: ItemViewModel): ItemViewModel {
    // Cloned data must be without parent and children relations but must be added again after copy finishes
    let parent = item.parent;
    let children = item.children;

    item.parentId = this.changeToNullIfParentIsRoot(item.parent.id);
    item.parent = undefined;
    item.children = [];

    let clonedItem = this.deepClone(item);

    item.parent = parent;
    item.children = children;

    return clonedItem;
}

Przytoczona tutaj implementacja deepCopy nie jest jedyną. http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-an-object to pytanie na SO ma 3 tysiące łapek w górę i jest o czym dyskutować w odpowiedziach i komentarzach. W innym kontekście mógłbym użyć innej implementacji bo aktualna nie działa. A ja nie chcę o tym wszystkim wiedzieć, w mojej metodzie robiącej coś konkretnego chcę wywołać:

let clonedItem = this.deepClone(item);
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s