Bucles, bucles y… ¡más bucles!

Traducido automáticamente de Deepl

Como muchos otros lenguajes de programación, 4D ofrece la posibilidad de iterar sobre números con una For(…) / End for o sobre una condición gracias a las sentencias While(…)/End while y Repeat/Until(…) . Estas iteraciones (o bucles) son muy útiles, pero no son la forma más adecuada de iterar sobre tipos de datos avanzados como colecciones y selecciones de entidades. Por eso se ha creado el nuevo For each(…)/End for each para facilitar la codificación.

Ejemplo de base de datos

Bucle a través de los elementos de la colección

La sentencia For each / End for each puede utilizarse en varios casos. Un caso es el de recorrer en bucle los elementos de una colección. No es necesario saber de antemano cuántos elementos pertenecen a la colección antes de entrar en el bucle. En cada iteración, la variable pasada como primer parámetro(item) se llenará con el elemento actual de la colección(col).

col:=New collection("charlie"; "delta"; "uniforme"; "foxtrot"; "quebec")
$count :=0
For each (item;col)
If (Length(item)>5)
$count :=$count+1
End if
End for each
ALERT (
String($count)+" ¡palabras encontradas!")

Bucle a través de las entidades

El segundo caso es también el más novedoso: el bucle a través de las entidades de una selección de entidades. Las entidades y las selecciones de entidades son parte de un nuevo concepto en 4D, descrito en esta entrada del blog. Lo principal que necesita saber es que las entidades son similares a los registros, y las selecciones de entidades pueden ser comparadas con las selecciones tradicionales , ¡pero ambas son declaradas como objetos!

De nuevo, no es necesario conocer previamente cuántas entidades pertenecen a la selección de entidades antes de entrar en el bucle. En cada iteración, la variable de entidad pasada como primer parámetro se llenará automáticamente con la entidad actual de la selección de entidades.

UK_emps:=ds.Empleados.query("country='UK'")
// Browse the entity selection
For each (emp;UK_emps)
emp. salary :=emp.salary*1.03 // raise the salary
emp .save()
// save the result
End for each

Bucle a través de las propiedades de los objetos

La sentencia For each / End for each también se puede utilizar en otro caso: el bucle a través de las propiedades de los objetos. Por ejemplo, puede ser muy útil en caso de querer escribir algún código genérico, sin conocer los nombres de las propiedades del objeto de antemano.

De nuevo, no es necesario saber de antemano cuántas propiedades tiene un objeto antes de entrar en el bucle. Todos los nombres de sus propiedades serán analizados uno por uno. En cada iteración, la variable pasada como primer parámetro(property en el ejemplo de abajo) se llenará con el nombre del atributo del objeto($contact en el ejemplo de abajo).

For each ($property;$contact)
If (Value type($contact[$property])=Is text)
//Change to uppercase each attribute which is a text
$contact[$property]:=Uppercase($contact[$property])
End if
End for each

Roland Lannuzel
- Propietario de Producto y Experto en 4D - Después de estudiar electrónica, Roland se dedicó a la informática industrial como desarrollador y consultor, construyendo soluciones para clientes con una variedad de bases de datos y tecnologías. A finales de los años 80 se enamoró de 4D y lo ha utilizado para escribir aplicaciones de negocio que incluyen sistemas de contabilidad, facturación y correo electrónico.Eventualmente se unió a la compañía en 1997, las valiosas contribuciones de Roland incluyen el diseño de especificaciones, herramientas de prueba, demos, así como la formación y hablar con la comunidad 4D en muchas conferencias. Continúa dando forma activamente al futuro de 4D definiendo nuevas características y herramientas de desarrollo de bases de datos.