Trovate il valore di un attributo specifico in una sola riga di codice!

Tradotto automaticamente da Deepl

Ricordate i tempi in cui dovevate usare cicli annidati e dichiarazioni condizionali per recuperare gli attributi di un oggetto? Così si finiva per ottenere un pezzo di codice lungo e complicato? Bene, quei giorni sono finiti! Grazie alla notazione degli oggetti, combinata con le collezioni e i loro metodi, potrete scrivere codice più velocemente e in modo più leggibile!

Trovare il valore di un attributo specifico non è mai stato così facile. Diamo un’occhiata a uno scenario reale e scopriamo come!

Scenario reale

Immaginiamo di voler filtrare i processi in esecuzione in base al loro tipo.

Come forse già sapete, il comando Get process activity consente di recuperare un elenco di processi in esecuzione e di utenti connessi. Come mostrato di seguito, una parte delle informazioni restituite è il tipo di processo:

{ 
   { 
   "processi":[  
      { 
         "name": "Main",
         "sessionID":"",
         "numero":0,
         "ID":0,
         "visible":false,
         "systemID":"140736073646912",
         "type":-39, //Processo 4D principale
         "state":0,
         "cpuUsage":0.033,
         "cpuTime":922.62008,
         "preemptive":true
      },
     { 
         "name": "Application process",
         "sessionID":"",
         "number":1,
         "ID":13,
         "visibile":true,
         "systemID":"123145536053248",
         "tipo":-1, //processo principale
         "state":2,
         "cpuUsage":0.002,
         "cpuTime":187.902836,
         "preemptive":false
      },
     {}
   ]
}


Proviamo a trovare il processo principale. Se lo facessimo alla vecchia maniera, useremmo un ciclo For con un’istruzione condizionale, il che ci lascerebbe con un pezzo di codice piuttosto lungo:

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

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

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

End for

Il vecchio metodo funziona a meraviglia, ma dobbiamo ammettere che è un po’ lungo da scrivere solo per trovare un singolo elemento. Buone notizie! Grazie al metodo query è possibile estrarre facilmente il valore desiderato… in una sola riga di codice!

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

E il gioco è fatto! Il codice è pulito, facile da capire e più leggibile. Viva la semplicità!

Abbiamo appena scalfito la superficie di ciò che si può fare. Naturalmente, il metodo query supporta operazioni più complesse! Oltre a interrogare un insieme, è possibile ordinarlo, ridurlo, espanderlo o filtrarlo. Sono disponibili più di 40 metodi per un uso ottimale delle collezioni!

Avatar
- Product Marketing Manager - Intissar è entrata in 4D nel 2017 come Product Marketing Manager. Lavora a stretto contatto con i team di prodotto, marketing, ingegneria e supporto tecnico per evidenziare il "perché", il "come" e il "cosa" delle nuove funzionalità e di quelle aggiornate a diversi pubblici. Questa vicinanza le consente di creare strutture di messaggistica e di scrivere contenuti approfonditi ed esempi di codice per il blog e il sito web di 4D. Dopo aver conseguito la laurea in Informatica presso l'università VINCI, Intissar ha lavorato in diverse startup come ingegnere informatico. La sua esperienza pratica comprende le specifiche, la progettazione e lo sviluppo del software, la formazione e il supporto agli utenti e la gestione del team.