Objectos Canto: partilha fácil & outras boas notícias

Tradução automática de Deepl

Quantas vezes obteve o erro“Tipo de valor não suportado num objecto partilhado” ao tentar colocar um objecto num objecto partilhado?

O que é que fez? Escreveu um código mais longo para transformar o seu objecto inocente num objecto partilhado, talvez iterando sobre todas as suas propriedades?

Que tal transferir um objecto partilhado de um grupo partilhado para outro?

Uma coisa interessante sobre objectos: já sabe que podem ser usados como um mapa hash (um sistema chave/valor), mas e que tal obter todas as chaves ou todos os valores com uma única linha de código?

Continue a ler, porque 4D v18 R3 está fora e traz boas notícias!

COPY objectos e colecções partilhados

copiar um objecto como partilhado

O OB Copy() foi melhorado para aceitar uma nova opção que pode ter o valor: ck partilhado

No exemplo abaixo, o objecto $person é copiado como um objecto partilhado para o objecto $copy.

Em seguida, podemos colocar o objecto $copy no objecto partilhado $personsList .

C_OBJECT$copy ($person;$copy;$personsList)
C_TEXT ($text)

$text :=Document to text(Get 4D folder(Current resources folder)+"person.txt")
//$person is a standard object
$person :=JSON Parse($text)

$personsList :=New shared object()

//$copy is a shared object
$copy :=OB Copy($person;ck shared)

Use ($personsList)
//We can put $copy in $personsList because $copy is a shared object
$personsList .person:= xml-ph-003

End use

atribuir um objecto partilhado de um grupo partilhado a outro

O OB Copy() também foi melhorado para aceitar um novo parâmetro: groupWith (que deve ser um objecto partilhado ou uma colecção partilhada).

Passar o grupoCom parâmetro permite colocar o objecto copiado no mesmo grupo partilhado que o grupoWith.

No exemplo abaixo, $sharedObj e $sharedColl pertencem a dois grupos partilhados separados.

Não podemos colocar $sharedObj em $sharedColl sem receber um erro, mas podemos facilmente copiar $sharedObj para um novo objecto pertencente ao mesmo grupo partilhado que $sharedColl.

C_OBJECT($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("último nome"; "Smith"; "endereço";New shared object("cidade"; "Nova Iorque"))

//$sharedColl belongs to another shared group
Use
$sharedColl :=New shared collection(New shared object("último nome"; "Brown"))

//$objCopy is in the same shared group as $sharedColl

$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)

//So we can put $objCopy into $sharedColl without error

($sharedColl)
$sharedColl .push($objCopy)
End use

e que dizer das colecções partilhadas?

Os exemplos acima estão relacionados com o comando OB Copy() comando.

A colecção.copy() método de membros foi melhorado exactamente da mesma forma.

manusear um objecto como um mapa hash

Há novos comandos para facilitar a manipulação de um objecto como um mapa hash. Se tiver objectos cujos nomes de propriedade contenham dados dinâmicos, estes comandos são para si!

Vamos explicar isto com um único exemplo.

Considere este $persons objecto contendo nomes próprios como nome de propriedade e idade como valor de propriedade:

C_OBJECT($persons)
$persons :=New object
$persons ["John"]:=42 // John is 42
$persons ["Andy"]:=24 // Andy is 24
$persons ["Mary"]:=30 // Mary is 30
$persons ["Paul"]:=50 // Paul is 50
$persons ["Fred"]:=51// Fred is 51

Comando das chaves OB

Este comando devolve os nomes de propriedade de um objecto como uma colecção:

ALERT("There are "+String(OB Keys($persons).length)+" pessoas")

Comando Valores OB

Este comando devolve os valores de propriedade de um objecto como uma colecção:

ALERT("A média de idade é "+String(OB Values($persons).average()))

Comando OB Entradas

Este comando devolve uma colecção de objectos com propriedades chave (nome da propriedade) e valor (valor da propriedade):

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("valor>:1";45)
ALERT ("Há "+String($agesOK.length)+" pessoas com mais de 45 anos")
ALERT ("Os seus nomes são: "+$agesOK.extract("chave").join("-"))

Usando um objecto como mostrado acima, fornece acesso rápido e directo a dados como quando se usa um índice.

É mais rápido do que utilizar uma colecção de objectos com propriedades de primeiro nome e idade.

Note-se também que esses comandos devolvem uma colecção. Isto permite-nos utilizar todos os métodos de membros disponíveis nas colecções (como average(), query(), …).

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.