Regexes를 사용한 강력한 리팩토링
6550 단어 tutorialproductivity
Regex를 사용하여 수백 개의 파일에서 1000개 이상의 메서드 호출을 하루 작업이 아닌 약 5분 만에 업데이트하는 방법을 보여드리겠습니다!
내 리팩토링 작업
코드의 한 섹션에는 단일 일반 getter로 대체할 수 있는 중복 메서드가 많이 있었습니다. 모든 메서드는 구성 개체의 값을 강제하고 기본 개체를 노출하지 않고 나머지 코드베이스에 반환했습니다.
그러나 속성 이름과 호출 위치가 여러 개인 경우 이러한 메서드 호출 수백 개를 업데이트하는 방법은 무엇입니까?
다행히도 모든 메서드는 명명 규칙을 따르므로 이를 활용하고 Regex 찾기 및 바꾸기를 통해 업데이트를 자동화할 수 있습니다.
이전 코드
이 형식에는 여러 가지 방법이 있습니다.
public isMaintainColumnOrder() {
return isTrue(this.gridOptions.maintainColumnOrder);
}
public isSuppressRowTransform() {
return isTrue(this.gridOptions.suppressRowTransform);
}
public isSuppressColumnStateEvents() {
return isTrue(this.gridOptions.suppressColumnEvents);
}
그런 다음 이렇게 불렀습니다.
if(this.gridOptionsWrapper.isMaintainColumnOrder()){
...
}
새 코드
다음 메소드에 대한 호출로 대체됩니다.
public is(property: keyof GridOptions) : boolean {
return isTrue(this.gridOptions[property])
}
이렇게 불렀습니다.
if(this.gridOptionsWrapper.is('maintainColumnOrder'){
...
}
변경으로 인해 다음과 같은 차이점이 발생합니다.
- if(this.gridOptionsWrapper.isMaintainColumnOrder()){
+ if(this.gridOptionsWrapper.is('maintainColumnOrder'){
필요한 변경 사항 분석
명명 규칙 덕분에 변경 사항은 다음 패턴을 따릅니다.
is
접두사 뒤에 있는 속성 이름을 추출합니다필수 정규식
VS Code에서 찾기 및 바꾸기를 수행할 때 두 개의 정규식이 필요합니다. 첫 번째는 필요한 정보를 업데이트하고 추출하는 코드를 찾는 데 사용됩니다. 두 번째 정규식은 변환을 통해 정보를 새 코드로 형식화하는 데 사용됩니다.
정규식 찾기
이것은 모든 메서드 호출을 일치시키는 데 사용하는 정규식입니다.
gridOptionsWrapper.is(\w*)\(\)
이것을 분해합시다.
gridOptionsWrapper.is
: 먼저 이 문자열을 찾습니다(\w+)
: 이제 메서드 이름에 대해 하나 이상의 단어 문자를 일치시키고 이를 정규식 그룹 결과로 추출합니다\(\)
: 괄호()
와 일치합니다. \
는 이스케이프 문자이므로 괄호와 일치시킬 수 있습니다. Regex가 다음 코드를 확인하면 전체 일치 항목과 추출된 그룹 일치 항목을 얻게 됩니다.
if(this.gridOptionsWrapper.isMaintainColumnOrder()){
gridOptionsWrapper.isMaintainColumnOrder()
MaintainColumnOrder
이것은 변환을 수행하기에 충분한 정보입니다.
교체기
이것은 새 메서드 호출을 구성하는 데 사용하는 정규식입니다.
gridOptionsWrapper.is('\l$1')
이는 다음과 같은 방식으로 코드를 대체합니다.
gridOptionsWrapper.is
는 변경되지 않은 상태로 유지됩니다('
여는 괄호 및 작은따옴표\l
다음 섹션의 첫 글자를 소문자$1
일치하는 그룹 제공')
닫기 인용 및 괄호이렇게 하면 속성 이름에 관계없이 모든 조회 방법
is
에 필요한 diff가 제공됩니다.- if(this.gridOptionsWrapper.isMaintainColumnOrder()){
+ if(this.gridOptionsWrapper.is('maintainColumnOrder'){
- if(this.gridOptionsWrapper.isSuppressRowTransform()){
+ if(this.gridOptionsWrapper.is('suppressRowTransform'){
그런 다음 변경 사항을 실행하거나 "모두 바꾸기"버튼을 누르고 커밋하면 됩니다! :피
결론
시간과 노력을 절약할 수 있는 IDE에 내장된 모든 도구를 잊지 마십시오. 찾기/바꾸기에 Regexes를 사용하는 것은 마음대로 사용할 수 있는 도구의 한 예일 뿐입니다.
Reference
이 문제에 관하여(Regexes를 사용한 강력한 리팩토링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/scooperdev/powerful-refactoring-with-regexes-3237텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)