Regexes를 사용한 강력한 리팩토링

6550 단어 tutorialproductivity
코드베이스 전체에서 주요 리팩토링 작업에 직면했을 때 Regexes를 사용하여 무거운 작업을 대신 수행하여 잠재적으로 작업 시간을 절약할 수 있다는 것을 잊지 마십시오!

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를 사용하는 것은 마음대로 사용할 수 있는 도구의 한 예일 뿐입니다.

    좋은 웹페이지 즐겨찾기