REPORT zaz_call_method. *--------------------------------------------------------------------* * Classe Zumbi -> Use por sua conta e risco * Se o sistema começar a comer cérebros de key users não é nossa culpa! *--------------------------------------------------------------------* *----------------------------------------------------------------------* * CLASS lcl_zombie DEFINITION *----------------------------------------------------------------------* CLASS lcl_zombie DEFINITION. PUBLIC SECTION. METHODS criar_zumbi_que_anda. CLASS-METHODS criar_zumbi_estatua. METHODS comer_cerebros IMPORTING p_quantidade TYPE i EXPORTING p_comeu TYPE char1. METHODS me_da_municao RETURNING value(p_balas) TYPE char30. METHODS me_da_uma_bazuca EXCEPTIONS nao_tem. ENDCLASS. "lcl_zombie DEFINITION *----------------------------------------------------------------------* * CLASS lcl_zombie IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_zombie IMPLEMENTATION. * Créditos da Voz que Invoca o Zumbi - Altered Beast, para Mega Drive METHOD criar_zumbi_que_anda. WRITE / 'RIIIIIISE FROM YOUR GRAVE!'. "voz que invoca o zumbi ENDMETHOD. "criar_zumbi METHOD criar_zumbi_estatua. WRITE / 'RIIIIIISE FROM YOUR GRAVE!'. "voz que invoca o zumbi WRITE / '*gelinho do sub-zero pra virar estátua*'. ENDMETHOD. "criar_zumbi_estatua METHOD comer_cerebros. DO p_quantidade TIMES. * gulp = som de engolir WRITE / 'Braaaaaaaaaaaaaains *gulp*'. ENDDO. * Comeu ou não comeu a parada? IF p_quantidade > 0. p_comeu = 'X'. ENDIF. ENDMETHOD. "comer_cerebros METHOD me_da_municao. * Com esse monte de zumbi, precisamos de balas pqp! p_balas = '10x Shotgun Shells Obtained'. ENDMETHOD. "me_da_municao METHOD me_da_uma_bazuca. * Quer jogar no easy? O negócio é matar zumbi na faca meu filho RAISE nao_tem. ENDMETHOD. "me_da_uma_bazuca ENDCLASS. "lcl_zombie IMPLEMENTATION * Variáveis *--------------------------------------------------------------------* DATA: o_zombie TYPE REF TO lcl_zombie. *--------------------------------------------------------------------* * START-OF-SELECTION *--------------------------------------------------------------------* START-OF-SELECTION. CREATE OBJECT o_zombie. *--------------------------------------------------------------------* * 1 - Chamada de método de Instância, sem assinatura: * Chamada com o CALL METHOD CALL METHOD o_zombie->criar_zumbi_que_anda. * Omitindo o CALL METHOD o_zombie->criar_zumbi_que_anda( ). SKIP 2. *--------------------------------------------------------------------* * 2 - Chamada de método Estático, sem assinatura * Note o sinal de = para chamar itens estáticos * Na chamada estática, não existe refência da instância (O_ZOMBIE) * mas sim da classe local LCL_ZOMBIE * Chamada com o CALL METHOD CALL METHOD lcl_zombie=>criar_zumbi_estatua. * Omitindo o CALL METHOD lcl_zombie=>criar_zumbi_estatua( ). SKIP 2. *--------------------------------------------------------------------* * 3 - Chamada de método dinâmico, sem assinatura: * Sim, dá pra chamar métodos de forma dinâmica * Só não dá para omitir o CALL METHOD nas chamadas dinâmicas. DATA: l_metodo TYPE char30. l_metodo = 'CRIAR_ZUMBI_ESTATUA'. CALL METHOD o_zombie->(l_metodo). l_metodo = 'CRIAR_ZUMBI_QUE_ANDA'. CALL METHOD o_zombie->(l_metodo). * E os parâmetros? É só escrever, o compilador ignora a síntaxe * dos parâmetro de métodos dinâmicos. Escreva direito heim? :) SKIP 2. *--------------------------------------------------------------------* * 4 - Chamada de método de Instância, com parâmetro de * importação e exportação: DATA: l_comeu TYPE char1. * Sem omitir o CALL METHOD é bem similar com o CALL FUNCTION CALL METHOD o_zombie->comer_cerebros EXPORTING p_quantidade = '4' IMPORTING p_comeu = l_comeu. * Omitindo, vc escreve os parâmetros nos ( ) o_zombie->comer_cerebros( EXPORTING p_quantidade = '0' IMPORTING p_comeu = l_comeu ). SKIP 2. *--------------------------------------------------------------------* * 5 - Chamada de método de Instância, com parâmetro retorno: DATA l_balas TYPE char30. * Returning parece o EXPORTING, mas método só podem retornar UM * paramêtro, e nenhum mais. Lembrando que retornar <> exportar * para métodos, hehehehehehe * To com medo, me dá munição pra matar zumbi CALL METHOD o_zombie->me_da_municao RECEIVING p_balas = l_balas. WRITE: / l_balas. * E o jeito mágico de receber direto na variável. * Na chama do método ali, vale o que eu expliquei nos tópicos * anteriores l_balas = o_zombie->me_da_municao( ). WRITE: / l_balas. SKIP 2. *--------------------------------------------------------------------* * 6 - Chamada de método de Instância, com exceções: CALL METHOD o_zombie->me_da_uma_bazuca EXCEPTIONS nao_tem = 1. IF sy-subrc <> 0. WRITE: / 'Se vira com a DOZE, campeão!'. ENDIF. o_zombie->me_da_uma_bazuca( EXCEPTIONS nao_tem = 1 ). IF sy-subrc <> 0. WRITE: / 'Se vira com a DOZE, campeão!'. ENDIF. *--------------------------------------------------------------------* * Por Mauricio Cruz * Abraços à todoas que gostam e não gostam de zumbis