본문 바로가기
ABAP/Syntax

[Syntax] REDUCE - 축소 연산자

by name_text 2023. 7. 12.

REDUCE

축소 연산자

 

ABAP New syntax 중 하나인 REDUCE 구문 입니다.

단순한 집계 같은 경우 LOOP 보다 사용이 간편하고 성능도 우수하다 합니다.

 

# 사용 예시

SELECT
  *
FROM T001
INTO TABLE @DATA(LT_TMP).

" 기존 LOOP SUM 구문
DATA LV_CNT TYPE I VALUE 0.
LOOP AT LT_TMP INTO DATA(LS_TMP) WHERE XTEMPLT EQ SPACE.
  LV_CNT += 1.
ENDLOOP.
WRITE:/ LV_CNT.

CLEAR LV_CNT.
" REDUCE 를 이용한 COUNT
LV_CNT = REDUCE I( INIT X = 0
                   FOR LS IN LT_TMP
                   WHERE ( XTEMPLT EQ SPACE )
                   NEXT X += 1 ).
WRITE:/ LV_CNT.

" RESUCE 를 이용한 String template
DATA(LV_STR1) = REDUCE STRING( INIT TXT = `CHAR`
                               FOR LS IN LT_TMP
                               WHERE ( XTEMPLT EQ SPACE )
                               NEXT TXT &&= | { LS-BUKRS }| ).
CONDENSE LV_STR1.
WRITE:/ LV_STR1.

DATA(LV_STR2) = REDUCE STRING( INIT TXT = `CHAR`
                               FOR N = 1 UNTIL N > 10
                               NEXT TXT &&= | { N }| ).
CONDENSE LV_STR2.
WRITE:/ LV_STR2.

" ABAP DOCU의 예제 소스
cl_demo_output=>new(
       )->next_section( 'Summation'
       )->write( REDUCE i( INIT sum = 0
                           FOR n = 1 UNTIL n > 10
                           NEXT sum = sum + n )
       )->next_section( 'Concatenation without THEN'
       )->write( REDUCE string( INIT text = `Count up:`
                                FOR n = 1 UNTIL n > 10
                                NEXT text &&= | { n }| )
       )->next_section( 'Concatenation with THEN'
       )->write( REDUCE string( INIT text = `Count down:`
                                FOR n = 10 THEN n - 1 WHILE n > 0
                                NEXT text &&= | { n }| )
       )->next_section( 'Non arithmetic expression'
       )->write( REDUCE string( INIT text = ``
                                FOR t = `x` THEN t && `y`
                                            UNTIL strlen( t ) > 10
                                NEXT text &&= |{ t } | )
       )->display( ).

 

댓글