Novidades do ABAP 740

 ABAP 740


Temas:
     
     Expressões de construção:
          * Instanciando com operador NEW;
          * Valores com operador VALUE;
          * Conversões com operadores CONV e CAST;
          * Exatidão de dados usando EXACT;
          * Condicionais usando operadores COND e SWITCH;


Instanciando com operador NEW



     O operador de instancia NEW é o operador de construção para criar objetos.

          * ... NEW dtype( value ) ...
               Cria uma instancia de objetos do tipo dtype e já atribui para alguma variável.
          
          * ... NEW class( p1 = a1 p2 = a2 ... ) ...
               Cria instancia da classe e passa parâmetros para a instancia.

          * ... NEW #( value ) ...
               Cria objetos de tipo genérico.

          Exemplos de Uso:
               .
               DATA oref TYPE REF TO class.
               oref = NEW #( ... ).
               
               OU

               DATA(oref) = NEW class( ... ).



Valores com operador VALUE


     Usado para construir objetos passando um valor pré-estabelecido.

          * ... VALUE dtype|#( ) ...
               Construtor com valor inicial para um tipo genérico.

          * ... VALUE dtype|#( comp1 = a1 comp2 = a2 ... ) ...
               Cria uma estrutura onde para cada component um valor é passado.

          * ... VALUE dtype|#( ( ... ) (  ... ) ... ) ...
               Construtor de tabela interna, onde para cada linha um valor é passado. Dentro dos parenteses você usa a sintaxe para estruturas mas não diretamente a sintaxe de linhas da tabela.
               Mas você pode aninhar os operadores VALUE.

          Exemplos de Uso:
       
          CLASS c1 DEFINITION. 
        PUBLIC SECTION. 
          TYPES: BEGIN OF t_struct, 
                   col1 TYPE i, 
                   col2 TYPE i, 
                 END OF t_struct. 
          CLASS-METHODS m1 IMPORTING p TYPE t_struct. 
          ENDCLASS. 

      CLASS c1 IMPLEMENTATION. 
        METHOD m1. 
          ... 
        ENDMETHOD. 
      ENDCLASS. 

      START-OF-SELECTION. 

      c1=>m1( VALUE #( ) ).


      
     Exemplos de Uso2:

     TYPES t_itab TYPE TABLE OF i WITH EMPTY KEY. 

     DATA itab TYPE t_itab.

     itab = VALUE #( ( ) ( 1 ) ( 2 ) ).

            Structured line type (RANGES table):

     DATA itab TYPE RANGE OF i.

     itab = VALUE #( sign = 'I'  option = 'BT' ( low = 1  high = 10 )
                                               ( low = 21 high = 30 )
                                               ( low = 41 high = 50 )
                                 option = 'GE' ( low = 61 )  ).


     Exemplos de Uso3:


     TYPES:  BEGIN OF t_col2,
                col1 TYPE i,
                col2 TYPE i,
             END OF t_col2.

     TYPES: BEGIN OF t_struct,
              col1 TYPE i,
              col2 TYPE t_col2,
            END OF t_struct.

     DATA: struct TYPE t_struct,
           col2 TYPE t_col2. 
     "1
     struct = VALUE t_struct( col1 = 1
                              col2-col1 = 1
                              col2-col2 = 2 ).

     "2
     col2   = VALUE   t_col2( col1 = 1
                              col2 = 2 ).
     struct = VALUE t_struct( col1 = 1
                              col2 = col2 ).

     "3
     struct = VALUE t_struct( col1 = 1
                              col2 = VALUE #( col1 = 1
                                              col2 = 2 ) ).
          



