共有クラス

Deeplからの自動翻訳

古典的なオブジェクト構文に従い、必要なときに自動的にuse/end useを呼び出す、シンプルな共有オブジェクトの使い方をお望みですか?

シートベルトを締めてください。共有クラスの登場です!

共有クラスの作成と管理

4D 20 R5では、新しいコンセプトが追加されました:共有クラスです。

共有クラスは、共有オブジェクトを作成するためにのみ使用でき、そのため、使用方法がシンプルになります。共有クラスを作成するには、コンストラクタにsharedキーワードを追加するだけです:

//class SharedClass

shared Class constructor()

このクラスの新しいオブジェクトを作成するためにnew()を呼び出すたびに、そのオブジェクトは共有オブジェクトになります。

クラス関数の拡張

sharedキーワードはクラス関数にも使用でき、この関数がオブジェクトを変更することを示します。関数が呼び出されて終了するときに自動的に呼び出されるため、関数の内部で use と end use を呼び出す必要はありません。これは当然シングルトンコンストラクタでも有効です。

shared Function myFunction()

This.attribute:="whatever"

もちろん、sharedキーワードを必要としない関数でsharedキーワードを使用する場合は、オブジェクトを使用しようとする他のプロセスをブロックしないように注意する必要があります。

共有クラスと共有関数を適切に使用することで、共有オブジェクトを通常のオブジェクトと同じように操作できるようになり、コードが簡単になります。

継承に関する注意点

最後に注意しなければならない点は、非共有クラスは共有クラスを継承できますが、共有クラスは非共有クラスを継承できないということです。ですから、オブジェクト・モデルはそれに合わせて計画しましょう。

長い計算をする必要があり、重要なプロセスがブロックされるのを避けるためにワーカーを使いたいとします。しかし、ある時点で計算結果を取得する必要があるのは明らかです。このCalculationResultクラスを使ってみよう:

// class CalculationResult

shared Class constructor()
	
  This.isFinished:=False
	
Function makeCalculation()

  ...
  This.finished:=True
	
shared Function set finished($finished : Boolean)
	
  This.isFinished:=$finished
	
shared Function get finished()->$finished : Boolean
	
  $finished:=This.isFinished

これを使うには、次のようにすればいい:

$calculation:=cs.CalculationResult.new()
CALL WORKER("AnyWorker"; Formula($calculation.makeCalculation()))

While (Not($calculation.isFinished))
  //Code that will be executed while the calculation is in progress
End while 

共有クラスが、アプリケーション全体で共有オブジェクトを使う手助けになれば幸いです。何か質問があれば、遠慮なく4Dフォーラムまで持ってきてください。

Nicolas Brachfogel
- プロダクトオーナー & シニアデベロッパー - Nicolas Brachfogelは、2017年にシニアデベロッパーとして4Dに入社しました(4D Serverとネットワークを担当)。Apple Siliconのリリースを管理するプロダクトオーナーとして、ユーザーストーリーを書いて機能仕様に落とし込み、機能実装が顧客のニーズを満たしているかを確認する役割を担っています。Institut Supérieur d'Informatique Appliquée (INSIA) を卒業した Nicolas は、2001年にソフトウェア開発者としてのキャリアをスタートさせました。JavaとC++で数年間コーディングした後、ゲーム会社のクライアント・サーバー開発を専門に担当。サーバー開発者/アーキテクトとして、多くのゲーム(Dofus Arena、Drakerz、Trivial Pursuit Go!)のサーバーアーキテクチャに携わり、成功を収めてきました。