사전 조건을 미리 반환해 방어해라
def some_fun(data: object):
someThing...
if condition:
"어쩌구 저쩌구 로직..."
return 결과값
else:
return 결과값
# Better
def some_fun(data: object):
someThing...
if not condition: # 예외 케이스들을 먼저 파악해 분리
return 결과값
preprocessLogic.. # 조건에 맞는 데이터 라고 가정하고 동작한다! 읽기 쉬워짐!!
return 결과값
안쓰는 코드는 지워라, 필요하다면 형상관리 툴을 이용해 복구 하라
코드의 일관성을 유지해라
// Bad | Cause: Many Running Case!
var value
if (value == null){
Some Code...
}
return value
var value
return value ?: SomeCode...
var value
return value?.let{SomeCode} ?: run {SomeThingCode} // 모두 다른 동작 같은 결과.
// Better
var value
return value?.let{...}
var value
return value?.let{...} // 여러 방법 보다 일관성 있게 작성해두면 읽기 편해진다
기존 인터페이스가 복잡하면 이를 호출하는 인터페이스를 작성해서 개발해라?
독자의 입장으로 코드를 정렬해두어라
결합도가 높은 코드끼리는 같이 두어 응집도를 높여라(같은 폴더, 같은 파일)
초기화와 선언은 같이 두어라 미리 초기화 해두면 복잡해진다
value = None
data = None
변수 value사용안함..
변수 value사용...
변수 data사용..
변수 value, data 사용...
# Better
변수 value사용안함..
value = None
변수 value사용...
data = None
변수 data사용..
변수 value, data 사용... # 초기화와 선언을 같이 두니 훨씬 읽기 편해졌다!
설명하는 변수를 두어 읽기 편하게 하라
return DataType(
LongFunc...
LongLongFunc...
)
# Better
data_value = LongFunc...
data_location = LongLongFunc...
return DataType(
data_value, data_location # 인자가 구체적으로 어떤것인지 파악 가능해졌다!
)
# NamedParameter를 사용하고 매개변수의 명칭이 명확하다면 NamedParameter가 더 깔끔한것 같다
상수에 이름을 붙여 설명하는 상수로 변경해라, 의미가 모호한 매직넘버 금지…
if status == 404:
# Better
if status == PAGE_NOT_FOUND:
# 명시적! 한눈에 바로 알아 볼 수 있다.
명시적인 매개 변수, 내부 데이터를 명확하게 알 수 있게 하자
person = {
"age": 20, ...
}
# Better
class Person:
age: int = 20
person = Person()
person.age # Wow!
def some_thing():
some_thing_a...
some_thing_a...pre_process
# 공백을 두어 뭉쳐두자!
some_thing_b...
some_thing_b...pre_process
def some_thing_helper():
some_thing_a...
pre_process(some_thing_a)
# 공통되는 부분은 도우미 함수를 추출해 재사용하자!
some_thing_b...
pre_process(some_thing_b)
def pre_process(func: Callable[[some], value]): ...
# 응집도를 높여 하나의 더미로 만들자! 관련된 기능을 찾기 편해진다!
def some_thing_cohesion():
a_logic(), b_logic()
def a_logic():
value = some_thing_a...
pre_process(value)
def b_logic(): ...
문제를 주석없이 묻어두는것 보다 이유와 배경, 문제를 적어두는게 차라리 낫다
필요없는 주석은 지우자 ㅎㅎ.. 2번과 이어지는듯
def func():
# return a ?왜 존재하는가
return a
def func2():
if value:
# 값이 존재하면!
...
else value:
# 값이 없으면!
...
# Better
def better_func():
# Guard Clause
if not value:
return ...
...Code!
코드 정리 구분 ex: PR
연쇄적인 정리
코드 정리의 일괄 처리량
리듬
얽힘 풀기
코드 정리 시점
요소들을 유익하게 관계 맺는법