함수에서 추상화 수준을 혼합하지 말아야 하는 이유
당신의 코드가 충분히 훌륭하고 다른 사람이 몇 달 안에 그것을 완벽하게 이해할 것이라는 확신을 갖기 위해 온갖 변명을 생각해 낼 수 있습니다. 그것은 당신이 스스로 설정한 함정에 실제로 갇혔을 때 당신에게 도움이 되지 않을 것입니다. 자, 이것은 정말 드라마틱하게 들리지만, 나는 당신이 요점을 이해하기를 바랍니다!
깨끗한 코드를 작성함으로써 다른 사람이 계속해서 코드를 작성하도록 도울 수 있지만 자신에게도 도움이 될 것입니다. 저에게 가장 큰 문제는 좋은 코드를 인식할 수 있다는 것입니다. 하지만 코딩을 시작하면 실제로 코드를 좋게 만드는 것이 무엇인지 확신할 수 없기 때문에 이 모든 것이 무너집니다.
내가 선택한 개념 중 하나는 추상화 수준(함수에서)입니다. 다음 코드를 살펴보십시오.
function createUser(username, password) {
if (username.trim().length <= 2) {
console.error('Username too short.');
return;
}
if (password.length <= 6 || password.length > 30) {
console.error('Password must be longer than 6 characters and shorter than 30');
return;
}
const user = {
username,
password
};
database.insert(user);
}
별로 복잡하지 않죠? 이 함수가 수행하는 작업과 확인 중인 유효성 검사를 매우 쉽게 결정할 수 있습니다. 그러나 우리는 다른 개발자들이 더 쉽게 읽을 수 있도록 만들 수 있습니다.
이것은 가능한 경우 수정해야 하는 추상화 수준을 혼합한 예입니다. 이것이 약간 이상하게 보일 수 있는 이유는 데이터베이스에 일부 데이터 삽입을 처리하는 일부 저수준 검사(사용자 이름 및 암호 길이)와 일부 고급 기능이 있기 때문입니다. 이 함수를 더 읽기 쉽게 만들려면 추상화 수준을 고르게 조정해야 합니다.
function createUser(username, password) {
try {
validateUserData(username, password)
} catch(error) {
showErrorMessage(error);
return;
}
const user = {
username,
password
};
database.insert(user);
}
function validateUserData(username, password) {
if (!isUsernameValid(username)) {
throw new Error('Username too short');
}
if (!isPasswordValid(password)) {
throw new Error('Password must be longer than 6 characters and shorter than 30');
}
}
function isUsernameValid(username) {
return username.trim().length > 2;
}
function isPasswordValid(password) {
return password.length > 6 && password.length <= 30;
}
function showErrorMessage(message) {
console.error(message);
}
이것은 조금 더 많은 코드이지만 함수 이름을 읽는 것만으로도 함수가 수행하는 작업이 매우 분명하다고 생각합니다. 함수가 수행해야 하는 작업을 이해하기 위해 코드를 더 깊이 파고들거나 인지 부하를 늘릴 필요가 없습니다.
이러한 방식으로 함수를 분할하면 모든 함수에 대한 엣지 케이스에 쉽게 집중할 수 있기 때문에 더 나은 테스트를 작성할 수 있는 기회가 주어졌습니다.
이 방법이 더 복잡한 기능에서 무엇을 할 수 있는지 상상할 수 있습니다!
나는 이것이 당신이 이 기능을 분할하는 데 보낸 시간의 가치가 분명히 있다고 주장합니다. 버그를 더 빨리 찾을 수 있고 반년 전에 작성한 코드를 다시 익히는 데 터무니없는 시간을 할애하지 않아도 됩니다!
Reference
이 문제에 관하여(함수에서 추상화 수준을 혼합하지 말아야 하는 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bornfightcompany/why-you-shouldn-t-mix-levels-of-abstraction-in-your-functions-332f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)