티스토리 뷰
ParaSoft JTest 를 이용한 Java Coding Standard 의 세부항목에 대한 설명 시리즈를 올릴까 한다.
흔히 알고 있는 부분도 있고, 잘 알지 못했던 부분도 있는데 JTest 에서 체크하는 항목만 다 알고 있어도 Java 의 올바른 사용법에 어느정도 근접할 수 있다고 생각된다.
대분류 - Coding Conventions [CODSTA]
규칙명 - Avoid nested assignments or assignments embedded in other expressions [CODSTA.NEA-1]
쉽게 말해서 복잡한 표현식을 사용하지 말라는 이야기이다.
- 상당히 C-style 인 부분인데, 본인은 보기만 해도 헷갈려 하기때문에 전혀 사용하고 있지 않는 부분이며, IntelliJ 등의 Tool 에서 체크가능하다. 실제로 C 개발자들이 많이 사용하는 방식이고, Java 에서는 가독성을 해치기 때문에 권장하지 않는 표현식이다.
DESCRIPTION
This rule is an extended version of the previous implementation of rule COSTA.NEA. It identifies nested assignments or assignments embedded in other expressions. An error is reported if code matches the "confusing assignment statement" criteria specified in the filter.
This rule is an extended version of the previous implementation of rule COSTA.NEA. It identifies nested assignments or assignments embedded in other expressions. An error is reported if code matches the "confusing assignment statement" criteria specified in the filter.
- COSTA.NEA 에서 확장된 규칙이고, 중첩된 표현식을 찾아낸다. filter 에 명시된 "confusing assignment statement" 기준과 일치하는 녀석만 찾아낸다는 이야기.
NOTES
This rule is parameterized to extend the functionality of the old rule which only checks for nested assignments.
This rule is parameterized to extend the functionality of the old rule which only checks for nested assignments.
- 기존(COSTA.NEA)에서 단순히 중첩 표현식만 체크했지만 추가적인 옵션을 통해 더 많은 부분을 체크할 수 있으며, 그 추가적인 옵션 내용은 다음과 같다.
PARAMETER
Level 1: Flag only nested assignments (default value)
Level 2: Errors in level 1 + assignments embedded in other expression (comparison, for example)
Level 3: Errors in level 1 and 2 + assignments in non-simple statements.
Level 1: Flag only nested assignments (default value)
Level 2: Errors in level 1 + assignments embedded in other expression (comparison, for example)
Level 3: Errors in level 1 and 2 + assignments in non-simple statements.
- Level 1 : 기본값으로 중첩 표현식만 체크
- Level 2 : Level 1 + 다른 표현식을 내장한 표현식도 체크
- Level 3 : Level 1 + Level 2 + non-simple 문장내의 표현식도 체크
Below are some examples of what would be flagged by which level
Level 1 Level 2 Level 3
Boolean b= (b2= true); Y Y Y
i= j+ (k= 2); Y Y Y
i== 8 ? (k= 1) : (k= 0) Y Y Y
if (i< (j= k)) N Y Y
obj1.equals(obj2= new Object()); N N Y
b= (i < j); N N N
i+= i+ j- k + getInt();
Level 1 Level 2 Level 3
Boolean b= (b2= true); Y Y Y
i= j+ (k= 2); Y Y Y
i== 8 ? (k= 1) : (k= 0) Y Y Y
if (i< (j= k)) N Y Y
obj1.equals(obj2= new Object()); N N Y
b= (i < j); N N N
i+= i+ j- k + getInt();
- 각각의 Level 에 대한 예제.
BENEFITS
Splitting up confusing assignment statements into multiple simple and clear assignment statements would make code less error-prone.
NOTE
You can set the filter level by modifying the corresponding parameter.
Splitting up confusing assignment statements into multiple simple and clear assignment statements would make code less error-prone.
NOTE
You can set the filter level by modifying the corresponding parameter.
- 혼란을 유발시킬 수 있는 표현을 사용하는 문장들을 간단하고 명확한 문장으로 분리함으로서, 에러 발생 가능성을 줄일 수 있다. 단, 필터셋팅을 통해 Level 을 설정해야 한다.
EXAMPLE
package examples.rules.codsta;
public class NEA {
int i;
int j;
public boolean myMethod() {
i= j= 1; //VIOLATION OF ALL LEVEL
//
if (i< (j=2)) //VIOLATION OF LEVEL 2 AND 3
return 0;
//
return i= 1; //VIOLATION OF LEVEL 3
}
}
package examples.rules.codsta;
public class NEA {
int i;
int j;
public boolean myMethod() {
i= j= 1; //VIOLATION OF ALL LEVEL
//
if (i< (j=2)) //VIOLATION OF LEVEL 2 AND 3
return 0;
//
return i= 1; //VIOLATION OF LEVEL 3
}
}
REPAIR
Split up each confusing assignment statement into multiple simple and clear assignment statements.
package examples.rules.codsta;
public class NEAFixed {
int i;
int j;
public boolean myMethod() {
j= 1; //FIXED
i= 1; //FIXED
//
j= 2; //FIXED
if (i< j) //FIXED
return 0;
//
i= 1; //FIXED
return i; //FIXED
}
}
Split up each confusing assignment statement into multiple simple and clear assignment statements.
package examples.rules.codsta;
public class NEAFixed {
int i;
int j;
public boolean myMethod() {
j= 1; //FIXED
i= 1; //FIXED
//
j= 2; //FIXED
if (i< j) //FIXED
return 0;
//
i= 1; //FIXED
return i; //FIXED
}
}
'개발이야기' 카테고리의 다른 글
[Java : Portability] #1 System.getenv() 를 사용하지 마라. (2) | 2007.07.20 |
---|---|
[Java : Struts Frameworks ] #1 스트럿츠 액션 클래스내에 인스턴스 변수를 만들지 말라 (0) | 2007.07.18 |
[Java : Coding Conventions ] #2 Negative logic 을 사용하지 마라 (0) | 2007.07.13 |
[JavaScript] Browser 구분하기 (0) | 2007.07.11 |
[j2ee] J2EE Server 에서의 Hot Deploy 의 영향 (0) | 2007.07.09 |
[HP-UX] DNS 서버 설정. (0) | 2007.07.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 파생
- 채권
- SharedSection
- CODSTA
- 미투데이
- Java
- qaos.com
- JTest
- 본사
- 이미지
- Microsoft
- VMware
- JavaScript
- websocket
- ActiveX
- WsServerContainer
- coding standard
- WebLogic
- GDIProcessHandleQuota
- 의왕
- Windows
- 이표채
- prudent
- 웹표준
- logback
- TyrusServerContainer
- Internet Explorer 7
- hp-ux
- 할인채
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함