From 75d903fbb73ffb66670203290da6a77acec22828 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:31 +0200 Subject: [PATCH 01/76] updates.md French --- .../current/Notes/updates.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From f38e610d084eac26179e8b90e0eb9e36cecd43c5 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:33 +0200 Subject: [PATCH 02/76] updates.md Spanish --- .../current/Notes/updates.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From bf6e28468e1e8535a2376d01b6f601c269dcd438 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:36 +0200 Subject: [PATCH 03/76] updates.md Japanese --- .../current/Notes/updates.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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 の新機能と拡張機能をすべてリストアップしたブログ記事です。 From 7a15a332ad15c8ee69a31b11aa31075dab8cc1c2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:38 +0200 Subject: [PATCH 04/76] updates.md Portuguese, Brazilian --- .../current/Notes/updates.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From fcc10b36edf30f0b5b35cb46d75ade078f6a93e6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:45 +0200 Subject: [PATCH 05/76] datastoreclass.md Japanese --- .../version-20/API/DataStoreClass.md | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) 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| +||||引数を必要としません|
From 50111596675100834577aa17e5afe36be92983b5 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:48 +0200 Subject: [PATCH 06/76] entityclass.md Japanese --- .../version-20/API/EntityClass.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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|
From 65dc3d0ff62ebc862095606203dfba84879c2dd3 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:16:50 +0200 Subject: [PATCH 07/76] pop3transporterclass.md Japanese --- .../version-20/API/POP3TransporterClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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|
From 534e7bdc40ea12f22254e29d0a08bb24da6c92ee Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:02 +0200 Subject: [PATCH 08/76] entityselectionclass.md Japanese --- .../version-20/API/EntitySelectionClass.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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|
From f4d3ca6d2f1131d518701628f3d25ff80ad65ae1 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:05 +0200 Subject: [PATCH 09/76] fileclass.md Japanese --- .../version-20/API/FileClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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|
From 3c7c090c0ebea417d0ecc49c6dc7a230fab0e419 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:09 +0200 Subject: [PATCH 10/76] sessionclass.md Japanese --- .../version-20/API/SessionClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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|
From 46f8bb0c3c15214b35067cbfa714c88f615e84a6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:19 +0200 Subject: [PATCH 11/76] flow-control.md French --- .../version-20/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From b09b5ce51bc25831ec2bac49b7dcdec5fecbf573 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:25 +0200 Subject: [PATCH 12/76] dataclassclass.md French --- .../current/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 ``` From b7736d00928639dec305f61d345f8a01b3b34067 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:28 +0200 Subject: [PATCH 13/76] classes.md French --- .../current/Concepts/classes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 |
From 8390c95d2cf60c4db1c830359be07802ddea4fbe Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:30 +0200 Subject: [PATCH 14/76] dt_collection.md French --- .../current/Concepts/dt_collection.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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) . From c4f6df6a418685b0e2577f97be7158775e4c63ce Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:32 +0200 Subject: [PATCH 15/76] dt_object.md French --- .../current/Concepts/dt_object.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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 : From d2353045e3235766cef95c40d08dd25c610fd9ca Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:35 +0200 Subject: [PATCH 16/76] flow-control.md French --- .../current/Concepts/flow-control.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 From f016c704f792c79670a9f1a02b020bf576206492 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:37 +0200 Subject: [PATCH 17/76] methods.md French --- .../current/Concepts/methods.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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). | From 6b6054167f5e64d23fc318e9428836b3e1147c8c Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:39 +0200 Subject: [PATCH 18/76] operators.md French --- .../current/Concepts/operators.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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. From 135196590f6231315ef46bdc38e20e267c5f1799 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:42 +0200 Subject: [PATCH 19/76] classes.md French --- .../version-21/Concepts/classes.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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. From e01aea66b01a04d258e3dde9a54ff52814714cbb Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:46 +0200 Subject: [PATCH 20/76] flow-control.md French --- .../version-21/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From d8fac46e8d182bb4a076729f19233146bb456bb7 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:52 +0200 Subject: [PATCH 21/76] cs.md French --- .../version-21/commands/cs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From ff3d0818b9e1083801a4a71dd27b116a2fd1a04b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:56 +0200 Subject: [PATCH 22/76] dataclassclass.md French --- .../version-21-R2/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 ``` From 160085e6b5df4dde1ab9628395e0d57fe37ae193 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:17:59 +0200 Subject: [PATCH 23/76] classes.md French --- .../version-21-R2/Concepts/classes.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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. From 1ff97a72bc6f6b13b38e561155ab5c1d6931e3d3 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:03 +0200 Subject: [PATCH 24/76] flow-control.md French --- .../version-21-R2/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 478ee17d42305393ec62083084708995d2982233 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:09 +0200 Subject: [PATCH 25/76] cs.md French --- .../version-21-R2/commands/cs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From 2340fa0d45a7482c6770ded39058babda1eadc8f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:13 +0200 Subject: [PATCH 26/76] dataclassclass.md French --- .../version-21-R3/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 ``` From c2df4b1f0aeb219b07cc0e4bcef537149e51a968 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:16 +0200 Subject: [PATCH 27/76] classes.md French --- .../version-21-R3/Concepts/classes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 |
From 75e24009ec1b9c3c238bd725074ad2d3ad9ded50 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:20 +0200 Subject: [PATCH 28/76] flow-control.md French --- .../version-21-R3/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 11cb766947f266a34bafcd3ded197ebe8aed20f7 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:30 +0200 Subject: [PATCH 29/76] flow-control.md Spanish --- .../version-20/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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.. From 3f84439e278d301c92d32515f5e48f0f606c1ed5 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:36 +0200 Subject: [PATCH 30/76] dataclassclass.md Spanish --- .../current/API/DataClassClass.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 From f83dfd9080d14d9297bdb4f918eff4779a5adf7a Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:38 +0200 Subject: [PATCH 31/76] dt_collection.md Spanish --- .../current/Concepts/dt_collection.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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). From b7fa0ffe252430721a00d8bd99d987b1a5d9d4d4 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:40 +0200 Subject: [PATCH 32/76] dt_object.md Spanish --- .../current/Concepts/dt_object.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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: From 2e331b94eb1c097dc58dba3b9c519df53a904ff2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:43 +0200 Subject: [PATCH 33/76] flow-control.md Spanish --- .../current/Concepts/flow-control.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 From 88343b08f867d6d95626c6c46b86cc3f5cfd3e41 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:45 +0200 Subject: [PATCH 34/76] methods.md Spanish --- .../current/Concepts/methods.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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). | From 25a786063bf1b1a320b62d75e48ff371ab60b207 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:47 +0200 Subject: [PATCH 35/76] operators.md Spanish --- .../current/Concepts/operators.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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. From b72607db1b9a93ec157d51c1a396495a88e7e1cf Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:51 +0200 Subject: [PATCH 36/76] flow-control.md Spanish --- .../version-21/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From d6f259c443c53e8281216d9288f10e7d87329ad2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:18:59 +0200 Subject: [PATCH 37/76] dataclassclass.md Spanish --- .../version-21-R2/API/DataClassClass.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 From 8c1c1cbe33bf5f7543dafa601352bbad8aaa7a20 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:03 +0200 Subject: [PATCH 38/76] flow-control.md Spanish --- .../version-21-R2/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 0b022aacc1c994c7b71d2dfcf9cfa0f9d61d3803 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:10 +0200 Subject: [PATCH 39/76] dataclassclass.md Spanish --- .../version-21-R3/API/DataClassClass.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 From 2df8e20d7d99c8067036ef5ec7d921dbec3201a7 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:13 +0200 Subject: [PATCH 40/76] flow-control.md Spanish --- .../version-21-R3/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From bc3acb0685d0acc09a9f5178debdcb637c6fea53 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:20 +0200 Subject: [PATCH 41/76] folderclass.md Japanese --- .../version-20/API/FolderClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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|
From 3ebbc8147cecf62879e40b5d5b8d2661fbf91a96 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:23 +0200 Subject: [PATCH 42/76] imaptransporterclass.md Japanese --- .../version-20/API/IMAPTransporterClass.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 |
From dc337f5992b15315e39234ffdf23b7ba1627a16b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:25 +0200 Subject: [PATCH 43/76] transporter.md Japanese --- .../version-20/API/Transporter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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|
From 463b7b78196e96f7cf04a3e016087badf3977659 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:27 +0200 Subject: [PATCH 44/76] flow-control.md Japanese --- .../version-20/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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) 文を置き換えることもできます。 From 0a248ad9831cdb4603b715aef0101e117e5eae39 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:33 +0200 Subject: [PATCH 45/76] dataclassclass.md Japanese --- .../current/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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)。 From 5325120c92e7fc883f28e66262b479e3fc1c36a6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:35 +0200 Subject: [PATCH 46/76] dt_collection.md Japanese --- .../current/Concepts/dt_collection.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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) にまとめられています。 From 9440c1ee66579da162143b5f49d4bf13c05115f8 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:38 +0200 Subject: [PATCH 47/76] dt_object.md Japanese --- .../current/Concepts/dt_object.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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} オブジェクトのプロパティ値には、トークンのチェーンを通してアクセスします。 オブジェクトプロパティは二通りの方法でアクセスすることができます: From 8c6500e69d4c9460aedb46bd08192157e2e48fec Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:40 +0200 Subject: [PATCH 48/76] flow-control.md Japanese --- .../current/Concepts/flow-control.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 From 4ef719b5c801dcac8241b6c9bf747199e3ff1ce8 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:42 +0200 Subject: [PATCH 49/76] methods.md Japanese --- .../current/Concepts/methods.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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). | From b1be24a46a7ec455c90241ae6195121604f82320 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:44 +0200 Subject: [PATCH 50/76] operators.md Japanese --- .../current/Concepts/operators.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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 ``` > 代入演算子 `:=` と等号比較演算子 `=` とを混同しないように注意してください。 `=` とは異なる代入演算子が採用されたのは意図的なことで、他のプログラミング言語で == や === の使用によって度々起こる間違いを避けるためです。 このような間違いはコンパイラーにとっても発見しにくく、時間を消耗するトラブルシューティングのもとです。 From 3ab4b72a8a1fca4e4ef56f49e5645d1463150b9f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:48 +0200 Subject: [PATCH 51/76] flow-control.md Japanese --- .../version-21/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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) 文を置き換えることもできます。 From c978ba382ebd761b62ec024e391f45ef361090d2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:55 +0200 Subject: [PATCH 52/76] dataclassclass.md Japanese --- .../version-21-R2/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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)。 From 3b9d069132a0b1cef93461dba2a4f8d581f35693 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:19:59 +0200 Subject: [PATCH 53/76] flow-control.md Japanese --- .../version-21-R2/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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) 文を置き換えることもできます。 From 24c9adb31fd32fdb132b8ebdde3d5e8b080240ec Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:05 +0200 Subject: [PATCH 54/76] dataclassclass.md Japanese --- .../version-21-R3/API/DataClassClass.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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)。 From 640900257271465dccd4993651f8c05447ca4aec Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:09 +0200 Subject: [PATCH 55/76] flow-control.md Japanese --- .../version-21-R3/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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) 文を置き換えることもできます。 From f2c7604f3307001a24e5a4b3d0785df6a07e94fb Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:20 +0200 Subject: [PATCH 56/76] flow-control.md Portuguese, Brazilian --- .../version-20/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 3db95fe7101ae76c4d80b6f6a0e4821ad1a525b2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:26 +0200 Subject: [PATCH 57/76] dataclassclass.md Portuguese, Brazilian --- .../current/API/DataClassClass.md | 6 ++++++ 1 file changed, 6 insertions(+) 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 From d48e8eee95c9b95f7bf6016ddd3e141fbab4372f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:28 +0200 Subject: [PATCH 58/76] dt_collection.md Portuguese, Brazilian --- .../current/Concepts/dt_collection.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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) From 2b8e7c740e182e3267a0860f2fdf29423fbcfe39 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:30 +0200 Subject: [PATCH 59/76] dt_object.md Portuguese, Brazilian --- .../current/Concepts/dt_object.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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: From da0c794b1c3b1ce8552e9c474908b3f18dfff5c0 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:33 +0200 Subject: [PATCH 60/76] flow-control.md Portuguese, Brazilian --- .../current/Concepts/flow-control.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 From 62eea198355f3187f4a97a2e8651e144bd67c1fc Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:35 +0200 Subject: [PATCH 61/76] methods.md Portuguese, Brazilian --- .../current/Concepts/methods.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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). | From 59a0cf9f8091b0e2de213d1f4659a25eaad0fa97 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:38 +0200 Subject: [PATCH 62/76] operators.md Portuguese, Brazilian --- .../current/Concepts/operators.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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. From 2b85f2eded332f6075509786dd6d110df0ac99fc Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:41 +0200 Subject: [PATCH 63/76] flow-control.md Portuguese, Brazilian --- .../version-21/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 62f3c70167d7bcbd37bd69850e5585a25d031ee8 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:49 +0200 Subject: [PATCH 64/76] dataclassclass.md Portuguese, Brazilian --- .../version-21-R2/API/DataClassClass.md | 6 ++++++ 1 file changed, 6 insertions(+) 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 From 0007ac295a1357d9ccbe124a9250ca7d6c209536 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:52 +0200 Subject: [PATCH 65/76] flow-control.md Portuguese, Brazilian --- .../version-21-R2/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 4a3a073f307536f7117cd3d4711249bfbce1a9a1 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:20:59 +0200 Subject: [PATCH 66/76] dataclassclass.md Portuguese, Brazilian --- .../version-21-R3/API/DataClassClass.md | 6 ++++++ 1 file changed, 6 insertions(+) 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 From 95b1bafcdbe69c8612111d32ea6960bccc60fd2d Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Jun 2026 22:21:03 +0200 Subject: [PATCH 67/76] flow-control.md Portuguese, Brazilian --- .../version-21-R3/Concepts/flow-control.md | 8 ++++++++ 1 file changed, 8 insertions(+) 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. From 10fdf7e93ab0bda68f55ab9435d02b7abcd3d0e7 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:40 +0200 Subject: [PATCH 68/76] styled_text.md Spanish --- .../current/commands/theme/Styled_Text.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From 71f2e537b1d3abd7d61dfbb105f1388913a18ea2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:42 +0200 Subject: [PATCH 69/76] system_documents.md Spanish --- .../commands/theme/System_Documents.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) 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 From 30c13b8e249f7a2d7d24a1244f4057f409759047 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:44 +0200 Subject: [PATCH 70/76] web_services_client.md Spanish --- .../current/commands/theme/Web_Services_Client.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From 5d85c034d3cfafda378f2a64204af94347bbe2ca Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:47 +0200 Subject: [PATCH 71/76] web_services_server.md Spanish --- .../current/commands/theme/Web_Services_Server.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 1210168b586120fded66d03bed001f2f7edc790e Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:49 +0200 Subject: [PATCH 72/76] xml.md Spanish --- .../current/commands/theme/XML.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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. ::: From 5ef46373ad39583d2b6a183f08605d45ce158482 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:52 +0200 Subject: [PATCH 73/76] xml_dom.md Spanish --- .../current/commands/theme/XML_DOM.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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. From e657bd1a015247035431a18548012671b6df4143 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:55 +0200 Subject: [PATCH 74/76] xml_sax.md Spanish --- .../current/commands/theme/XML_SAX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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. From b2d9bf35dc18ae1b156d35d3ca3523e81d9fc913 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:11:57 +0200 Subject: [PATCH 75/76] ordering.md Spanish --- .../current/Concepts/ordering.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 From 4d5949ab00c7f0a4b88ca8b249159e381e23ace8 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Jun 2026 11:12:00 +0200 Subject: [PATCH 76/76] ordering.md Spanish --- .../version-21-R3/Concepts/ordering.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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