Rincón de los objetos: compartir fácilmente y otras buenas noticias

Traducido automáticamente de Deepl

¿Cuántas veces has obtenido el error«Tipo de valor no soportado en un objeto compartido» al intentar poner un objeto en un objeto compartido?

¿Qué has hecho? ¿Escribir un código más largo para convertir tu inocente objeto en uno compartido, quizás iterando sobre todas sus propiedades?

¿Qué tal transferir un objeto compartido de un grupo compartido a otro?

Una cosa interesante sobre los objetos: ya sabes que pueden ser utilizados como un mapa hash (un sistema de clave/valor), pero ¿qué hay de obtener todas las claves o todos los valores con una sola línea de código?

Siga leyendo, porque 4D v18 R3 ha salido y trae buenas noticias.

COPIAR objetos y colecciones compartidas

copiar un objeto como compartido

El comando OB Copy() ha sido mejorado para aceptar una nueva opción que puede tener el valor: ck shared

En el ejemplo siguiente, el objeto $person se copia como objeto compartido en el objeto $copy.

Entonces, podemos poner el objeto $copy en el objeto compartido $personsList .

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

$text :=Document to text(Get 4D folder(Current resources folder)+"persona.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

asignar un objeto compartido de un grupo compartido a otro

El comando OB Copy() también se ha mejorado para aceptar un nuevo parámetro: groupWith (que debe ser un objeto compartido o una colección compartida).

Pasar el parámetro groupWith permite poner el objeto copiado en el mismo grupo compartido que groupWith.

En el ejemplo siguiente, $sharedObj y $sharedColl pertenecen a dos grupos compartidos distintos.

No podemos poner $sharedObj en $sharedColl sin obtener un error, pero podemos copiar fácilmente $sharedObj en un nuevo objeto que pertenezca al mismo grupo compartido que $sharedColl.

C_OBJECT
//$objCopy is in the same shared group as $sharedColl
($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("apellido"; "Smith"; "dirección";New shared object("ciudad"; "Nueva York"))

//$sharedColl belongs to another shared group

$sharedColl :=New shared collection(New shared object("apellido"; "Marrón"))

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

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

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

¿y qué pasa con las colecciones compartidas?

Los ejemplos anteriores están relacionados con el comando OB Copy() de la serie.

El método del miembrocollection.copy() ha sido mejorado exactamente de la misma manera.

manejar un objeto como un mapa hash

Hay nuevos comandos para facilitar el manejo de un objeto como un mapa hash. Si tienes objetos cuyos nombres de propiedades contienen datos dinámicos, estos comandos son para ti.

Vamos a explicarlo con un ejemplo.

Considere este objeto $persons que contiene nombres de pila como nombre de propiedad y edad como valor de propiedad:

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 OB Keys

Este comando devuelve los nombres de las propiedades de un objeto como una colección:

ALERT("Hay "+String(OB Keys($persons).length)+" personas")

Comando OB Valores

Este comando devuelve los valores de las propiedades de un objeto como una colección:

ALERT("La media de edad es "+String(OB Values($persons ).average()))

Comando OB Entradas

Este comando devuelve una colección de objetos con propiedades clave (nombre de la propiedad) y valor (valor de la propiedad):

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("valor>:1";45)
ALERT ("Hay "+String($agesOK.length)+" personas que tienen más de 45 años")
ALERT ("Sus nombres son: "+$agesOK.extract("clave").join("-"))

El uso de un objeto como el mostrado arriba, proporciona un acceso rápido y directo a los datos como cuando se utiliza un índice.

Es más rápido que utilizar una colección de objetos con las propiedades nombre y edad.

También hay que tener en cuenta que esos comandos devuelven una colección. Esto nos permite utilizar todos los métodos miembros disponibles en las colecciones (como average(), query(), …).

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.