Conversões com operadores CONV e CAST

                                         
     CONV -> Este operador de conversão é um operador de construção que convert um valor em um tipo específico.
          
          * ... CONV dtype|#( ... ) ...
               Você pode usar o CONV onde precisar de uma variável auxiliar antes de saber o typo de dados.

          Exemplo de Uso:

          DATA text TYPE c LENGTH 255.
      DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV string( text ) ).

      DATA text TYPE c LENGTH 255.
      DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV #( text ) ).


          Exemplo de Uso2:

      IF ' ' = CONV char1( ` ` ).
         ...
      ENDIF.


     CAST -> O operador CAST é o operador construtor que executa o up ou down cast para variáveis com um tipo específico de dados.
          
          * ... CAST dtype|class|interface|#( ... ) ...
               
                 - Você usa o CAST para down cast quando você precisar de variáveis auxiliares antes de saber o tipo.
                 - Você usa o CAST para o up cast


          Exemplo de Uso:

          DATA(components) = CAST cl_abap_structdescr(
      cl_abap_typedescr=>describe_by_name( 'T100' ) )->components.

      TYPESBEGIN OF t_struc
        col1 TYPE i
        col2 TYPE i
       END OF t_struc
. 

          
          Exemplo de Uso2:

      DATA dref  TYPE REF TO data
      DATA struc TYPE t_struc

      dref NEW t_struc)

      CAST t_strucdref )->col1 struc-col1




Exatidão de dados usando EXACT


     O operador EXACT é o construtor que executa um cálculo com exatidão (Sem Perdas).

          * ... EXACT dtype|#( arith_exp ) ...
               arith_exp é uma expressão aritmética que calcula com menor perda do tipo decfloat34 e o resultado será convertido para um tipo específico.

           * ... EXACT dtype|#( arg ) ...
                arg não é uma expressão aritmética e este valor é apontado para o resultado de um tipo específico de acordo com as regras para menor perda de dados.



           Exemplo de Uso:

      TRY.
          DATA(r1) = EXACT decfloat34( 3 / 2 ).
          cl_demo_output=>write( |Exact: { r1 }| ).
        CATCH cx_sy_conversion_rounding INTO DATA(e1).
          cl_demo_output=>write( |Not exact: { e1->value }| ).
      ENDTRY.

      TRY.
          DATA(r2) = EXACT decfloat34( 3 / 7 ).
          cl_demo_output=>write( |Exact: { r2 }| ).
        CATCH cx_sy_conversion_rounding INTO DATA(e2).
          cl_demo_output=>write( |Not exact: { e2->value }| ).
      ENDTRY.

      cl_demo_output=>display( ).

      The output is:

      Exact: 1.5


      Not exact: 0.4285714285714285714285714285714286





Condicionais usando operadores COND e SWITCH


          * ... COND dtype|#( WHEN log_exp1 THEN result1
                                         [  WHEN log_exp2 THEN result2 ]
                                         ...                                          
                                         [ ELSE resultn ] ) ...

                 Construtor onde o resultado é de um tipo específico onde depende da expressão lógica.

          * ... SWITCH dtype|# ( operand
                                                 WHEN const1 THEN result1
                                              [  WHEN const2 THEN result2 ]
                                              ...
                                              [ ELSE resultn ] ) ...
                 Construtor onde o resultado é de um tipo específico dependendo da diferenciação de caso.



               Exemplo de Uso COND:

               DATA(time) =
           COND string(
            WHEN sy-timlo < '120000' THEN
             |{ sy-timlo TIME = ISO } AM|
            WHEN sy-timlo > '120000' THEN
             |{ CONV t( sy-timlo - 12 * 3600 )
            TIME = ISO } PM|
             WHEN sy-timlo = '120000' THEN
              |High Noon|
             ELSE
               THROW cx_cant_be( ) ).
     

               Exemplo de Uso SWITCH:


          CLASS cx_langu_not_supported DEFINITION INHERITING FROM cx_static_check.
          ENDCLASS.

          CLASS class DEFINITION.
            PUBLIC SECTION.
              METHODS meth IMPORTING iso_langu   TYPE string
                           RETURNING VALUE(text) TYPE string.
          ENDCLASS.

          CLASS class IMPLEMENTATION.
            METHOD meth.
              ...
            ENDMETHOD.
          ENDCLASS.

          ...


            DATA(text) =
              NEW class(
                )->meth(
                    SWITCH #( sy-langu
                              WHEN 'D' THEN `DE`
                              WHEN 'E' THEN `EN`
                              ELSE THROW cx_langu_not_supported( ) ) ).







Comentários

Postagens mais visitadas