Encontre um valor de atributo específico numa única linha de código!

Tradução automática de Deepl

Lembra-se dos dias em que tinha de utilizar loops aninhados e declarações condicionais para recuperar o atributo de um objecto? Então acabou com um longo e complicado pedaço de código? Bem, esses dias acabaram! Graças à notação de objectos combinada com colecções e os seus métodos, agora é capaz de escrever código mais rapidamente, e de uma forma mais legível!

Encontrar o valor de um atributo específico nunca foi tão fácil. Vamos dar uma vista de olhos a um cenário da vida real e descobrir como!

Cenário da vida real

Imagine que quer filtrar os seus processos de execução pelo tipo deles.

Como já deve saber, o Get process activity permite recuperar uma lista de processos em execução e utilizadores conectados. Como se mostra abaixo, parte da informação devolvida é o tipo de processo:

{ 
   { 
   "processos":[  
      { 
         "nome": "Principal",
         "sessionID":"",
         "número":0,
         "ID":0,
         "visível":falso,
         "systemID":"140736073646912",
         "tipo":-39, //Main 4D process
         "estado":0,
         "cpuUsage":0.033,
         "cpuTime":922.62008,
         "preemptive":true
      },
     { 
         "nome": "Processo de candidatura",
         "sessionID":"",
         "número":1,
         "ID":13,
         "visível":verdadeiro,
         "systemID":"123145536053248",
         "tipo":-1, //Processo principal
         "estado":2,
         "cpuUsage":0.002,
         "cpuTime":187.902836,
         "preemptivo":falso
      },
     {}
   ]
}


Vamos tentar encontrar o processo principal. Se o fizéssemos da maneira antiga, usaríamos um laço For com uma declaração condicional, o que nos deixa com um pedaço de código bastante longo:

C_OBJECT($obj)
C_LONGINT ($i)
ARRAY OBJECT (processesCol;0 )

$obj:
=Get process activity
OB GET ARRAY
($obj;"processos";processesCol)
ARRAY OBJECT ($result;0 )

For ($i
;1;Size of array(processosCol))
If
(OB Get(processosCol{$i}; "tipo")= Main process)
APPEND TO ARRAY($result;processosCol{$i})
End if

End for

O modo antigo funciona como um encanto, mas temos de admitir que é um pouco longo escrever apenas para encontrar um único elemento. Boas notícias! Graças ao query método de recolha, pode facilmente extrair o valor desejado … numa única linha de código!

C_COLLECTION($result)
$result:
=Get process activity
.processes.consulta("type = :1";Main process)

E está feito! O seu código é limpo, fácil de compreender e mais legível. Viva a simplicidade!

Acabámos de riscar a superfície do que pode ser feito. E, claro, o método query suporta operações mais complexas! Além de consultar uma colecção, também pode encomendar, reduzir, expandir ou filtrar. Mais de 40 métodos estão disponíveis para uma utilização óptima das colecções!

Avatar
Gerente de Marketing do Produto - Intissar entrou em 4D em 2017 como Gerente de marketing de Produto. Trabalha junto as equipes do produto, marketing, engenharia e assistência técnica para destacar o ‘por quê’, o ‘como’ e o ‘quê’ das funcionalidades novas e atualizadas a diferentes audiências. Esta proximidade lhe permite elaborar marcos de mensageria e escrever conteúdos profundos e amostras de código para o blog e o website de 4D. Depois de formar-se como engenheira em Ciências da Computação na universidade de VINCI, Intissar trabalhou em várias startups como engenheira de software. Sua experiência prática inclui a especificação, o design e o desenvolvimento de software, a formação e o apoio aos usuários e a gestão de times.