Ch2 Packing Information into Names
가독성이 좋은 코드를 생성하는 방법을 찾다가 The Art of Readable Code라는 책을 발견
책 내용을 공부하면서 좋은 방법들은 정리 하였다. 자세하게 알고 싶으신 분들은 책을 참조하세요.
참조 : The Art of Readable Code
특정한 단어 고르기 - 구체적인 단어를 선택하자.
send - deliver, dispatch, announce, distribute, route
find - search, extract, locate, recover
start - launch, create, begin, open
make - create, set up, build, generate, compose, add, new
1.Avoid Generic Names Like tmp and retval
var euclidean_norm = function (v) {
var retval = 0.0; //에 실행된 명령들이 제대로 동작했느냐를 담아두는 변수라고
var sum_squares = 0.0;
for (var i = 0; i < v.length; i += 1)
{
retval += v[i] * v[i];
sum_squares += v[i]; // Where's the "square" that we're summing? Bug!
}
return Math.sqrt(retval);
};
*만약 변수명이 sum_squares 였다면 다음 처럼 버그는 더 몇백하게 드러날 것이다.
sum_squares += v[i]; // 더해야 하는 '제곱'은 어디에 있다는 말인가? 버그다.
*temp라는 이름은 대상이 짧게 임시적으로만 존재하고 , 임시적 존재 재체가 변수의 가장 중요한 용도일때 한해서 사용
Swap 함수
if (right, left) {
tmp = right;
right = left;
left = tmp
}
2.Loop Iterators
var euclidean_norm = function (v) {
for (var i = 0; i < clubs.size(); i++)
{
for (var j = 0; j < clubs[i].members.size(); j++)
{
for (var k = 0; k < users.size(); k++)
{
if (clubs[i].members[k] == users[j]) ;
}
}
}
//When used correctly, the first letter of the index would match the first letter of the array
for (var ci = 0; ci < clubs.size(); ci++)
{
for (var mi = 0; ci < clubs[ci].members.size(); mi++)
{
for (var ui = 0; ui < users.size(); ui++)
{
if (clubs[ci].members[mi] == users[ui]) ;
}
}
}
return 0;
};
3.Values with Units
var euclidean_norm = function (v) {
var start = (new Date()).getTime(); // top of the page
var elapsed = (new Date()).getTime() - start; // bottom of the page
document.writeln("Load time was: " + elapsed + " seconds");
//By appending _ms to our variables, we can make everything more explicit:
var start_ms = (new Date()).getTime(); // top of the page
var elapsed_ms = (new Date()).getTime() - start_ms; // bottom of the
document.writeln("Load time was: " + elapsed_ms / 1000 + " seconds");
return 0;
};
/* Function parameter Renaming parameter to encode units
Start(int delay ) delay → delay_secs
CreateCache(int size ) size → size_mb
ThrottleDownload(float limit) limit → max_kbps
Rotate(float angle) angle → degrees_cw*/
password => plaintext_password
comment => unescaped_comment
html => html_utf8
data => data_urlenc