diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md index efc843f388794b..fca6069716f85e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -1249,10 +1249,16 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) La instrucción **orden by** es soportada en la cadena de consulta para que las entidades en la selección de entidad resultante estén ordenadas por similitud. Por ejemplo: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - //orden por defecto, la primera entidad es la más parecida +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + Si el mismo vector aparece varias veces en la cadena de consulta, el orden por se aplicará a los resultados del primero, por ejemplo: ```4d diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md index 748cce9f31d72e..e742d59675f8a9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md @@ -110,6 +110,43 @@ Puede crear dos tipos de colecciones: Para más información, consulte la sección [Objetos y colecciones compartidos](shared.md). +## Assignment + +Collection and [object](./dt_object.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning a collection to a variable (e.g. `$myVar:=[1;2;3]`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original collection is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +Por ejemplo: + +```4d +var $col1; $col2 : Collection +var $o : Object + +$col1:=[1;2;3] //a reference to the collection is created +$col2:=$col1 //both variables share the same collection reference +$o:={ list:$col1 } //the object stores a reference to the same collection + +$col1.push(4) +//$col2 = [1,2,3,4] +//$o = {"list":[1,2,3,4]} + +$col2[0]:=10 +//$col1 = [10,2,3,4] +//$o = {"list":[10,2,3,4]} + +$o.list.push(5) +//$col1 = [10,2,3,4,5] +//$col2 = [10,2,3,4,5] + +ASSERT($col1=$col2) //True +``` + +This principle applies wherever objects or collections are assigned, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of a collection, use the [`collection.copy()`](../API/CollectionClass.md#copy) function. + +::: + ## Funciones de colección Las referencias a colecciones 4D se benefician de funciones de clase específicas (a veces llamados *funciones miembro*). Las funciones de colección están listadas en la sección [Referencia de la API de Clase](../API/CollectionClass.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_object.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_object.md index 13977768fec5fe..b916acf4fa4096 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_object.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_object.md @@ -28,7 +28,7 @@ Tenga en cuenta que los nombres de las propiedades distinguen entre mayúsculas ::: -Las variables, campos o expresiones de tipo Objeto se gestionan utilizando la [notación de objetos](#properties) estándar o los comandos disponibles en el tema **Objetos (Lenguaje)**. Tenga en cuenta que comandos específicos del tema **Búsquedas**, como `QUERY BY ATTRIBUTE`, `QUERY SELECTION BY ATTRIBUTE` o `ORDER BY ATTRIBUTE`, se pueden utilizar para llevar a cabo el procesamiento en los campos objeto. +Las variables, campos o expresiones de tipo Objeto se gestionan utilizando la [notación de objetos](#properties) estándar o los comandos disponibles en el tema **Objetos (Lenguaje)**. Cada valor de propiedad al que se accede a través de la notación de objeto se considera una expresión. Puede utilizar estos valores siempre que se esperen expresiones 4D: @@ -114,6 +114,36 @@ Puede crear dos tipos de objetos: - objetos compartidos, utilizando el comando [`New shared object`](../commands/new-shared-object). Estos objetos pueden ser compartidos entre procesos, incluidos los hilos apropiativos. Estos objetos pueden ser compartidos entre procesos, incluidos los hilos apropiativos. Para más información, consulte la sección [Objetos y colecciones compartidos](shared.md). +## Assignment + +Object and [collection](./dt_collection.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning an object or a collection to a variable (e.g. `$myVar:={ a:2 }`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original object is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +Por ejemplo: + +```4d +var $o1; $o2 : Object +var $col : Collection + +$col:=[1;2;3] //a reference to the collection is created +$o1:={ a:2 ; b:$col } //a reference to the object is created +$o2:=$o1 //both variables $o1 and $o2 share the reference to the same object + +$o1.a:=10 //$o2 = {"a":10,"b":[1,2,3]} +$o2.a:=20 //$o1 = {"a":20,"b":[1,2,3]} +$col.push(4) +//$o1 = {"a":20,"b":[1,2,3,4]} +//$o2 = {"a":20,"b":[1,2,3,4]} +ASSERT($o1=$o2) //True +``` + +This principle applies wherever objects or collections are used, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of an object, use the [`OB COPY`](../commands/ob-copy) command. + +::: + ## Propiedades {#properties} Se accede a los valores de las propiedades de los objetos a través de una cadena de tokens. Se puede acceder a las propiedades de los objetos de dos maneras: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/flow-control.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/flow-control.md index 72a6d73d86fd60..f34b0ba41a2a26 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/flow-control.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/flow-control.md @@ -58,6 +58,14 @@ La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + El resultado es similar y *MethodB* se evalúa sólo si es necesario. > **Nota:** el [operador ternario](operators.md#ternary-operator) permite escribir expresiones condicionales de una sola línea y puede reemplazar una secuencia completa de declaraciones If..Else. @@ -809,3 +817,24 @@ logConsole($message) ``` +## defer (expression) + +
Historia + +| Lanzamiento | Modificaciones | +| ----------- | -------------- | +| 21 R4 | Añadidos | + +
+ +The [`defer`](../commands/defer) command allows you to stack one or more expression(s) that will automatically execute when the current method or function **finishes running**. + +Whether you are managing document closings, resetting interprocess flags, or freeing up resources, ensuring that your housekeeping tasks execute flawlessly no matter how or where your function terminates can be handled by `defer` keywords. + +```4d + //make sure some code is executed at exit +defer(myCleaningMethod) + //Do something... +``` + +See the [`defer`](../commands/defer) command description for more information. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/methods.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/methods.md index 8ea2c1cc0c5e94..fd05222f0ef6d8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/methods.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/methods.md @@ -13,13 +13,13 @@ El tamaño máximo de un método está limitado a 2 GB de texto o 32.000 líneas En el lenguaje 4D, hay varias categorías de métodos. La categoría depende de cómo se les pueda llamar: -| Tipo | Contexto de llamada | Acepta los parámetros | Descripción | -| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Métodos proyecto** | On demand, when the project method name [is called](../Project/project-method-properties.md) | Sí | Puede contener código para ejecutar acciones personalizadas. Una vez creado un método proyecto, pasa a formar parte del lenguaje del proyecto. | -| **Método objeto (widget)** | Automático, cuando un evento involucra al objeto al que se asocia el método | No | Propiedad de un objeto formulario (también llamado widget) | -| **Método formulario** | Automático, cuando un evento involucra al formulario al que se asocia el método | No | Propiedad de un formulario. Puede utilizar un método formulario para gestionar datos y objetos, pero generalmente es más sencillo y eficiente utilizar un método objeto para estos fines. | -| **Trigger** (o *método tabla*) | Automático, cada vez que se manipulan los registros de una tabla (Añadir, Eliminar y Modificar) | No | Propiedad de una tabla. Los triggers son métodos que pueden evitar operaciones "ilegales" con los registros de su base. | -| **Método base** | Automático, cuando se produce un evento de la sesión de trabajo | Sí (predefinido) | Hay 16 métodos base en 4D. | -| **Class** | Automatically called when an object of the class is instantiated or when a function of the class is executed on an object instance in any other methods or in a [database field](../Develop/field-properties.md#class). | sí (funciones de clase) | A **Class** is used to declare and configure the class [constructor](./classes.md#class-constructor), [properties](./classes.md#property), and [functions](./classes.md#function) of objects. Ver [**Clases**](classes.md) | +| Tipo | Contexto de llamada | Acepta los parámetros | Descripción | +| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Métodos proyecto** | On demand, when the project method name [is called](../Project/project-method-properties.md) | Sí | Puede contener código para ejecutar acciones personalizadas. Una vez creado un método proyecto, pasa a formar parte del lenguaje del proyecto. | +| **Método objeto (widget)** | Automático, cuando un evento involucra al objeto al que se asocia el método | No | Propiedad de un objeto formulario (también llamado widget) | +| **Método formulario** | Automático, cuando un evento involucra al formulario al que se asocia el método | No | Propiedad de un formulario. Puede utilizar un método formulario para gestionar datos y objetos, pero generalmente es más sencillo y eficiente utilizar un método objeto para estos fines. | +| **Trigger** (o *método tabla*) | Automático, cada vez que se manipulan los registros de una tabla (Añadir, Eliminar y Modificar) | No | Propiedad de una tabla. Los triggers son métodos que pueden evitar operaciones "ilegales" con los registros de su base. | +| **Método base** | Automático, cuando se produce un evento de la sesión de trabajo | Sí (predefinido) | Hay 16 métodos base en 4D. | +| **Class** | Automatically called when an object of the class is instantiated or when a function of the class is executed on an object instance in any other methods or in a [database field](../Develop/field-properties.md#class). | sí (funciones de clase) | A **Class** is used to declare and configure the class [constructor](./classes.md#class-constructor), [properties](./classes.md#property), and [functions](./classes.md#function) of objects. See [**Classes**](classes.md) and [**Function** class](../API/FunctionClass.md). | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/operators.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/operators.md index 9f489b93c64ef7..cf73a4f1ef4934 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/operators.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/operators.md @@ -21,10 +21,12 @@ Los valores que los operadores afectan son los operandos. En la expresión `1 + El **operador de asignación** (`a:=b`) inicializa o actualiza el valor de `a` con el valor de `b`: ```4d -$myNumber:=3 //asigna 3 a la variable MyNumber -$myDate:=!2018/01/21! //asigna un literal de fecha -$myLength:=Length("Acme") //asigna el resultado del comando (4) a $myLength -$col:=New collection //$col se inicializa con una colección vacía +$myNumber:=3 //assigns 3 to $myNumber variable +$myDate:=!2026/01/21! //assigns a date literal +$myLength:=Length("Acme") //assigns the result of the command (4) to $myLength +$col:=New collection //$col is initialized with an empty collection +$myObject:={ a:2 ; b:$col } //assigns an object reference to $myObject +$myObject.a:=3 //assigns a value to an object property ``` > NO confunda el operador de asignación `:=` con el operador de comparación de igualdad `=`. Se ha elegido deliberadamente un operador de asignación diferente (y no `=`) para evitar los problemas y la confusión que suelen producirse con == o === en otros lenguajes de programación. Estos errores son a menudo difíciles de reconocer por el compilador y conducen a una solución de problemas que requiere mucho tiempo. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/ordering.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/ordering.md index 99b5b20c59e265..3442d08dff0998 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/ordering.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/ordering.md @@ -26,15 +26,15 @@ Cuando se ordena una colección o selección de entidades que contiene elementos Los tipos se ordenan según la secuencia siguiente, con sus respectivas relaciones de comparación en orden ascendente: -| Rank | Tipo | También incluye | Regla de comparación | -| ---- | -------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | **null** | punteros (punteros null sólo para colecciones) | no se aplican criterios de comparación | -| 2 | **boolean** | | orden lógico: false *antes que* true | -| 3 | **string** | | orden lexicográfico (por ejemplo, "a" *antes* "ab" *antes* "b") | -| 4 | **number** | hora (convertido a milisegundos o segundos según la configuración de la base `Time inside objects`) | orden algebraico estándar (comparación numérica) | -| 5 | **object** | blobs, imágenes, punteros no nulos (colecciones) | orden interno (coherente para las funciones de collection, ver más abajo) | -| 6 | **collection** | | orden interno (coherente para las funciones de collection, ver más abajo) | -| 7 | **date** | | orden cronológico (fechas más antiguas *antes* de las más recientes, por ejemplo, ¡1990-01-01! *antes* ¡2000-01-01!) | +| Posición | Tipo | También incluye | Regla de comparación | +| -------- | -------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | **null** | punteros (punteros null sólo para colecciones) | no se aplican criterios de comparación | +| 2 | **boolean** | | orden lógico: false *antes que* true | +| 3 | **string** | | orden lexicográfico (por ejemplo, "a" *antes* "ab" *antes* "b") | +| 4 | **number** | hora (convertido a milisegundos o segundos según la configuración de la base `Time inside objects`) | orden algebraico estándar (comparación numérica) | +| 5 | **object** | blobs, imágenes, punteros no nulos (colecciones) | orden interno (coherente para las funciones de collection, ver más abajo) | +| 6 | **collection** | | orden interno (coherente para las funciones de collection, ver más abajo) | +| 7 | **date** | | orden cronológico (fechas más antiguas *antes* de las más recientes, por ejemplo, ¡1990-01-01! *antes* ¡2000-01-01!) | ### Valores numéricos especiales diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index eb5fa9f5617784..bac581f36ff95e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -3,6 +3,14 @@ id: updates title: Notas del lanzamiento --- +## 4D 21 R4 + +Lea [**Novedades en 4D 21 R4**](https://blog.4d.com/whats-new-in-4d-21-r4/), la entrada del blog que muestra todas las nuevas funcionalidades y mejoras en 4D 21 R4. + +#### Lo más destacado + +- New [`defer`](../commands/defer) command to declare some code to be always executed at method or function exit. + ## 4D 21 R3 Lea [**Novedades en 4D 21 R3**](https://blog.4d.com/es/whats-new-in-4d-21-r3/), la entrada del blog que muestra todas las nuevas funcionalidades y mejoras en 4D 21 R3. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Styled_Text.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Styled_Text.md index 03e2179a0a671d..090c7d6f4b7ece 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Styled_Text.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Styled_Text.md @@ -23,11 +23,11 @@ slug: /commands/theme/Styled-Text | [](../../commands/st-set-plain-text)
| | [](../../commands/st-set-text)
| -## Working with text handling commands +## Trabajando con comandos de manejo de texto ### Interfaz de usuario -The commands that can be used to manipulate text objects by programming do not take any style tags integrated into the text into account. They act upon displayed text only. This concerns the following commands: +Los comandos que pueden utilizarse para manipular objetos de texto por programación no tienen en cuenta ninguna etiqueta de estilo integrada en el texto. Sólo actúan sobre el texto visualizado. Esto afecta a los siguientes comandos: - [User Interface](./User_Interface.md) theme commands - [`HIGHLIGHT TEXT`](../../commands/highlight-text) @@ -55,7 +55,7 @@ Note also that only default properties are affected by these commands (as well a ![](../../assets/en/FormObjects/multistyle-ex1.png) -The plain text of the area is as follows: +El texto sin formato del área es el siguiente: ```html This is the word red diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/System_Documents.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/System_Documents.md index cfae8bdf1a06c9..c14e05e4eb2a6d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/System_Documents.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/System_Documents.md @@ -86,12 +86,12 @@ In all other cases, the pathname is relative. Examples with the [`CREATE FOLDER`](../../commands/create-folder) command: ```4d - CREATE FOLDER("lundi") // relative path - CREATE FOLDER("\Monday") // relative path - CREATE FOLDER("\Monday\Tuesday") // relative path - CREATE FOLDER("c:") // absolute path - CREATE FOLDER("d:\Monday") // absolute path - CREATE FOLDER("\\srv-Internal\temp") // absolute path + CREATE FOLDER("lundi") // ruta relativa + CREATE FOLDER("\Monday") // ruta relativa + CREATE FOLDER("\Monday\Tuesday") // ruta relativa + CREATE FOLDER("c:") // ruta absoluta + CREATE FOLDER("d:\Monday") // ruta absoluta + CREATE FOLDER("\\srv-Internal\temp") // ruta absoluta ``` :::note @@ -112,14 +112,14 @@ However, if you write `C:\MyDocuments\New`, 4D will display `C:\\MyDocuments\New En los demás casos, es absoluta. -Examples with the [`CREATE FOLDER`](../../commands/create-folder) command: +Ejemplos con el comando [`CREATE FOLDER`](../../commands/create-folder): ```4d - CREATE FOLDER("Monday") // relative path - CREATE FOLDER("macintosh hd:") // absolute path - CREATE FOLDER("Monday:Tuesday") // absolute path (a volume must be called Monday) - CREATE FOLDER(":Monday:Tuesday") // relative path + CREATE FOLDER("Monday") // ruta relativa + CREATE FOLDER("macintosh hd:") // ruta absoluta + CREATE FOLDER("Monday:Tuesday") // ruta absoluta (un volumen debe llamarse Monday) + CREATE FOLDER(":Monday:Tuesday") // ruta relativa ``` :::note @@ -132,6 +132,6 @@ See also [**Absolute and relative pathnames** in the Concepts section](../../Con You can handle pathname contents using the [`Path to object`](../../commands/path-to-object) and [`Object to path`](../../commands/object-to-path) commands. En particular, usando estos comandos, se puede extraer de una ruta: -- a file name, -- the parent folder path, -- the file or folder extension. \ No newline at end of file +- un nombre de archivo, +- la ruta de la carpeta padre, +- la extensión del archivo o carpeta. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Client.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Client.md index 0489d9e5b0c38d..b480fde8527e88 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Client.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Client.md @@ -14,8 +14,8 @@ slug: /commands/theme/Web-Services-Client | [](../../commands/web-service-set-option)
| | [](../../commands/web-service-set-parameter)
| -A Web Service is a set of functions published on a network. These functions can be called and used by any application compatible with Web Services and connected to the network. Web Services can carry out all types of tasks, such as supervising the routing of packages at a transporter’s, e-commerce, monitoring market values, etc. +Un Servicio Web es un conjunto de funciones publicadas en una red. Estas funciones pueden ser llamadas y utilizadas por cualquier aplicación compatible con los Servicios Web y conectada a la red. Los servicios web pueden realizar todo tipo de tareas, como supervisar el enrutamiento de paquetes en un transportista, el comercio electrónico, controlar los valores del mercado, etc. -Subscription to Web Services with 4D is easy to carry out using the [Web Services Wizard](https://doc.4d.com/4Dv21/4D/21/Subscribing-to-a-Web-Service-in-4D.300-7676804.en.html). In most cases, this Wizard will be sufficient for you to be able to use Web Services. However, if you want to customize certain mechanisms, you must use the client SOAP commands of 4D. +La suscripción a Servicios Web con 4D es fácil de llevar a cabo utilizando el [Asistente de Servicios Web](https://doc.4d.com/4Dv21/4D/21/Subscribing-to-a-Web-Service-in-4D.300-7676804.en.html). En la mayoría de los casos, este Asistente será suficiente para que pueda utilizar los Servicios Web. Sin embargo, si desea personalizar ciertos mecanismos, debe utilizar los comandos SOAP cliente de 4D. -Note: By convention, the terms “SOAP” and “Web Service” have been used to differentiate between command (and constant) names on the server and client side, respectively. These two concepts refer to the same technology. \ No newline at end of file +Nota: por convención, se han utilizado los términos "SOAP" y "Servicio Web" para diferenciar entre nombres de comandos (y constantes) en el lado del servidor y del cliente, respectivamente. Estos dos conceptos se refieren a la misma tecnología. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Server.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Server.md index ce0f9560ea8ca7..5399206f29ba6c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Server.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Services_Server.md @@ -13,6 +13,6 @@ slug: /commands/theme/Web-Services-Server | [](../../commands/soap-request)
| | [](../../commands/soap-send-fault)
| -Publication of Web Services with 4D is carried out easily using [options in the method properties](../../Project/project-method-properties.md#web-services). In most cases, this operation will be sufficient to enable you to publish Web Services. However, if you want to customize certain mechanisms, use data arrays, etc., you must use the server SOAP commands of 4D. +La publicación de Servicios Web con 4D se realiza fácilmente utilizando [opciones en las propiedades del método](../../Project/project-method-properties.md#web-services). En la mayoría de los casos, esta operación será suficiente para permitirle publicar Servicios Web. Sin embargo, si desea personalizar ciertos mecanismos, utilizar arrays de datos, etc., deberá utilizar los comandos SOAP del servidor de 4D. -Note: By convention, the terms “SOAP” and “Web Service” have been used to differentiate between command (and constant) names on the server and client side, respectively. These two concepts refer to the same technology. \ No newline at end of file +Nota: por convención, se han utilizado los términos "SOAP" y "Servicio Web" para diferenciar entre nombres de comandos (y constantes) en el lado del servidor y del cliente, respectivamente. Estos dos conceptos se refieren a la misma tecnología. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML.md index 8bb4bf595adb8d..c3b5e304b5e740 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML.md @@ -16,7 +16,7 @@ slug: /commands/theme/XML :::note -For XML support, 4D uses the [Xerces.dll library](../../Notes/updates.md#library-table) developed by the Apache Foundation company. +Para soporte XML, 4D utiliza la [librería Xerces.dll](../../Notes/updates.md#library-table) desarrollada por la empresa Fundación Apache. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_DOM.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_DOM.md index 401c968f8f1366..9844cbe5bd0598 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_DOM.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_DOM.md @@ -45,21 +45,21 @@ slug: /commands/theme/XML-DOM ## Visión general de los comandos XML DOM -See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML DOM. +Consulte la sección [XML, DOM y SAX](../theme/XML.md#xml-dom-and-sax) para obtener una definición de XML DOM. ### Creación, apertura y cierre de documentos XML mediante DOM -Objects created, modified or parsed by the 4D DOM commands can be text, URLs, documents or BLOBs. The DOM commands used for opening XML objects in 4D are [`DOM Parse XML source`](../../commands/dom-parse-xml-source) and [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable). +Los objetos creados, modificados o analizados por los comandos DOM de 4D pueden ser texto, URLs, documentos o BLOBs. Los comandos DOM utilizados para abrir objetos XML en 4D son [`DOM Parse XML source`](../../commands/dom-parse-xml-source) y [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable). Muchos comandos permiten leer, analizar y escribir los elementos y atributos. Los errores se recuperan utilizando el comando [`XML GET ERROR`](../../commands/xml-get-error). No olvide llamar al comando [`DOM CLOSE XML`](../../commands/dom-close-xml) para cerrar la fuente al final. -Note about use of XML BLOB parameters: For historical reasons, XML commands such as [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable) accept BLOB type parameters. However, it is highly recommended to store XML structures as Text. The use of BLOBs is reserved for processing binary data. In conformity with XML specifications, binary data are automatically encoded in Base64, even when the BLOB contains text. +Nota sobre el uso de parámetros BLOB XML: por razones históricas, los comandos XML como [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable) aceptan parámetros de tipo BLOB. Sin embargo, se recomienda encarecidamente almacenar las estructuras XML como texto. El uso de BLOBs está reservado al tratamiento de datos binarios. Conforme con las especificaciones XML, los datos binarios se codifican automáticamente en Base64, incluso cuando el BLOB contiene texto. ### Soporte de la notación XPath -Several XML DOM commands ([`DOM Create XML element`](../../commands/dom-create-xml-element), [`DOM Find XML element`](../../commands/dom-find-xml-element), [`DOM Create XML element arrays`](../../commands/dom-create-xml-element-arrays) and [`DOM SET XML ELEMENT VALUE`](../../commands/dom-set-xml-element-value)) support some XPath expressions for accessing XML elements. +Varios comandos XML DOM ([`DOM Create XML element`](../../commands/dom-create-xml-element), [`DOM Find XML element`](../../commands/dom-find-xml-element), [`DOM Create XML element arrays`](../../commands/dom-create-xml-element-arrays) y [`DOM SET XML ELEMENT VALUE`](../../commands/dom-set-xml-element-value)) soportan algunas expresiones XPath para acceder a elementos XML. -La notación XPath procede del lenguaje XPath, diseñado para navegar dentro de estructuras XML. It allows the setting of elements directly within an XML structure via a "pathname" type syntax, without necessarily having to indicate the complete pathname in order to reach it. +La notación XPath procede del lenguaje XPath, diseñado para navegar dentro de estructuras XML. Permite fijar elementos directamente dentro de una estructura XML mediante una sintaxis de tipo "pathname", sin tener que indicar necesariamente la ruta completa para llegar a ella. Por ejemplo, dada la siguiente estructura: @@ -73,7 +73,7 @@ Por ejemplo, dada la siguiente estructura: ``` -XPath notation allows you to access element 3 using the */RootElement/Elem1/Elem2/Elem3* syntax. +La notación XPath permite acceder al elemento 3 utilizando la sintaxis */RootElement/Elem1/Elem2/Elem3*. 4D también acepta elementos XPath indexados utilizando la sintaxis *Element[ElementNum]*. Por ejemplo, dada la siguiente estructura: @@ -93,13 +93,13 @@ Para una lista completa de expresiones XPath soportadas, consulte la descripció :::note Compatibilidad -Starting with 4D 18 R3, the XPath implementation has been modified to be more compliant and to support a wider set of expressions. If you want to benefit from the extended features in your converted databases, you need to select the **Use standard XPath** option of the [Compatibility page](../../settings/compatibility.md). +A partir de 4D 18 R3, la implementación de XPath ha sido modificada para ser más compatible y soportar un conjunto más amplio de expresiones. Si desea beneficiarse de las funciones extendidas en sus bases de datos convertidas, deberá seleccionar la opción **Utilizar XPath estándar** de la [Página de compatibilidad](../../settings/compatibility.md). ::: ### Gestión de errores -Muchas funciones de este tema devuelven una referencia a un elemento XML. If an error occurs during function execution (for example, if the root element reference is not valid), the *OK* variable is set to 0 and an error is generated. +Muchas funciones de este tema devuelven una referencia a un elemento XML. Si se produce un error durante la ejecución de la función (por ejemplo, si la referencia al elemento raíz no es válida), la variable *OK* se pone en 0 y se genera un error. In addition, the reference returned in this case is a sequence of 32 zero "0" characters. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_SAX.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_SAX.md index c3ec189f815d02..b3fcd3e110b1ae 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_SAX.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/XML_SAX.md @@ -27,11 +27,11 @@ slug: /commands/theme/XML-SAX ## Visión general de los comandos XML SAX -See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML SAX. +Consulte la sección [XML, DOM y SAX](../theme/XML.md#xml-dom-and-sax) para obtener una definición de XML SAX. ### Creación, apertura y cierre de documentos XML mediante SAX -The SAX commands work with the standard document references of 4D (**DocRef**, a Time type reference). It is therefore possible to use these commands jointly with the 4D commands used to manage documents, such as [`SEND PACKET`](../../commands/send-packet) or [`Append document`](../../commands/append-document). +Los comandos SAX funcionan con las referencias de documento estándar de 4D (**DocRef**, una referencia de tipo Time). It is therefore possible to use these commands jointly with the 4D commands used to manage documents, such as [`SEND PACKET`](../../commands/send-packet) or [`Append document`](../../commands/append-document). The creation and opening of XML documents by programming is carried out using the [`Create document`](../../commands/create-document) and [`Open document`](../../commands/open-document) commands. Posteriormente, el uso de un comando XML con estos documentos provocará la activación automática de mecanismos XML como la codificación. Por ejemplo, la codificación `` el encabezado se escribirá automáticamente en el documento. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md index 72e30b56f3f794..d2c324603773ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md @@ -59,6 +59,14 @@ La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + El resultado es similar y _MethodB_ se evalúa sólo si es necesario. > **Note:** The [ternary operator](operators.md#ternary-operator) allows writing one-line conditional expressions and can replace a full sequence of If.. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md index 6eb287a67a1d2e..7bcf22dbd445fe 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md @@ -1247,10 +1247,16 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) La instrucción **orden by** es soportada en la cadena de consulta para que las entidades en la selección de entidad resultante estén ordenadas por similitud. Por ejemplo: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - //orden por defecto, la primera entidad es la más parecida +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + Si el mismo vector aparece varias veces en la cadena de consulta, el orden por se aplicará a los resultados del primero, por ejemplo: ```4d diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md index 72a6d73d86fd60..9b6a2cd69c5449 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md @@ -58,6 +58,14 @@ La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + El resultado es similar y *MethodB* se evalúa sólo si es necesario. > **Nota:** el [operador ternario](operators.md#ternary-operator) permite escribir expresiones condicionales de una sola línea y puede reemplazar una secuencia completa de declaraciones If..Else. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md index 23a47badc0c3da..9d0af49a9465bc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md @@ -1249,10 +1249,16 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) La instrucción **orden by** es soportada en la cadena de consulta para que las entidades en la selección de entidad resultante estén ordenadas por similitud. Por ejemplo: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - //orden por defecto, la primera entidad es la más parecida +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + Si el mismo vector aparece varias veces en la cadena de consulta, el orden por se aplicará a los resultados del primero, por ejemplo: ```4d diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md index 72a6d73d86fd60..9b6a2cd69c5449 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md @@ -58,6 +58,14 @@ La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + El resultado es similar y *MethodB* se evalúa sólo si es necesario. > **Nota:** el [operador ternario](operators.md#ternary-operator) permite escribir expresiones condicionales de una sola línea y puede reemplazar una secuencia completa de declaraciones If..Else. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/ordering.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/ordering.md index 99b5b20c59e265..3442d08dff0998 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/ordering.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/Concepts/ordering.md @@ -26,15 +26,15 @@ Cuando se ordena una colección o selección de entidades que contiene elementos Los tipos se ordenan según la secuencia siguiente, con sus respectivas relaciones de comparación en orden ascendente: -| Rank | Tipo | También incluye | Regla de comparación | -| ---- | -------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | **null** | punteros (punteros null sólo para colecciones) | no se aplican criterios de comparación | -| 2 | **boolean** | | orden lógico: false *antes que* true | -| 3 | **string** | | orden lexicográfico (por ejemplo, "a" *antes* "ab" *antes* "b") | -| 4 | **number** | hora (convertido a milisegundos o segundos según la configuración de la base `Time inside objects`) | orden algebraico estándar (comparación numérica) | -| 5 | **object** | blobs, imágenes, punteros no nulos (colecciones) | orden interno (coherente para las funciones de collection, ver más abajo) | -| 6 | **collection** | | orden interno (coherente para las funciones de collection, ver más abajo) | -| 7 | **date** | | orden cronológico (fechas más antiguas *antes* de las más recientes, por ejemplo, ¡1990-01-01! *antes* ¡2000-01-01!) | +| Posición | Tipo | También incluye | Regla de comparación | +| -------- | -------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | **null** | punteros (punteros null sólo para colecciones) | no se aplican criterios de comparación | +| 2 | **boolean** | | orden lógico: false *antes que* true | +| 3 | **string** | | orden lexicográfico (por ejemplo, "a" *antes* "ab" *antes* "b") | +| 4 | **number** | hora (convertido a milisegundos o segundos según la configuración de la base `Time inside objects`) | orden algebraico estándar (comparación numérica) | +| 5 | **object** | blobs, imágenes, punteros no nulos (colecciones) | orden interno (coherente para las funciones de collection, ver más abajo) | +| 6 | **collection** | | orden interno (coherente para las funciones de collection, ver más abajo) | +| 7 | **date** | | orden cronológico (fechas más antiguas *antes* de las más recientes, por ejemplo, ¡1990-01-01! *antes* ¡2000-01-01!) | ### Valores numéricos especiales diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md index 72a6d73d86fd60..9b6a2cd69c5449 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md @@ -58,6 +58,14 @@ La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + El resultado es similar y *MethodB* se evalúa sólo si es necesario. > **Nota:** el [operador ternario](operators.md#ternary-operator) permite escribir expresiones condicionales de una sola línea y puede reemplazar una secuencia completa de declaraciones If..Else. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md index 098d3228bfe121..1b8d06c449ee92 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -1243,14 +1243,20 @@ var $results := ds.MyClass.query("myVectorField <= :1" ; $comparisonVector) L'instruction **order by** est prise en charge dans la chaîne de requête afin que les entités de l'entity selection résultante soient triées par similarité. Par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField" ; $comparisonVector) - //ordre par défaut, la première entité est la plus similaire +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //la première entité est la plus similaire ``` +:::note + +L'ordre par défaut est croissant, alors qu'un ordre décroissant soit généralement le plus utile pour les requêtes de similarité vectorielle. Par conséquent, vous devrez généralement ajouter le mot-clé `desc` dans vos chaînes de requête de similarité vectorielle. + +::: + Si le même vecteur apparaît plusieurs fois dans la chaîne de requête, l'ordre par sera appliqué aux résultats du premier, par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc ; / +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc" ; / {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 est utilisé pour le tri ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md index f53ec3d699aa11..9e5cf51a4618ce 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -7,7 +7,7 @@ title: Classes Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. -Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Chaque objet est une instance de sa classe. +Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut [`étendre`](#class-extends-classname) une autre classe, et hérite ensuite de ses [fonctions](#function) et propriétés ([déclarées](#property) et [calculées](#function-get-and-function-set)). > Les modèles de classe 4D et JavaScript sont similaires, et basés sur une chaîne de prototypes. @@ -60,9 +60,9 @@ Les classes disponibles sont accessibles depuis leurs class stores. Il existe de
-| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md index 6c48c7babe22a4..f8b23517b3c9f0 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md @@ -110,6 +110,43 @@ Vous pouvez créer deux types de collections : Pour plus d'informations, consultez la section [Objets et collections partagés](shared.md). +## Affectation + +Les données de type collection et [objet](./dt_object.md) sont gérées dans le langage 4D via des **références** (c'est-à-dire des pointeurs internes), contrairement aux données de type scalaire (entier, date, etc.). Par conséquent, lors de l'affectation d'une collection à une variable (par exemple `$myVar:=[1;2;3]`), c'est la **référence** qui est affectée, et non la valeur elle-même. Toute modification ultérieure de la variable *$myVar* sera donc répercutée partout où la collection originale est référencée. Cela suit le même principe que les [pointeurs](./dt_collection.md), sauf que la variable *$myVar* n'a pas besoin d'être déréférencée. + +Par exemple : + +```4d +var $col1; $col2 : Collection +var $o : Object + +$col1:=[1;2;3] //une référence à la collection est créée +$col2:=$col1 //les deux variables partagent la même référence de collection +$o:={ list:$col1 } //l'objet stocke une référence à la même collection + +$col1.push(4) +//$col2 = [1,2,3,4] +//$o = {"list":[1,2,3,4]} + +$col2[0]:=10 +//$col1 = [10,2,3,4] +//$o = {"list":[10,2,3,4]} + +$o.list.push(5) +//$col1 = [10,2,3,4,5] +//$col2 = [10,2,3,4,5] + +ASSERT($col1=$col2) //True +``` + +Ce principe s'applique partout où des objets ou des collections sont affectés, y compris dans les expressions de [paramètres](./parameters.md) ou de [formule](../commands/formula). + +:::note + +Si vous souhaitez créer une **copie profonde** d'une collection, utilisez la fonction [`collection.copy()`](../API/CollectionClass.md#copy). + +::: + ## Fonctions de collection Les références de collections 4D bénéficient de fonctions de classe spéciales (aussi nommées *fonctions membres*). Les fonctions de collection sont listées dans la section [Collection Class](../API/CollectionClass.md) . diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_object.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_object.md index 6c2ff36196f58a..1c8d465b4b288e 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_object.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_object.md @@ -28,7 +28,7 @@ N'oubliez pas que les noms de propriétés font la différence entre les majuscu ::: -Vous gérez les variables, champs ou expressions de type Objet en utilisant la [notation Objet](#properties) ou les commandes disponibles dans le thème **Objets (Langage)**. A noter que des commandes spécifiques du thème **Recherches et tris** telles que `QUERY BY ATTRIBUTE`, `QUERY SELECTION BY ATTRIBUTE` ou `ORDER BY ATTRIBUTE` peuvent être utilisées pour traiter des champs objets. +Vous gérez les variables, champs ou expressions de type Objet en utilisant la [notation Objet](#properties) ou les commandes disponibles dans le thème **Objets (Langage)**. Chaque valeur de propriété accessible par la notation objet est considérée comme une expression. Vous pouvez utiliser ces valeurs partout où des expressions 4D sont attendues : @@ -114,6 +114,36 @@ Vous pouvez créer deux types d'objets : - des objets partagés, en utilisant la commande [`New shared object`](../commands/new-shared-object). Le contenu de ces objets peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces objets doit être contrôlé via des structures `Use...End use`. Pour plus d'informations, consultez la section [Objets et collections partagés](shared.md). +## Affectation + +Les données de type objet et [collection](./dt_collection.md) sont gérées dans le langage 4D via des **références** (c'est-à-dire des pointeurs internes), contrairement aux données de type scalaire (entier, date, etc.). Par conséquent, lors de l'affectation d'un objet ou d'une collection à une variable (par exemple `$myVar:={ a:2 }`), c'est la **référence** qui est affectée, et non la valeur elle-même. Toute modification ultérieure de la variable *$myVar* sera donc répercutée partout où l'objet original est référencé. Cela suit le même principe que les [pointeurs](./dt_collection.md), sauf que la variable *$myVar* n'a pas besoin d'être déréférencée. + +Par exemple : + +```4d +var $o1; $o2 : Object +var $col : Collection + +$col:=[1;2;3] //une référence à la collection est créée +$o1:={ a:2 ; b:$col } //une référence à l'objet est créée +$o2:=$o1 //les variables $o1 et $o2 partagent une référence au même objet + +$o1.a:=10 //$o2 = {"a":10,"b":[1,2,3]} +$o2.a:=20 //$o1 = {"a":20,"b":[1,2,3]} +$col.push(4) +//$o1 = {"a":20,"b":[1,2,3,4]} +//$o2 = {"a":20,"b":[1,2,3,4]} +ASSERT($o1=$o2) //True +``` + +Ce principe s'applique partout où des objets ou des collections sont affectés, y compris dans les expressions de [paramètres](./parameters.md) ou de [formule](../commands/formula). + +:::note + +Si vous souhaitez créer une **copie profonde** d'un objet, utilisez la commande [`OB COPY`](../commands/ob-copy). + +::: + ## Propriétés {#properties} Vous accédez aux valeurs des propriétés de l'objet à travers une chaîne de tokens. On peut accéder aux propriétés des objets de deux manières : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/flow-control.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/flow-control.md index 3ee720767c645f..52ca12807d3b86 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/flow-control.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/flow-control.md @@ -58,6 +58,14 @@ L'expression n'est TRUE que si les deux méthodes sont mises à TRUE. Or, même End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + Le résultat est équivalent et *MethodB* est évaluée seulement si nécessaire. > **Note :** L'[opérateur ternaire](operators.md#ternary-operator) permet d'écrire des expressions conditionnelles sur une seule ligne et peut remplacer une séquence complète d'instructions If...Else. @@ -809,3 +817,24 @@ logConsole($message) ``` +## defer (expression) + +
Historique + +| Release | Modifications | +| ------- | ------------- | +| 21 R4 | Ajout | + +
+ +La commande [`defer`](../commands/defer) vous permet d'empiler une ou plusieurs expression(s) qui s'exécuteront automatiquement lorsque la méthode ou la fonction courante **terminera son exécution**. + +Qu'il s'agisse de gérer des clôtures de documents, de réinitialiser des sémaphores interprocess ou de libérer des ressources, les mots-clés `defer` permettent de s'assurer que les tâches de nettoyage et de fermeture seront parfaitement exécutées, quel que soit l'endroit ou la manière dont la code se termine. + +```4d + //s'assurer qu'un code est exécuté à la sortie +defer(myCleaningMethod) + //Faire quelque chose... +``` + +Reportez-vous à la description de la commande [`defer`](../commands/defer) pour plus d'informations. \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/methods.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/methods.md index 4a7b16f48437ff..04b4959835645e 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/methods.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/methods.md @@ -13,13 +13,13 @@ La taille maximale d'une méthode est limitée à 2 Go de texte ou à 32 000 lig Dans le langage 4D, il existe plusieurs catégories de méthodes. La catégorie dépend de la façon dont on peut les appeler : -| Type | Contexte d'appel | Accepte des paramètres | Description | -| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Méthode projet** | À la demande, lorsque le nom de la méthode du projet [est appelé](../Project/project-method-properties.md) | Oui | Peut contenir du code pour exécuter des actions personnalisées. Une fois que votre méthode projet est créée, elle devient partie intégrante du langage du projet. | -| **Méthode objet (widget)** | Automatique, lorsqu'un événement implique l'objet auquel la méthode est associée | Non | Propriété d'un objet formulaire (également appelé widget) | -| **Méthode formulaire** | Automatique, lorsqu'un événement implique le formulaire auquel la méthode est associée | Non | Propriété d'un formulaire. Vous pouvez utiliser une méthode formulaire pour gérer les données et les objets, mais il est généralement plus simple et plus efficace d'utiliser une méthode objet dans ces cas de figure. | -| **Trigger** (ou *méthode table*) | Automatique, chaque fois que vous manipulez les enregistrements d'une table (Ajouter, Supprimer, Modifier) | Non | Propriété d'une table. Les triggers sont des méthodes qui permettent d'éviter les opérations "illégales" sur les enregistrements de votre base de données. | -| **Méthode base** | Automatique, lorsqu'un événement se produit sur la session de travail | Oui (prédéfini) | Il existe 16 méthodes base dans 4D. | -| **Classe** | Appelée automatiquement lorsqu'un objet de la classe est instancié ou lorsqu'une fonction de la classe est exécutée sur une instance d'objet dans toute autre méthode ou dans un [champ de la base de données](../Develop/field-properties.md#class). | oui (fonctions de classe) | Une **Classe** est utilisée pour déclarer et configurer un [constructeur](./classes.md#class-constructor), des [propriétés](./classes.md#property) et des [fonctions](./classes.md#function) d'objets. Voir [**Classes**](classes.md) | +| Type | Contexte d'appel | Accepte des paramètres | Description | +| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Méthode projet** | À la demande, lorsque le nom de la méthode du projet [est appelé](../Project/project-method-properties.md) | Oui | Peut contenir du code pour exécuter des actions personnalisées. Une fois que votre méthode projet est créée, elle devient partie intégrante du langage du projet. | +| **Méthode objet (widget)** | Automatique, lorsqu'un événement implique l'objet auquel la méthode est associée | Non | Propriété d'un objet formulaire (également appelé widget) | +| **Méthode formulaire** | Automatique, lorsqu'un événement implique le formulaire auquel la méthode est associée | Non | Propriété d'un formulaire. Vous pouvez utiliser une méthode formulaire pour gérer les données et les objets, mais il est généralement plus simple et plus efficace d'utiliser une méthode objet dans ces cas de figure. | +| **Trigger** (ou *méthode table*) | Automatique, chaque fois que vous manipulez les enregistrements d'une table (Ajouter, Supprimer, Modifier) | Non | Propriété d'une table. Les triggers sont des méthodes qui permettent d'éviter les opérations "illégales" sur les enregistrements de votre base de données. | +| **Méthode base** | Automatique, lorsqu'un événement se produit sur la session de travail | Oui (prédéfini) | Il existe 16 méthodes base dans 4D. | +| **Classe** | Appelée automatiquement lorsqu'un objet de la classe est instancié ou lorsqu'une fonction de la classe est exécutée sur une instance d'objet dans toute autre méthode ou dans un [champ de la base de données](../Develop/field-properties.md#class). | oui (fonctions de classe) | Une **Classe** est utilisée pour déclarer et configurer un [constructeur](./classes.md#class-constructor), des [propriétés](./classes.md#property) et des [fonctions](./classes.md#function) d'objets. Voir [**Classes**](classes.md) et [classe **Function**](../API/FunctionClass.md). | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/operators.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/operators.md index a43bc8ad2f2b11..fce9014844fc82 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/operators.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/operators.md @@ -21,10 +21,12 @@ Les valeurs que les opérateurs affectent sont des opérandes. Dans l'expression **L'opérateur d'affectation** (`a:=b`) initialise ou met à jour la valeur de `a` avec la valeur de `b` : ```4d -$myNumber:=3 //assigne 3 à la variable $myNumber -$myDate:=!2018/01/21! //assigne une date littérale -$myLength:=Length("Acme") //assigne le résultat de la commande (4) à $myLength +$myNumber:=3 //affecte 3 à la variable $myNumber +$myDate:=!2026/01/21 ! //affecte une date littérale +$myLength:=Length("Acme") //affecte le résultat de la commande (4) à $myLength $col:=New collection //$col est initialisé avec une collection vide +$myObject:={ a:2 ; b :$col } //affecte une référence d'objet à $myObject +$myObject.a:=3 //affecte une valeur à une propriété d'objet ``` > Attention à ne PAS confondre l'opérateur d'affectation `:=` avec l'opérateur de comparaison d'égalité `=`. Un opérateur d'affectation différent (et non pas `=`) a été choisi délibérément pour éviter les problèmes et la confusion qui surviennent souvent avec == ou === dans d'autres langages de programmation. De telles erreurs sont souvent difficiles à reconnaître pour le compilateur et conduisent à un dépannage fastidieux. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index f380b329a28a83..26b4fe3db318b9 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -3,6 +3,14 @@ id: updates title: Release Notes --- +## 4D 21 R4 + +Read [**What’s new in 4D 21 R4**](https://blog.4d.com/whats-new-in-4d-21-r4/), the blog post that lists all new features and enhancements in 4D 21 R4. + +#### Points forts + +- New [`defer`](../commands/defer) command to declare some code to be always executed at method or function exit. + ## 4D 21 R3 Lisez [**Les nouveautés de 4D 21 R3**](https://blog.4d.com/fr/whats-new-in-4d-21-r3), l'article de blog qui liste toutes les nouvelles fonctionnalités et améliorations de 4D 21 R3. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md index 611df5df579b6f..f1e29b8041f5a4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md @@ -59,6 +59,14 @@ L'expression n'est TRUE que si les deux méthodes sont mises à TRUE. Or, même End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + Le résultat est équivalent et _MethodB_ n'est évaluée que si nécessaire. > **Note :** L'[opérateur ternaire](operators.md#ternary-operator) permet d'écrire des expressions conditionnelles sur une seule ligne et peut remplacer une séquence complète d'instructions If...Else. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md index bb61458f32088b..d1d7e23fee8c0c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md @@ -1241,14 +1241,20 @@ var $results := ds.MyClass.query("myVectorField <= :1" ; $comparisonVector) L'instruction **order by** est prise en charge dans la chaîne de requête afin que les entités de l'entity selection résultante soient triées par similarité. Par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField" ; $comparisonVector) - //ordre par défaut, la première entité est la plus similaire +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //la première entité est la plus similaire ``` +:::note + +L'ordre par défaut est croissant, alors qu'un ordre décroissant soit généralement le plus utile pour les requêtes de similarité vectorielle. Par conséquent, vous devrez généralement ajouter le mot-clé `desc` dans vos chaînes de requête de similarité vectorielle. + +::: + Si le même vecteur apparaît plusieurs fois dans la chaîne de requête, l'ordre par sera appliqué aux résultats du premier, par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc ; / +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc" ; / {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 est utilisé pour le tri ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/classes.md index 7d8c976e1b80fb..7d8be368b307d6 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/classes.md @@ -7,7 +7,7 @@ title: Classes Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. -Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Chaque objet est une instance de sa classe. +Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut [`étendre`](#class-extends-classname) une autre classe, et hérite ensuite de ses [fonctions](#function) et propriétés ([déclarées](#property) et [calculées](#function-get-and-function-set)). > Les modèles de classe 4D et JavaScript sont similaires, et basés sur une chaîne de prototypes. @@ -109,9 +109,9 @@ Les classes disponibles sont accessibles depuis leurs class stores. Il existe de
-| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
@@ -531,7 +531,7 @@ Dans le fichier de définition de la classe, les déclarations de propriétés c `Function get` retourne une valeur du type de la propriété et `Function set` prend un paramètre du type de la propriété. Les deux arguments doivent être conformes aux [paramètres de fonction](#parameters) standard. -Lorsque les deux fonctions sont définies, la propriété calculée est en **lecture-écriture**. Si seule une `Function get` est définie, la propriété calculée est en **lecture seule**. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. +Lorsque les deux fonctions sont définies, la propriété calculée est en **lecture-écriture**. Si seule une `Function get` est définie, la propriété calculée est en **lecture seule**. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. Si seule une `Function set` est définie, 4D retourne *undefined* lorsque la propriété est lue. Si une fonction définie à l'intérieur d'une classe partagée modifie les objets de la classe, elle devrait appeler la structure [`Use...End use`](shared.md#useend-use) pour protéger l'accès aux objets partagés. Pour plus d'informations, consultez le paragraphe sur les [fonctions partagées](#shared-functions) ci-dessous. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md index 3ee720767c645f..32dba3d4e53390 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md @@ -58,6 +58,14 @@ L'expression n'est TRUE que si les deux méthodes sont mises à TRUE. Or, même End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + Le résultat est équivalent et *MethodB* est évaluée seulement si nécessaire. > **Note :** L'[opérateur ternaire](operators.md#ternary-operator) permet d'écrire des expressions conditionnelles sur une seule ligne et peut remplacer une séquence complète d'instructions If...Else. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands/cs.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands/cs.md index a796a68c87c7ca..8e987493de78cb 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands/cs.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands/cs.md @@ -4,9 +4,9 @@ title: cs displayed_sidebar: docs --- -| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
Historique diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md index e06a6cba91e70a..f15a8c29a6cbf1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md @@ -1243,14 +1243,20 @@ var $results := ds.MyClass.query("myVectorField <= :1" ; $comparisonVector) L'instruction **order by** est prise en charge dans la chaîne de requête afin que les entités de l'entity selection résultante soient triées par similarité. Par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField" ; $comparisonVector) - //ordre par défaut, la première entité est la plus similaire +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //la première entité est la plus similaire ``` +:::note + +L'ordre par défaut est croissant, alors qu'un ordre décroissant soit généralement le plus utile pour les requêtes de similarité vectorielle. Par conséquent, vous devrez généralement ajouter le mot-clé `desc` dans vos chaînes de requête de similarité vectorielle. + +::: + Si le même vecteur apparaît plusieurs fois dans la chaîne de requête, l'ordre par sera appliqué aux résultats du premier, par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc ; / +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc" ; / {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 est utilisé pour le tri ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/classes.md index f7c8d4993bb313..096885ae21fc32 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/classes.md @@ -7,7 +7,7 @@ title: Classes Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. -Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Chaque objet est une instance de sa classe. +Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut [`étendre`](#class-extends-classname) une autre classe, et hérite ensuite de ses [fonctions](#function) et propriétés ([déclarées](#property) et [calculées](#function-get-and-function-set)). > Les modèles de classe 4D et JavaScript sont similaires, et basés sur une chaîne de prototypes. @@ -60,9 +60,9 @@ Les classes disponibles sont accessibles depuis leurs class stores. Il existe de
-| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md index 3ee720767c645f..32dba3d4e53390 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md @@ -58,6 +58,14 @@ L'expression n'est TRUE que si les deux méthodes sont mises à TRUE. Or, même End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + Le résultat est équivalent et *MethodB* est évaluée seulement si nécessaire. > **Note :** L'[opérateur ternaire](operators.md#ternary-operator) permet d'écrire des expressions conditionnelles sur une seule ligne et peut remplacer une séquence complète d'instructions If...Else. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index 7d8c976e1b80fb..7d8be368b307d6 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -7,7 +7,7 @@ title: Classes Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. -Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Chaque objet est une instance de sa classe. +Une fois qu'une classe utilisateur est définie, vous pouvez **instancier des objets** de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut [`étendre`](#class-extends-classname) une autre classe, et hérite ensuite de ses [fonctions](#function) et propriétés ([déclarées](#property) et [calculées](#function-get-and-function-set)). > Les modèles de classe 4D et JavaScript sont similaires, et basés sur une chaîne de prototypes. @@ -109,9 +109,9 @@ Les classes disponibles sont accessibles depuis leurs class stores. Il existe de
-| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
@@ -531,7 +531,7 @@ Dans le fichier de définition de la classe, les déclarations de propriétés c `Function get` retourne une valeur du type de la propriété et `Function set` prend un paramètre du type de la propriété. Les deux arguments doivent être conformes aux [paramètres de fonction](#parameters) standard. -Lorsque les deux fonctions sont définies, la propriété calculée est en **lecture-écriture**. Si seule une `Function get` est définie, la propriété calculée est en **lecture seule**. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. +Lorsque les deux fonctions sont définies, la propriété calculée est en **lecture-écriture**. Si seule une `Function get` est définie, la propriété calculée est en **lecture seule**. Dans ce cas, une erreur est retournée si le code tente de modifier la propriété. Si seule une `Function set` est définie, 4D retourne *undefined* lorsque la propriété est lue. Si une fonction définie à l'intérieur d'une classe partagée modifie les objets de la classe, elle devrait appeler la structure [`Use...End use`](shared.md#useend-use) pour protéger l'accès aux objets partagés. Pour plus d'informations, consultez le paragraphe sur les [fonctions partagées](#shared-functions) ci-dessous. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md index 3ee720767c645f..32dba3d4e53390 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md @@ -58,6 +58,14 @@ L'expression n'est TRUE que si les deux méthodes sont mises à TRUE. Or, même End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + Le résultat est équivalent et *MethodB* est évaluée seulement si nécessaire. > **Note :** L'[opérateur ternaire](operators.md#ternary-operator) permet d'écrire des expressions conditionnelles sur une seule ligne et peut remplacer une séquence complète d'instructions If...Else. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/cs.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/cs.md index a796a68c87c7ca..8e987493de78cb 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/cs.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/cs.md @@ -4,9 +4,9 @@ title: cs displayed_sidebar: docs --- -| Paramètres | Type | | Description | -| ---------- | ---------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------- | -| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | Class store utilisateur utilisateurs pour le projet ou le composant | +| Paramètres | Type | | Description | +| ---------- | ---------------------------------------------------------- | --------------------------- | --------------------------------------------- | +| classStore | [4D.ClassStore](../API/ClassStoreClass.md) | ← | User class store for the project or component |
Historique diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md index bcc626e4d37235..cace9204ff16a4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -1249,15 +1249,21 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) **order by** 宣言はクエリ文字列でサポートされており、これによって返されるエンティティセレクション内でエンティティは類似度順にソートされます。 例: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - // デフォルト順、最初のエンティティは最も類似したもの +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + 同じベクトルがクエリ文字列内に複数回出現した場合、order by は最初のものの結果に適用されます。例: ```4d var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc"; / - {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 は order by に使用されます。 + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by ``` 詳細については[以下の例題](#例題-4-2)を参照してください (例題 4 と 5)。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md index aa708a4190d815..44e43fd6e88686 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md @@ -110,6 +110,43 @@ $users:=[{name: "Alice"; \ 詳細な情報については、[共有オブジェクトと共有コレクション](shared.md) を参照ください。 +## Assignment + +Collection and [object](./dt_object.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning a collection to a variable (e.g. `$myVar:=[1;2;3]`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original collection is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +例: + +```4d +var $col1; $col2 : Collection +var $o : Object + +$col1:=[1;2;3] //a reference to the collection is created +$col2:=$col1 //both variables share the same collection reference +$o:={ list:$col1 } //the object stores a reference to the same collection + +$col1.push(4) +//$col2 = [1,2,3,4] +//$o = {"list":[1,2,3,4]} + +$col2[0]:=10 +//$col1 = [10,2,3,4] +//$o = {"list":[10,2,3,4]} + +$o.list.push(5) +//$col1 = [10,2,3,4,5] +//$col2 = [10,2,3,4,5] + +ASSERT($col1=$col2) //True +``` + +This principle applies wherever objects or collections are assigned, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of a collection, use the [`collection.copy()`](../API/CollectionClass.md#copy) function. + +::: + ## コレクション関数 4D コレクションへの参照は、コレクションの *メンバー関数* と呼ばれる特別なクラス関数を利用することができます。 コレクション関数は [クラス API リファレンス](../API/CollectionClass.md) にまとめられています。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_object.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_object.md index 42b2bd5fc2f5fe..057da31c67083e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_object.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_object.md @@ -28,7 +28,7 @@ title: Object ::: -オブジェクト型の変数・フィールド・式を操作するには [オブジェクト記法](#プロパティ) を用いるか、**オブジェクト (ランゲージ)** テーマが提供するコマンドを使用します。 オブジェクト型フィールドに対して処理をおこなうには `QUERY BY ATTRIBUTE`、`QUERY SELECTION BY ATTRIBUTE` や `ORDER BY ATTRIBUTE` など、**クエリ** テーマの特定のコマンドも使用することができます。 +オブジェクト型の変数・フィールド・式を操作するには [オブジェクト記法](#プロパティ) を用いるか、**オブジェクト (ランゲージ)** テーマが提供するコマンドを使用します。 オブジェクト記法を使ってアクセスされたそれぞれのプロパティ値は式とみなされます。 4D内で式が期待される場所であれば、どこでもこのような値を使用することができます: @@ -114,6 +114,36 @@ $col:=$o.col[5] // 6 - [`New shared object`](../commands/new-shared-object) コマンドを使用して作成する共有コレクション。 共有オブジェクトはプロセス間 (プリエンティブ・スレッド含む) で共有可能なオブジェクトです。 共有オブジェクトへのアクセスは `Use...End use` 構造によって管理されています。 詳細な情報については、[共有オブジェクトと共有コレクション](shared.md) を参照ください。 +## Assignment + +Object and [collection](./dt_collection.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning an object or a collection to a variable (e.g. `$myVar:={ a:2 }`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original object is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +例: + +```4d +var $o1; $o2 : Object +var $col : Collection + +$col:=[1;2;3] //a reference to the collection is created +$o1:={ a:2 ; b:$col } //a reference to the object is created +$o2:=$o1 //both variables $o1 and $o2 share the reference to the same object + +$o1.a:=10 //$o2 = {"a":10,"b":[1,2,3]} +$o2.a:=20 //$o1 = {"a":20,"b":[1,2,3]} +$col.push(4) +//$o1 = {"a":20,"b":[1,2,3,4]} +//$o2 = {"a":20,"b":[1,2,3,4]} +ASSERT($o1=$o2) //True +``` + +This principle applies wherever objects or collections are used, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of an object, use the [`OB COPY`](../commands/ob-copy) command. + +::: + ## プロパティ{#properties} オブジェクトのプロパティ値には、トークンのチェーンを通してアクセスします。 オブジェクトプロパティは二通りの方法でアクセスすることができます: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/flow-control.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/flow-control.md index 09763adf955435..8de17797aa6848 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/flow-control.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/flow-control.md @@ -58,6 +58,14 @@ title: 制御フロー End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + 上記の結果はほぼ同じで、*MethodB* は必要な場合にのみ評価されます。 > **注記:** [三項演算子](../dt_boolean.md#三項演算子) を使うことで、条件式を 1行で書くことができ、[If...Else](../cf_branching.md#ifelseend-if) 文を置き換えることもできます。 @@ -809,3 +817,24 @@ logConsole($message) ``` +## defer (expression) + +
履歴 + +| リリース | 内容 | +| ----- | -- | +| 21 R4 | 追加 | + +
+ +The [`defer`](../commands/defer) command allows you to stack one or more expression(s) that will automatically execute when the current method or function **finishes running**. + +Whether you are managing document closings, resetting interprocess flags, or freeing up resources, ensuring that your housekeeping tasks execute flawlessly no matter how or where your function terminates can be handled by `defer` keywords. + +```4d + //make sure some code is executed at exit +defer(myCleaningMethod) + //Do something... +``` + +See the [`defer`](../commands/defer) command description for more information. \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/methods.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/methods.md index 20a3f64da23255..2578529d353fee 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/methods.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/methods.md @@ -13,13 +13,13 @@ title: メソッド 4D ランゲージにおいて、数種類のメソッドが存在します。 その呼び出し方によって、メソッドは区別されます: -| 型 | 自動呼び出しのコンテキスト | 引数の受け取り | 説明 | -| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **プロジェクトメソッド** | On demand, when the project method name [is called](../Project/project-method-properties.md) | ◯ | 任意のアクションを実行するためのコードです。 作成されたプロジェクトメソッドは、そのプロジェクトのランゲージの一部となります。 | -| **オブジェクト (ウィジェット) メソッド** | メソッドが設定されたフォームオブジェクトに関連したイベント発生時に | × | フォームオブジェクト (ウィジェットとも呼びます) のプロパティです。 | -| **フォームメソッド** | メソッドが設定されたフォームに関連したイベント発生時に | × | フォームのプロパティです。 フォームメソッドを使用してデータとオブジェクトを管理することができます。ただし、これら目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。 | -| **トリガー** (別名 *テーブルメソッド*) | テーブルのレコード操作 (追加・削除・修正) の度に | × | テーブルのプロパティです。 トリガーは、データベースのレコードに対して「不正な」操作がおこなわれることを防ぎます。 | -| **データベースメソッド** | 作業セッションのイベント発生時に | ○ (既定) | 4D には 16のデータベースメソッドがあります。 | -| **クラス** | クラスのオブジェクトがインスタンス化されたとき、あるいは他のメソッドや[データベースフィールド](../Develop/field-properties.md#class) 内においてオブジェクトインスタンス上でクラスの関数が実行されたときに自動的に呼び出されます。 | ◯(クラス関数) | オブジェクトのクラスの[constructor](./classes.md#class-constructor), [properties](./classes.md#property) と[関数](./classes.md#function) を宣言および設定するためには、**Class** が使用されます。 [**クラス**](classes.md) 参照。 [**クラス**](classes.md) 参照。 | +| 型 | 自動呼び出しのコンテキスト | 引数の受け取り | 説明 | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **プロジェクトメソッド** | On demand, when the project method name [is called](../Project/project-method-properties.md) | ◯ | 任意のアクションを実行するためのコードです。 作成されたプロジェクトメソッドは、そのプロジェクトのランゲージの一部となります。 | +| **オブジェクト (ウィジェット) メソッド** | メソッドが設定されたフォームオブジェクトに関連したイベント発生時に | × | フォームオブジェクト (ウィジェットとも呼びます) のプロパティです。 | +| **フォームメソッド** | メソッドが設定されたフォームに関連したイベント発生時に | × | フォームのプロパティです。 フォームメソッドを使用してデータとオブジェクトを管理することができます。ただし、これら目的には、オブジェクトメソッドを使用する方が通常は簡単であり、より効果的です。 | +| **トリガー** (別名 *テーブルメソッド*) | テーブルのレコード操作 (追加・削除・修正) の度に | × | テーブルのプロパティです。 トリガーは、データベースのレコードに対して「不正な」操作がおこなわれることを防ぎます。 | +| **データベースメソッド** | 作業セッションのイベント発生時に | ○ (既定) | 4D には 16のデータベースメソッドがあります。 | +| **クラス** | クラスのオブジェクトがインスタンス化されたとき、あるいは他のメソッドや[データベースフィールド](../Develop/field-properties.md#class) 内においてオブジェクトインスタンス上でクラスの関数が実行されたときに自動的に呼び出されます。 | ◯(クラス関数) | オブジェクトのクラスの[constructor](./classes.md#class-constructor), [properties](./classes.md#property) と[関数](./classes.md#function) を宣言および設定するためには、**Class** が使用されます。 [**クラス**](classes.md) 参照。 See [**Classes**](classes.md) and [**Function** class](../API/FunctionClass.md). | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/operators.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/operators.md index 837687ba132170..7a0012d59b0f8c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/operators.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/operators.md @@ -21,10 +21,12 @@ title: 演算子 **代入演算子** (`a:=b`) は、`a` の値を `b` の値で初期化、または更新します。 ```4d -$myNumber:=3 // MyNumber 変数に 3 を代入します -$myDate:=!2018/01/21! // 日付リテラルを代入します -$myLength:=Length("Acme") // コマンドの結果 (4) を $myLength に代入します -$col:=New collection // $col を空のコレクションで初期化します +$myNumber:=3 //assigns 3 to $myNumber variable +$myDate:=!2026/01/21! //assigns a date literal +$myLength:=Length("Acme") //assigns the result of the command (4) to $myLength +$col:=New collection //$col is initialized with an empty collection +$myObject:={ a:2 ; b:$col } //assigns an object reference to $myObject +$myObject.a:=3 //assigns a value to an object property ``` > 代入演算子 `:=` と等号比較演算子 `=` とを混同しないように注意してください。 `=` とは異なる代入演算子が採用されたのは意図的なことで、他のプログラミング言語で == や === の使用によって度々起こる間違いを避けるためです。 このような間違いはコンパイラーにとっても発見しにくく、時間を消耗するトラブルシューティングのもとです。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index e4e8e42de7be2d..b945f1f60e7a6a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -3,6 +3,14 @@ id: updates title: リリースノート --- +## 4D 21 R4 + +Read [**What’s new in 4D 21 R4**](https://blog.4d.com/whats-new-in-4d-21-r4/), the blog post that lists all new features and enhancements in 4D 21 R4. + +#### ハイライト + +- New [`defer`](../commands/defer) command to declare some code to be always executed at method or function exit. + ## 4D 21 R3 [**4D 21 R3 の新機能**](https://blog.4d.com/ja/whats-new-in-4d-21-r3/): 4D 21 R3 の新機能と拡張機能をすべてリストアップしたブログ記事です。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/DataStoreClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/DataStoreClass.md index 5eb0c365e18fca..7973024cb0186d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/DataStoreClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/DataStoreClass.md @@ -120,11 +120,11 @@ $foreignStudents:=Open datastore($connectTo;"foreign")
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|connectionInfo|Object|->|Connection properties used to reach the remote datastore| -|localID |Text|->|Id to assign to the opened datastore on the local application (mandatory)| -|Result |4D.DataStoreImplementation|<-|Datastore object| +|connectionInfo|Object|->|リモートデータストアへの接続に使用する接続プロパティ| +|localID |Text|->|ローカルアプリケーション内で、開かれたデータストアに対して割り当てる ID (必須)| +|戻り値|4D.DataStoreImplementation|<-|Datastore object|
@@ -334,9 +334,9 @@ ALERT("They are "+String($foreignStudents.Students.all().length)+" foreign stude
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Information about the encryption of the current datastore and of each table| +|戻り値|Object|<-|Information about the encryption of the current datastore and of each table|
@@ -408,9 +408,9 @@ ALERT("They are "+String($foreignStudents.Students.all().length)+" foreign stude
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -||||Does not require any parameters| +||||引数を必要としません|
@@ -490,9 +490,9 @@ ds.unlock() // コピー操作をおこなったので、データストアの
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|Result|Collection|<-|Collection of optimization context objects| +|戻り値|Collection|<-|Collection of optimization context objects|
@@ -569,9 +569,9 @@ $info:=$ds.getAllRemoteContexts()
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Datastore properties| +|戻り値|Object|<-|Datastore properties|
@@ -640,10 +640,10 @@ $info:=$remoteDS.getInfo()
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|contextName|Text|->|Name of the context| -|Result|Object|<-|Description of the optimization context| +|contextName|Text|->|コンテキストの名前| +|戻り値|Object|<-|Description of the optimization context|
@@ -734,9 +734,9 @@ ORDAリクエストログのフォーマットの詳細は、[**ORDAクライア
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if the Data Explorer access is disabled, False if it is enabled (default)| +|戻り値|Boolean|<-|True if the Data Explorer access is disabled, False if it is enabled (default)|
@@ -770,9 +770,9 @@ ORDAリクエストログのフォーマットの詳細は、[**ORDAクライア
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|Result|Boolean|<-|True if locked| +|戻り値|Boolean|<-|True if locked|
@@ -847,11 +847,11 @@ ORDAリクエストログのフォーマットの詳細は、[**ORDAクライア
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|curPassPhrase |Text|->|Current encryption passphrase| -|curDataKey |Object|->|Current data encryption key| -|Result|Object|<-|Result of the encryption key matching| +|curPassPhrase |Text|->|カレントの暗号化パスフレーズ| +|curDataKey |Object|->|カレントのデータ暗号化キー| +|戻り値|Object|<-|Result of the encryption key matching|
@@ -924,9 +924,9 @@ ORDAリクエストログのフォーマットの詳細は、[**ORDAクライア
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|status|Boolean|->|True to disable Data Explorer access to data on the `webAdmin` port, False (default) to grant access| +|status|Boolean|->|`webAdmin` ポート上で、データエクスプローラーによるデータアクセスを無効にするには true、アクセスを有効にするには false (デフォルト)|
@@ -969,15 +969,15 @@ ORDAリクエストログのフォーマットの詳細は、[**ORDAクライア
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|contextName|Text|->|Name of the context| -|dataClassName|Text|->|Name of the dataclass| -|dataClassObject|4D.DataClass|->|dataclass object (e.g datastore.Employee)| -|attributes|Text|->|Attribute list separated by a comma| -|attributesColl|Collection|->|Collection of attribute names (text)| -|contextType|Text|->|If provided, value must be "main" or "currentItem"| -|pageLength|Integer|->|Page length of the entity selection linked to the context (default is 80)| +|contextName|Text|->|コンテキストの名称| +|dataClassName|Text|->|データクラスの名称| +|dataClassObject|4D.DataClass|->|DataClass オブジェクト (例: datastore.Employee)| +|attributes|Text|->|カンマ区切りの属性リスト| +|attributesColl|Collection|->|属性名 (テキスト) のコレクション| +|contextType|Text|->|渡す場合、値は "main" または "currentItem" のいずれか| +|pageLength|Integer|->|コンテキストにリンクされたエンティティセレクションのページ長 (デフォルトは 80)|
@@ -1103,11 +1103,11 @@ Form.currentItemLearntAttributes:=Form.selectedPerson.getRemoteContextAttributes
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|file |4D.File|->|File object | -|options |Integer|->|Log response option (server only)| -|reqNum |Integer|->|Number of requests to keep in memory (client only)| +|file |4D.File|->|File オブジェクト| +|options |Integer|->|ログレスポンスオプション (サーバーのみ)| +|reqNum |Integer|->|メモリ内に保管するリクエストの数 (クライアントのみ)|
@@ -1218,9 +1218,9 @@ SET DATABASE PARAMETER(4D Server Log Recording;0)
-|Parameter|Type||Description| +|引数|型||説明| |---|---|:---:|---| -||||Does not require any parameters| +||||引数を必要としません|
@@ -1286,9 +1286,9 @@ End if
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -||||Does not require any parameters| +||||引数を必要としません|
@@ -1324,9 +1324,9 @@ ORDAリクエストログがマシン上で開始されていない場合、こ
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -||||Does not require any parameters| +||||引数を必要としません|
@@ -1364,9 +1364,9 @@ ORDAリクエストログがマシン上で開始されていない場合、こ
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -||||Does not require any parameters| +||||引数を必要としません|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntityClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntityClass.md index 54e1e683bb248b..ef9209920b83b4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntityClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntityClass.md @@ -874,9 +874,9 @@ $info:=$address.getRemoteContextAttributes()
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if entity has just been created and not yet saved. Otherwise, False.| +|戻り値|Boolean|<-|True if entity has just been created and not yet saved. Otherwise, False.|
@@ -1168,9 +1168,9 @@ $info:=$address.getRemoteContextAttributes()
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Status object| +|戻り値|Object|<-|Status object|
@@ -1661,9 +1661,9 @@ employeeObject:=employeeSelected.toObject("directReports.*")
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if at least one entity attribute has been modified and not yet saved, else False| +|戻り値|Boolean|<-|True if at least one entity attribute has been modified and not yet saved, else False|
@@ -1784,9 +1784,9 @@ employeeObject:=employeeSelected.toObject("directReports.*")
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Status object| +|戻り値|Object|<-|Status object|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntitySelectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntitySelectionClass.md index 65559d4afcf148..e46426b0ae4a03 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntitySelectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/EntitySelectionClass.md @@ -1235,9 +1235,9 @@ $info:=$persons.getRemoteContextAttributes()
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if the entity selection is alterable, False otherwise| +|戻り値|Boolean|<-|True if the entity selection is alterable, False otherwise|
@@ -1280,9 +1280,9 @@ Form.products.add(Form.product)
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if the entity selection is ordered, False otherwise| +|戻り値|Boolean|<-|True if the entity selection is ordered, False otherwise|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FileClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FileClass.md index 56dca04fa25259..95c0fc985ed8ae 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FileClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FileClass.md @@ -175,9 +175,9 @@ $created:=File("/PACKAGE/SpecialPrefs/"+Current user+".myPrefs").create()
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|Result|Boolean|<-|True if the file was created successfully, false otherwise| +|戻り値|Boolean|<-|True if the file was created successfully, false otherwise|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FolderClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FolderClass.md index 447cbe4fe7f5bd..74e0e5741c658b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FolderClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/FolderClass.md @@ -161,9 +161,9 @@ Form.curfolder:=Folder("C:\\Users\\JohnSmith\\";fk platform path)
-|Parameter|Type||Description| +|引数|型||説明| |---|---|---|---| -|Result|Boolean|<-|True if the folder was created successfully, false otherwise| +|戻り値|Boolean|<-|True if the folder was created successfully, false otherwise|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/IMAPTransporterClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/IMAPTransporterClass.md index 1ba484474653d6..77ff7dca0f4082 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/IMAPTransporterClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/IMAPTransporterClass.md @@ -722,9 +722,9 @@ End if
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Status of the expunge operation | +|戻り値|Object|<-|Status of the expunge operation |
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/POP3TransporterClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/POP3TransporterClass.md index ce600ba21bcf1d..9e2ced9dfd208c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/POP3TransporterClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/POP3TransporterClass.md @@ -215,9 +215,9 @@ POP3 Transporter オブジェクトは [POP3 New transporter](#pop3-new-transpor
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|boxInfo object| +|戻り値|Object|<-|boxInfo object|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/SessionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/SessionClass.md index 35ec308563a9b7..cbc2d39878a864 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/SessionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/SessionClass.md @@ -264,9 +264,9 @@ End if
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Boolean|<-|True if session is a Guest one, False otherwise| +|戻り値|Boolean|<-|True if session is a Guest one, False otherwise|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/Transporter.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/Transporter.md index 52dbef13822ac1..e0734eb0d8c15a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/Transporter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/Transporter.md @@ -354,9 +354,9 @@ title: Transporter クラス
-|Parameter|Type||Description| +|引数|型||説明| |---------|--- |:---:|------| -|Result|Object|<-|Status of the transporter object connection| +|戻り値|Object|<-|Status of the transporter object connection|
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md index 2233446859915a..1247e505686fcc 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md @@ -59,6 +59,14 @@ title: 制御フロー End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + 上記の結果はほぼ同じで、_MethodB_ は必要な場合にのみ評価されます。 > **注記:** [三項演算子](../dt_boolean.md#三項演算子) を使うことで、条件式を 1行で書くことができ、[If...Else](../cf_branching.md#ifelseend-if) 文を置き換えることもできます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md index f97984d16353f8..72a231d0d611e2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md @@ -1247,15 +1247,21 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) **order by** 宣言はクエリ文字列でサポートされており、これによって返されるエンティティセレクション内でエンティティは類似度順にソートされます。 例: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - // デフォルト順、最初のエンティティは最も類似したもの +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + 同じベクトルがクエリ文字列内に複数回出現した場合、order by は最初のものの結果に適用されます。例: ```4d var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc"; / - {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 は order by に使用されます。 + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by ``` 詳細については[以下の例題](#例題-4-2)を参照してください (例題 4 と 5)。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md index 09763adf955435..985225e8315173 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md @@ -58,6 +58,14 @@ title: 制御フロー End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + 上記の結果はほぼ同じで、*MethodB* は必要な場合にのみ評価されます。 > **注記:** [三項演算子](../dt_boolean.md#三項演算子) を使うことで、条件式を 1行で書くことができ、[If...Else](../cf_branching.md#ifelseend-if) 文を置き換えることもできます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md index 31b4ade55aeb9a..78284f4af38967 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md @@ -1249,15 +1249,21 @@ var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) **order by** 宣言はクエリ文字列でサポートされており、これによって返されるエンティティセレクション内でエンティティは類似度順にソートされます。 例: ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - // デフォルト順、最初のエンティティは最も類似したもの +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc"; $comparisonVector) + //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + 同じベクトルがクエリ文字列内に複数回出現した場合、order by は最初のものの結果に適用されます。例: ```4d var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField desc"; / - {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 は order by に使用されます。 + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by ``` 詳細については[以下の例題](#例題-4-2)を参照してください (例題 4 と 5)。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md index 09763adf955435..985225e8315173 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md @@ -58,6 +58,14 @@ title: 制御フロー End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + 上記の結果はほぼ同じで、*MethodB* は必要な場合にのみ評価されます。 > **注記:** [三項演算子](../dt_boolean.md#三項演算子) を使うことで、条件式を 1行で書くことができ、[If...Else](../cf_branching.md#ifelseend-if) 文を置き換えることもできます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md index 09763adf955435..985225e8315173 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md @@ -58,6 +58,14 @@ title: 制御フロー End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + 上記の結果はほぼ同じで、*MethodB* は必要な場合にのみ評価されます。 > **注記:** [三項演算子](../dt_boolean.md#三項演算子) を使うことで、条件式を 1行で書くことができ、[If...Else](../cf_branching.md#ifelseend-if) 文を置き換えることもできます。 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md index 97c5b5f18c5b72..cd7b19859804d8 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -1248,6 +1248,12 @@ var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: ```4d diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md index 7368323fee01ef..97822a26710474 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_collection.md @@ -110,6 +110,43 @@ Pode criar dois tipos de coleções: Para obter mais informações, consulte a seção [Objetos e coleções compartilhados](shared.md). +## Assignment + +Collection and [object](./dt_object.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning a collection to a variable (e.g. `$myVar:=[1;2;3]`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original collection is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +Por exemplo: + +```4d +var $col1; $col2 : Collection +var $o : Object + +$col1:=[1;2;3] //a reference to the collection is created +$col2:=$col1 //both variables share the same collection reference +$o:={ list:$col1 } //the object stores a reference to the same collection + +$col1.push(4) +//$col2 = [1,2,3,4] +//$o = {"list":[1,2,3,4]} + +$col2[0]:=10 +//$col1 = [10,2,3,4] +//$o = {"list":[10,2,3,4]} + +$o.list.push(5) +//$col1 = [10,2,3,4,5] +//$col2 = [10,2,3,4,5] + +ASSERT($col1=$col2) //True +``` + +This principle applies wherever objects or collections are assigned, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of a collection, use the [`collection.copy()`](../API/CollectionClass.md#copy) function. + +::: + ## Funções de Collection As referências de coleções 4D se beneficiam de funções de classe especiais (às vezes denominadas *funções de membro*). As funções da coleção estão listadas na seção [Referência de API de classe](../API/CollectionClass.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_object.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_object.md index f9c29a65ce245d..11e2be982f5999 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_object.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_object.md @@ -28,7 +28,7 @@ Tenha em atenção que os nomes das propriedades diferenciam entre maiúsculas e ::: -Pode gerenciar variáveis, campos ou expressões do tipo Objeto usando a [notação do objeto](#properties) padrão ou os comandos disponíveis no tema **Objetos (Idioma)**. Observe que comandos específicos do tema **Queridos** como `QUERY BY ATTRIBUTE`, `QUERY SELECÇÃO BY ATTRIBUTE`, ou `ORDER BY ATTRIBUTE` podem ser usados para realizar processamento em campos de objeto. +Pode gerenciar variáveis, campos ou expressões do tipo Objeto usando a [notação do objeto](#properties) padrão ou os comandos disponíveis no tema **Objetos (Idioma)**. Cada valor de propriedade acessado através da notação de objeto é considerado uma expressão. Quando a notação de objeto for ativada em seu banco de dados (ver abaixo), pode usar esses valores sempre que expressões 4D forem esperadas: @@ -114,6 +114,36 @@ Pode criar dois tipos de objetos: - objetos compartilhados, usando o comando [`New shared object`](../commands/new-shared-object). Estes objetos podem ser compartidos entre processos, incluidos os threads preemptivos. O acesso a esses objetos é controlado pelas estruturas `Use...End use`. Para obter mais informações, consulte a seção [Objetos e coleções compartilhados](shared.md). +## Assignment + +Object and [collection](./dt_collection.md) data types are handled in the 4D language through **references** (i.e., internal pointers), unlike scalar data types (integer, date, etc.). As a result, when assigning an object or a collection to a variable (e.g. `$myVar:={ a:2 }`), it is the **reference** that is assigned, not the value itself. Any subsequent modification of the *$myVar* variable will therefore be reflected everywhere the original object is referenced. This follows the same principle as [pointers](./dt_collection.md), except that the *$myVar* variable does not need to be dereferenced. + +Por exemplo: + +```4d +var $o1; $o2 : Object +var $col : Collection + +$col:=[1;2;3] //a reference to the collection is created +$o1:={ a:2 ; b:$col } //a reference to the object is created +$o2:=$o1 //both variables $o1 and $o2 share the reference to the same object + +$o1.a:=10 //$o2 = {"a":10,"b":[1,2,3]} +$o2.a:=20 //$o1 = {"a":20,"b":[1,2,3]} +$col.push(4) +//$o1 = {"a":20,"b":[1,2,3,4]} +//$o2 = {"a":20,"b":[1,2,3,4]} +ASSERT($o1=$o2) //True +``` + +This principle applies wherever objects or collections are used, including in [parameters](./parameters.md) or [formula](../commands/formula) expressions. + +:::note + +If you want to create a **deep copy** of an object, use the [`OB COPY`](../commands/ob-copy) command. + +::: + ## Properties {#properties} Você acessa os valores de propriedade do objeto por meio de uma cadeia de tokens. As propriedades do objeto podem ser acessadas de duas maneiras: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/flow-control.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/flow-control.md index f9a89a20669377..75ba15ea050e37 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/flow-control.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/flow-control.md @@ -58,6 +58,14 @@ A expressão é TRUE apenas se ambos os métodos forem TRUE. No entanto, mesmo s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + O resultado é semelhante e *MethodB* é avaliado apenas se necessário. > **Nota:** O [operador ternário](operators.md#ternary-operator) permite escrever expressões condicionais de uma linha e pode substituir uma sequência completa de instruções If..Else. @@ -808,3 +816,24 @@ logConsole($message) ``` +## defer (expression) + +
História + +| Release | Mudanças | +| ------- | ---------- | +| 21 R4 | Adicionado | + +
+ +The [`defer`](../commands/defer) command allows you to stack one or more expression(s) that will automatically execute when the current method or function **finishes running**. + +Whether you are managing document closings, resetting interprocess flags, or freeing up resources, ensuring that your housekeeping tasks execute flawlessly no matter how or where your function terminates can be handled by `defer` keywords. + +```4d + //make sure some code is executed at exit +defer(myCleaningMethod) + //Do something... +``` + +See the [`defer`](../commands/defer) command description for more information. \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/methods.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/methods.md index d0bd1d4a51e54a..1f1dc831d477c0 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/methods.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/methods.md @@ -13,13 +13,13 @@ O tamanho máximo de um método de projecto é limitado a 2 GB de texto ou 32.00 Na Linguagem 4D, existem várias categorias de métodos. A categoria depende da forma como podem ser chamados: -| Tipo | Contexto de chamada | Aceita parâmetros | Descrição | -| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Métodos projeto** | On demand, when the project method name [is called](../Project/project-method-properties.md) | Sim | Pode conter qualquer código para executar ações personalizadas Quando um método projeto for criado, se torna parte parte da linguagem do banco de dados na qual foi criado. | -| **Método objeto (widget)** | Automático, quando um evento envolve a forma a que o método está ligado | Não | Propriedade de um objecto de formulário (também chamado widget) | -| **Método formulário** | Automático, quando um evento envolve o objecto ao qual o método está ligado | Não | Propriedade de um formulário. Pode-se utilizar um método de formulário para gerir dados e objectos, mas é geralmente mais simples e mais eficiente utilizar um método de objecto para estes fins. | -| **Trigger** (o *método tabla*) | Automático, cada vez que manipula os registos de uma tabela (Adicionar, Apagar e Modificar) | Não | Propriedade de uma tabela. Os gatilhos/triggers são métodos que podem prevenir operações "ilegais" com os registos da sua base de dados. | -| **Método base** | Automático, quando ocorre um evento de sessão de trabalho | Sim (pré-definido) | Existem 16 métodos base em 4D. | -| **Class** | Automatically called when an object of the class is instantiated or when a function of the class is executed on an object instance in any other methods or in a [database field](../Develop/field-properties.md#class). | yes (class functions) | A **Class** is used to declare and configure the class [constructor](./classes.md#class-constructor), [properties](./classes.md#property), and [functions](./classes.md#function) of objects. Veja [**Classes**](classes.md) | +| Tipo | Contexto de chamada | Aceita parâmetros | Descrição | +| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Métodos projeto** | On demand, when the project method name [is called](../Project/project-method-properties.md) | Sim | Pode conter qualquer código para executar ações personalizadas Quando um método projeto for criado, se torna parte parte da linguagem do banco de dados na qual foi criado. | +| **Método objeto (widget)** | Automático, quando um evento envolve a forma a que o método está ligado | Não | Propriedade de um objecto de formulário (também chamado widget) | +| **Método formulário** | Automático, quando um evento envolve o objecto ao qual o método está ligado | Não | Propriedade de um formulário. Pode-se utilizar um método de formulário para gerir dados e objectos, mas é geralmente mais simples e mais eficiente utilizar um método de objecto para estes fins. | +| **Trigger** (o *método tabla*) | Automático, cada vez que manipula os registos de uma tabela (Adicionar, Apagar e Modificar) | Não | Propriedade de uma tabela. Os gatilhos/triggers são métodos que podem prevenir operações "ilegais" com os registos da sua base de dados. | +| **Método base** | Automático, quando ocorre um evento de sessão de trabalho | Sim (pré-definido) | Existem 16 métodos base em 4D. | +| **Class** | Automatically called when an object of the class is instantiated or when a function of the class is executed on an object instance in any other methods or in a [database field](../Develop/field-properties.md#class). | yes (class functions) | A **Class** is used to declare and configure the class [constructor](./classes.md#class-constructor), [properties](./classes.md#property), and [functions](./classes.md#function) of objects. See [**Classes**](classes.md) and [**Function** class](../API/FunctionClass.md). | diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/operators.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/operators.md index 9494e03c367619..0d9e52e2cc87dc 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/operators.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/operators.md @@ -21,10 +21,12 @@ Os valores que os operadores afectam são os operandos. Na expressão `1 + 2`, o O **operador de atribuição** (`a:=b`) inicializa ou atualiza o valor de `a` com o valor de `b`: ```4d -$myNumber:=3 //atribui 3 à variável MyNumber -$myDate:=!2018/01/21! //atribui um literal de data -$myLength:=Length("Acme") //atribui o resultado do comando (4) a $myLength -$col:=New collection //$col é inicializado com uma coleção vazia +$myNumber:=3 //assigns 3 to $myNumber variable +$myDate:=!2026/01/21! //assigns a date literal +$myLength:=Length("Acme") //assigns the result of the command (4) to $myLength +$col:=New collection //$col is initialized with an empty collection +$myObject:={ a:2 ; b:$col } //assigns an object reference to $myObject +$myObject.a:=3 //assigns a value to an object property ``` > NÃO confunda o operador de atribuição `:=` com o operador de comparação de igualdade `=`. Um operador de atribuição diferente (e não `=`) foi escolhido deliberadamente para evitar problemas e confusões que geralmente ocorrem com == ou === em outras linguagens de programação. Esses erros são geralmente difíceis de reconhecer pelo compilador e geram problemas trabalhosos. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index cdf9c06fff7851..95f6d84ac4c421 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -3,6 +3,14 @@ id: updates title: Notas de lançamento --- +## 4D 21 R4 + +Leia [**O que há de novo no 4D v21 R4**](https://blog.4d.com/whats-new-in-4d-21-r4/), o post do blog que lista todos os novos recursos e aprimoramentos em 4D v21 R4. + +#### Destaques + +- New [`defer`](../commands/defer) command to declare some code to be always executed at method or function exit. + ## 4D 21 R3 Leia [**O que há de novo no 4D v21 R3**](https://blog.4d.com/whats-new-in-4d-21-r3/), o post do blog que lista todos os novos recursos e aprimoramentos em 4D v21 R3. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md index ffe82075aa8a2a..5015e31b9be839 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/flow-control.md @@ -59,6 +59,14 @@ A expressão é TRUE apenas se ambos os métodos forem TRUE. Entretanto, mesmo s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + O resultado é parecido mas o _MethodB_ é avaliado somente se necessário. > **Nota:** o [operador ternário](operators.md#ternary-operator) permite escrever expressões condicionais de uma linha e pode substituir uma sequência completa de instruções If.. Else. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md index 420b31f7bedd4e..7fbdcfd8a3d976 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/API/DataClassClass.md @@ -1246,6 +1246,12 @@ var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: ```4d diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md index f9a89a20669377..df915590e5850e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/Concepts/flow-control.md @@ -58,6 +58,14 @@ A expressão é TRUE apenas se ambos os métodos forem TRUE. No entanto, mesmo s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + O resultado é semelhante e *MethodB* é avaliado apenas se necessário. > **Nota:** O [operador ternário](operators.md#ternary-operator) permite escrever expressões condicionais de uma linha e pode substituir uma sequência completa de instruções If..Else. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md index 1aee0b96165337..ff33a1384ce429 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/API/DataClassClass.md @@ -1248,6 +1248,12 @@ var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField desc //the first entity is the most similar ``` +:::note + +The default order is ascending, although a descending order is usually the most useful for vector similarity queries. Thus, you will usually have to add the `desc` keyword in your vector similarity query strings. + +::: + If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: ```4d diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md index f9a89a20669377..df915590e5850e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/Concepts/flow-control.md @@ -58,6 +58,14 @@ A expressão é TRUE apenas se ambos os métodos forem TRUE. No entanto, mesmo s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + O resultado é semelhante e *MethodB* é avaliado apenas se necessário. > **Nota:** O [operador ternário](operators.md#ternary-operator) permite escrever expressões condicionais de uma linha e pode substituir uma sequência completa de instruções If..Else. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md index f9a89a20669377..df915590e5850e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/flow-control.md @@ -58,6 +58,14 @@ A expressão é TRUE apenas se ambos os métodos forem TRUE. No entanto, mesmo s End if ``` +However, the most elegant solution is then to use the [`&&` short-circuit operator](./operators.md#short-circuit-and-operator-) and to write: + +```4d +If (MethodA && MethodB) + ... +End if +``` + O resultado é semelhante e *MethodB* é avaliado apenas se necessário. > **Nota:** O [operador ternário](operators.md#ternary-operator) permite escrever expressões condicionais de uma linha e pode substituir uma sequência completa de instruções If..Else.