Blockly API の使用

はじめに

このページでは、関数の呼び出しと API 呼び出しのベスト プラクティスについて説明します。 サポートしています。これらの原則は、アプリケーション用のプラグインの作成、 Blockly を使用するか、Blockly をスタンドアロン アプリに統合すること。

サブクラス化と拡張

Blockly には、次のような機能を追加するための複数のパラダイムがあります。

  • サブクラス(新しいレンダラの作成など)
  • Mixin(ブロック拡張機能やミューテータの追加など)
  • ブロック定義(例: プロシージャ ブロック定義)

このドキュメントでは、3 つのケースはすべて 使用します。

サブクラスの挿入

特定のクラスを置き換えるには、Blockly.inject メソッドを使用します。これらの サブクラスは、基本クラスを拡張するか、それに対応する 行うことができます。

サブクラスをインジェクト メソッドに渡すことができます。

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': CustomMetricsManagerClass
  }
}

または、Blockly.registry を使用してクラスを登録し、 クラスを挿入するレジストリ名を指定します。これは、1 つ以上のデータで ピュア JSON として扱うことができます。

Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', SubClass);

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': 'YOUR_NAME'
  }
}

次のクラスを置き換えることができます。

登録名 インターフェース/基本クラス
blockDragger Blockly.IBlockDragger
connectionChecker Blockly.IConnectionChecker
connectionPreviewer Blockly.IConnectionPreviewer
flyoutsVerticalToolbox Blockly.IFlyout
flyoutsHorizontalToolbox Blockly.IFlyout
metricsManager Blockly.IMetricsManager
renderer Blockly.blockRendering.Renderer
toolbox Blockly.IToolbox

インターフェースの使用について詳しくは、インターフェースのセクションをご覧ください。 ドキュメントをご覧ください

公開設定

TypeScript のアクセス修飾子を使用する コアライブラリの可視性を publicprivateprotected のいずれかとしてマークします。 一部のプロパティには、@internal アノテーションが付けられている場合があります。 TsDoc コメント。

すべての public プロパティと protected プロパティについては、 Blockly ウェブサイトの参照セクションまた、 公開設定を確認してください

公開

public とマークされたものは、Google の公開 API の一部です。モジュール内の任意のプロパティ 可視性修飾子がないオブジェクトは、公開と見なされます。

Google は、公開 API を頻繁に、または正当な理由なく変更しないよう努めています。 警告が表示されます。例外として、新しい API が 1 つのリリースで公開され、 早期のフィードバックに応じて次のリリースで修正する。その後 安定していると見なすことができます

パブリック関数はどこからでも呼び出せます。また、サブクラスで次のようにオーバーライドすることもできます。 署名は変更されません。

保護

保護された関数とプロパティには、定義元のクラスまたは 作成します。

サブクラスは、保護された関数とプロパティをオーバーライドできます。 型シグネチャの変更などです。

たとえば、基本レンダラクラスを拡張するカスタム レンダラは、 保護プロパティです。

いずれの場合も、関数またはプロパティが 使用します。

非公開

これらには、定義と同じファイル内のコードからのみアクセスできます。直接 これらのプロパティにアクセスすると、未定義の動作が発生する可能性があります。

サブクラスで非公開の関数とプロパティをオーバーライドすることはできません。

私有地は、Google が公開しているものではなく、 Blockly の公開 API の一部と見なされます

Blockly の一部の関数には可視性アノテーションがありません。これは、 モジュールからエクスポートされません。これらの関数は基本的にローカル変数で、 定義するモジュール以外では使用できません。データ アナリストは 私有地と同等です。

内部

内部の関数とプロパティは、コアの内部での使用を目的としています。 外部からはアクセスできませんこれらは TsDoc @internal で指定されます。 アノテーション。

内部プロパティは事前の警告なく変更される場合があります。 Blockly の公開 API の一部と見なされます

内部プロパティは、コア内のどこからでもアクセスでき、 サブクラスをコアに含めないでください。結合してはいけません。 アクセスする必要があります。

廃止

@deprecated とマークされたものは使用しないでください。ほとんどのサポートの終了には コンソール警告または TSDoc のいずれかで、優先コードの指示を通知します。

サポートが終了した関数は、可能であれば 削除予定日や、呼び出す置換関数の候補が表示されます。

よくある質問

使用したい関数が公開されていない場合はどうすればよいですか?

機能リクエストの提出 。ユースケースの説明と、 公開を希望する動画を選択します。

Google は、この機能を使用して、公開するのか、または公開すべきかについて相談する 他の方法で同じ情報を得ることができるかどうかです

一般公開が決定した場合には、お客様または Blockly チームが 次の Blockly リリースで公開されます。

プラグインで非公開メンバーを使用する場合は、 プラグインをベータ版として公開し、README に情報を含めます。

では、Monkeypatching についてはどうでしょうか。

Monkeypatching を読む。

Monkeypatch は安全ではありません。パッチが Blockly API の非公開の部分の使用に 直接関わる必要がありますプラグインのパッチ適用は、 特に危険です。なぜなら、コード内の他の依存関係と相互作用し プラグインとして同じコードに monkeypatch を適用します。そのため、Google は アプリケーションとサードパーティ プラグインでの Monkeypatching を ファーストパーティのプラグインでは使用できません。

パブリック関数をオーバーライドできますか?

サブクラス化: ○。それ以外の場合は、Monkeypatching です。

保護された関数をオーバーライドできますか?

サブクラス化: ○。それ以外の場合は、Monkeypatching です。

内部関数や非公開関数をオーバーライドできますか?

いや、これはモンキーパッチ適用だよ。

プロパティに直接アクセスできるのはいつですか?ゲッターとセッターをいつ使用すべきか

ゲッターまたはセッターを公開する場合は、それらを直接使用するのではなく、 表示されます。プロパティがパブリックでない場合は、必ずゲッターを使用する 設定します。

プロパティにアノテーションがない場合

デフォルトでは公開されていますが、公開したいことがある場合に備えて ゲッターとセッターのペアが置き換えられます。

関数にアノテーションがない場合

デフォルトは公開です

判断に迷う場合はどうすればよいですか?

フォーラムで質問する 通常 1 営業日以内にご連絡いたします。