2010-02-12 8 views
1

는 다음 작업을 수행 할 수있는 정력 스크립트를 작성하려는 호출 저에게이 큰 일을 제공하는 등빔 스크립트는

if(obj1 != null) { 
    T1 o1 = obj1.foo(); 
    if(o1 != null) { 
    T2 o2 = o1.bar(); 
    if(o2!=null) { 
     T3 o3 = o2.foo1(); 
     if(o3 != null) { 
     z = o3.bar1(); 
     } 
     else 
     z = null; 
    } 
    else 
     z = null; 
    } 
    else 
    z = null; 
} 
else 
    z = null 
내가 인수로 유형 T1, T2의 쉼표로 구분 된 목록을 소요 VI 명령을 기록 할

... 그리고에 의해 대체 될 수있다.

vimscripting에 대해 어떻게 알 수 있습니까?

+4

Vim에서 쉽게 생성 할 수 있다고하더라도이 코드를 유지하고 싶지는 않습니다. 행운을 빕니다. –

+0

Java로 할 수있는 더 좋은 방법이 있다고 생각합니까? 바보 같은 변수 이름 외에? – user855

+0

NULL을 반환하지 않고 개체에서 예외를 throw하도록합니다. 그런 다음 try {} catch {}에 전체 호출 체인 줄 바꿈 –

답변

2

귀하의 질문에 댓글을 작성한 사람들처럼 귀하의 문제를 해결할 수있는 더 좋은 방법이 있다고 생각합니다. 여기

은 당신의 생각과 내 관심사 :

  • 그 코드는 매우 읽을 수 없습니다; 나중에 코드를 디버그하거나 향상시키는 데 더 어려워지고 노력이 많이 걸릴 것입니다.
  • null 참조가 불가능한 경우에도 접근 방식이 조정됩니다.
  • null이 반환되는 상황이 코드에있을 수 있습니다. 부적절한; 이 중 일부는 이미 더 나은 방법으로 처리 될 수 있습니다.
  • 실제로 스크립트가 버그 또는 컴파일 타임 오류를 일으킬 것으로 의심됩니다. 여기에 하나의 예를 들어 내 머리 위로

    // foo.bar를있는 CAL해야합니다(). 특별한 경우는 foobar() 공공 푸 바() { // 할 일 ... }

  • 꺼져

// Be sure to cal if(foo != null) { 
    Bar bar = foo.bar(); 
    if (bar != null) { 
    Foobar foobar = bar.foobar(); 
    in special cases 
    } 
} 
public Foo bar() { 
    // do work... 
} 

는 대신, 정말 good at catching likely null pointer de-references입니다 FindBugs 같은 정적 분석 도구 (또는 1 개 이상)를 사용 ...이된다.