未定義の値を恐れるな

Deeplからの自動翻訳

4D v16 R4 では、4D 言語に素晴らしい機能強化であるオブジェクト表記を導入しました。この機能は、4Dフォーラムで多くの関心を呼び、お客様から、未定義の値があるためにコードを書くのが困難な状況にあるというフィードバックをたくさんいただきました。

4D v16 R5, では、皆様からのフィードバックを考慮し、未定義のプロパティと値の使用をオブジェクト記法で簡素化しました。

この成果は2つの部分から成っています。1つ目は、4D言語がオブジェクト記法を使った式のどこでも未定義の値を受け入れるようになったことです。2つ目は、未定義の値を変数に代入した場合、その変数の型に応じたデフォルト値(数値なら0、文字列なら””など)が設定されるようになったことです。

未定義のプロパティや値を読み込む

以前のバージョンでは、存在しないオブジェクトのプロパティを読み込むとエラーが発生し、コードの実行が停止していました。現在では、4D v16 R5 、未定義の値が生成されます。

$o.p1.p2のオブジェクトプロパティp2の存在を確認したいが、$o.p1オブジェクトが定義されているかどうかがわからないという例を見てみましょう。

4D v16 R4 では、まず、p1プロパティが定義されているかどうかをチェックし、次にp2 について同じことをする必要があります。

C_OBJECT
($o)
$o :=InitObject
If ($o.p1#Null) // p1 が定義されているかチェック
If ($o.p1.p2#Null) // p2 が定義されているかチェック$o.p1.p2.p3:="some text"

4D v16 R5ではp1が未定義であっても、以下のようなコードを書くだけでOKです・・・。

C_OBJECT($o)
$o :=InitObject
If ($o.p1.p2#Null)// Check immediately if p1 and p2 are defined
$o .p1.p2.p3:="some text"

未定義の値を変換する

TYPE変換コマンドは、未定義の値を受け入れることができます。

その String, Num, Dateおよび Timeコマンドは、未定義の値を受け入れ、その型に応じたデフォルト値を返すようになりました。このコマンド・セットを完成させるために、私たちは新しい Boolコマンドを作成しました。 Falseこのコマンドは、未定義の値を渡すと、その値を返します。このアップデートは、特に4Dコマンドを呼び出すときに便利です。

例えば、4Dコマンドのパラメータにテキスト式を指定する場合、未定義の値を渡すことはできま せん。したがって、4D v16 R4 でこのタイプのコードを書き、4D コマンドを使用する前に、プロパティが存在するかどうかを確認する必要があります。

C_OBJECT


(
$o)
$o :=InitObject
If ($o.p1#Null)// Check if p1 is defined
If $o ( .p1.p2#Null)// If p1 is defined, you can now check if p2 is definedREAD PICTURE FILE (
$o.p1.p2;$i)else
READ PICTURE FILE ("";$i)
End if
End if

4D v16 R5 では、以下のコードを書くだけです。この Stringコマンドは、未定義の値をチェックし、変換してくれます。これで、4行のコードが必要だったのが、1行で済みます!

C_OBJECT($o)
$o :=InitObject
// If $0.p1.p2 is undefined, String return "" and READ PICTURE FILE command opens standard Open file dialog box.
READ PICTURE FILE (String($o.p1.p2);$i)

未定義の値を代入する

これ以降、変数に未定義の値を代入すると、その変数の型のデフォルト値(数値なら0、文字列なら””など)が設定されます。

C_LONGINT($l)
$l :=10
$l :=$o.undefined
// In 4D v16 R4, $l does not change, $l=10
// In 4D v16 R5, $l is reinitialized, $l=0

実は、未定義の値もプロジェクトのメソッドにパラメータとして渡すことができるようになりました。これは全く同じように動作します。値は宣言されたパラメータ型に従って直ちに変換され、そのデフォルトの型値に設定されます。

最後に、未定義の値を Case ofIf ステートメントに渡すこともできます。この場合、4Dは未定義の値を次のように見なします。 False:

If ( .$ob) ..
// if $o.b is undefined this code is not executed
.
End if

詳しくは、オブジェクト記法を使うをご覧ください。

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。