אתגר ריפקטורינג ב JavaScript
יניב היה צריך פונקציה שמחזירה קוד HTML לאלמנט קישור לפי מספר מאפיינים. הפונקציה מקבלת אוביקט בשם props ותומכת במאפיינים הבאים:
אם האוביקט מכיל את המאפיין href אז ל a יהיה href עם הערך המתאים. אחרת לא יהיה לו.
אם האוביקט מכיל את האלמנט title אז ל a יהיה title עם הערך המתאים. אחרת לא יהיה לו.
אם האוביקט מכיל את האלמנט text אז ל a יהיה טקסט עם הערך שעבר.
זאת הפונקציה שיניב כתב:
function showLink(props) {
return (
`<a
${props.href ? `href="${props.href}"` : ''}
${props.title ? `title="${props.title}"` : ''}
>${props.text ? props.text : ''}
</a>`
);
}
כשדנה הסתכלה על הקוד היא הרגישה שהפונקציה מסורבלת מדי. היא הציעה לשכתב אותה בעזרת שתי פונקציות עזר לקוד הבא:
function showLinkBetter(props) {
const { href, title } = attrs(props);
const { text } = values(props);
return (
`<a ${href} ${title}>${text}</a>`
);
}
"ויותר מזה", התלהבה דנה, "עם פונקציות העזר שלי אתה יכול לתמוך במאפיינים חדשים בצורה קלה בלי לשנות את הפונקציות attrs ו values שכתבתי - רק תוך שינוי הפונקציה showLinkBeter".
איך נראה המימוש של attrs ו values שדנה כתבה?