Algumas vezes pode não ser tão óbvio perceber uma duplicidade de código. Quando há blocos que fazem a mesma coisa, mas com detalhes diferentes, ainda assim é possível evitar a duplicação de comportamentos semelhantes extraindo a parte em comum para funções separadas.

 

Por exemplo, ao invés de:

 

Local cStatus  := Substr(cParams, (At("<STATUS>",cParams) + Len("<STATUS>")),; (At("</STATUS>",cParams)-At("<STATUS>",cParams)-Len("<STATUS>")) )

 

Local cObsEcm  := Substr(cParams, (At("<OBS>",cParams) + Len("<OBS>")),; (At("</OBS>",cParams)-At("<OBS>",cParams)-Len("<OBS>")) )                       

Local cChamado := Substr(cParams, (At("<CODADE>",cParams) + Len("<CODADE>")),; (At("</CODADE>",cParams)-At("<CODADE>",cParams)-Len("<CODADE>")) )

 

Local cItemCh  := Substr(cParams, (At("<CODITEM>",cParams) + Len("<CODITEM>")),; (At("</CODITEM>",cParams)-At("<CODITEM>",cParams)-Len("<CODITEM>")) )

 

Local cUsuario := Substr(cParams, (At("<USER>",cParams) + Len("<USER>")),; (At("</USER>",cParams)-At("<USER>",cParams)-Len("<USER>")) )                     

 

 

 

Crie uma função para executar o procedimento padrão e apenas repita as chamadas a ela:

 

Local cStatus           := EntreTags(cParams, "<STATUS>"   , "</STATUS>")

Local cObsEcm           := EntreTags(cParams, "<OBS>"      , "</OBS>")   

Local cChamado    := EntreTags(cParams, "<CODADE>"   , "</CODADE>")

Local cItemCh     := EntreTags(cParams, "<CODITEM>" , "</CODITEM>")

Local cUsuario    := EntreTags(cParams, "<USER>"     , "</USER>")           

 

….

….

Function EntreTags(cTexto, cTagIni, cTagFim)

 

Local cStrRet := ''                   // Texto que será extraido e retornado

Local nPosIni := At(cTagIni,cTexto) // Posicao inicial da tag

Local nPosFim := At(cTagFim,cTexto) // Posicao final da tag

 

cStrRet := Substr(cTexto, (nPosIni + Len(cTagIni)),; (nPosFim-nPosIni-Len(cTagIni)) )

 

Return cStrRet

 

  • Sem rótulos