SMART datagrid v1.4 > Concepts

Back  Forward

Concepts.Expression Overivew

SMART datagrid Expression은 그리드에서 데이터를 표시하고 다루는데 사용되는 수식이다. 값을 다루기에 편리한 몇 가지 특별한 연산자를 포함하고 있지만, 큰 데이터셋에서 사용될 수 있도록 최대한 단순하게 정의되고 구현되었다. 

특히, 기존 언어에서 관계, 비교, 논리 연산자 별 우선 순위가 하나로 통합되어 있으므로 필요한 경우 반드시 괄호로 묶어야 한다. 값을 제외한 수식 텍스트는 대소문자를 가리지 않는다. 

EditValidation.expression, DynamicStyle.expression 등에서 사용되고 있다. 

1. Syntax Grammer
Expression ::= ComparisonExpression (LogicalOperator ComparisonExpression)*
ComparisonExpression ::= SimpleExpression (ComparisonOperator SimpleExpression | SetOperator ExpressionList)*
ExpressionList ::= "()" | "(" SimpleExpression ("," SimpleExpression)* ")"
SimpleExpression ::= Term *(AddingOperator Term)
Term ::= Factor (MultiplyingOperator Factor)*
Factor ::= "(" Expression ")" | Variable | Constant | Converting Factor | Unary Factor
Constant ::= Unsigned Number | Charactor String | null | empty | defined | nan | true | false
2. Operators

우선 순위가 높은 것 부터 표시한다. 같은 그룹에 포함된 연산자들 사이에는 우선 순위가 없다. 강제로 우선 순위를 주고 싶으면 괄호로 묶어야 한다. 집합(Set) 연산자와 비교(Comparison) 연산자는 우선 순위가 동일하다. 

Table-1  상수(Constants)
Operator설명예제
nulljavascript null. is, is not 피연사자로만 사용.value is null
empty빈 값. undefined, null, 빈 문자열. is, is not 피연사자로만 사용.value is empty
definedjavascript undefiend가 아닌 값. is, is not 피연사자로만 사용.value is defined
nanjavascript NaN. is, is not 피연사자로만 사용.value is nan
true, falsejavascript true, falsevalue == true
Table-2  변환(Converting) 연산자
Operator설명예제결과
str문자열로 변환str 100'100'
num숫자로 변환num '199'199
intInteger로 변환int '199.9'int
dateDate로 변환. 변환된 두 값을 비교할 때 Date.getTime() 값으로 비교한다. date '2010/11/11' <= local date
date('2010-11-11') <= utc date
date('2010-11-11T00:00:00+09:00')
javascript Date 객체 생성자로 전달할 수 있는 형식의 문자열이어야 한다. 특히, 시간 값을 포함한 날짜 비교 연산이 모든 브라우저에서 동일하게 동작하게 하려면 반드시 시간존이 포함된 ISO 표준형식을 사용해야 한다.
Date.parse 함수 참조.
boolBoolean으로 변환bool '1'true
Table-3  일항(Unaray) 연산자
Operator설명예제결과
not, !부정not true, ! truefalse
-음수-100-100
+양수+100100
len문자열 길이len 'abcd'4
rand0 이상이고 매개변수 보다 작은 정수형 난수rand 10015
srand매개변수로 지정한 길이 만큼의 Ascill 문자열srand 7'xfeDfdG'
lower매개변수로 지정한 문자열을 소문자 문자열로 변경lower 'AbcdEf''abcdef'
upper매개변수로 지정한 문자열을 대문자 문자열로 변경upper 'AbcdEf''ABCDEF'
Table-4  곱(Multiplying) 연산자
Operator설명예제결과
*곱하기11 * 222
/나누기5 / 22.5
div정수 나누기5 div 22
% (mod)나머지5 % 2, 5 mod 21
Table-5  합(Adding) 연산자
Operator설명예제결과
+더하기11 + 213
-빼기5 - 23
Table-6  비교(Comparison) 연산자
Operator설명예제결과
==, !=, <, <=, >, >=비교true|false
is비교value is null, value is empty, value is defined, value is nantrue|false
is not비교value is not null, value is not empty, value is not defined, value is not nantrue|false
match, not match정규식value match '[^d.-+]'true|false
imatch, not imatch대소문자 구분 없는 정규식value match '[^d.-+]'true|false
like, not like텍스트 비교value like '%abc%', value not like '%abc', value like 'abc%true|false
ilike, not ilike대소문자 구분없는 텍스트 비교value ilike '%abc%', value not ilike '%abc', value ilike 'abc%true|false

* 집합 연산자들은 비교 연산자들과 우선 순위가 동일하다. 

Table-7  집합(Set) 연산자
Operator설명예제결과
in, not in포함3 in (1, 2 3), value not in ('a', 'b', 'c')
우측 피연산자는 반드시 괄호('(', ')')로 둘러싸이고, 항목들이 콤마(',')로 분리된 리스트이어야 한다.
true|false
Table-8  논리(Logical) 연산자
Operator설명예제결과
&&논리곱(And)true && falsefalse
||논리합(Or)true || falsetrue
Code -1
    grid.setColumns([{
        fieldName: 'product_id',
        styles: [{
            expression: "value > 1000",
            styles: {
                background: "#01ff0000",
                ...
            }
        }]
    ], {
        ...
    }]);
Code -2
    column.setValidations([{
        "expression": "value is not empty",
        "level": DataLudi.ValidationLevel.ERROR,
        "message": strings["CommCodeMsg"]
    }]);
See Also
DynamicStyle
EditValidation
DataColumn.dynamicStyles
GridBody.dynamicStyles
Examples
컬럼 동적 스타일
기본 동적 스타일
셀 Validation
행 Validation