API 瀏覽權限

本頁面說明在核心 Blockly 中呼叫函式及存取屬性的最佳做法。這些原則適用於建立 Blockly 的外掛程式,以及將 Blockly 整合至獨立應用程式。

顯示設定

我們使用 TypeScript 存取修飾符,將核心程式庫中的可見度標示為 publicprivateprotected。部分屬性可能會在 TsDoc 註解中加上 @internal 註解。

所有 publicprotected 屬性都記載於 Blockly 網站的「參考資料」一節。您也可以透過閱讀程式碼來檢查可見度。

公開

標示為 public 的項目皆屬於我們的公開 API。模組中任何沒有瀏覽權限修飾符的屬性都會視為公開。

我們會盡量避免頻繁變更公開 API,或在沒有充分理由和警告的情況下變更。例外狀況:我們可能會在某個版本中公開新的 API,並在下一個版本中根據早期意見回饋進行修改。之後,您可以將公開函式或屬性視為穩定。

公開函式可從任何位置呼叫,並在子類別中覆寫,前提是簽名不會變更。

受保護

只有定義類別或子類別可以存取受保護的函式和屬性。

子類別可以覆寫受保護的函式和屬性,而不需要變更類型簽名。

舉例來說,擴充基本轉譯器類別的自訂轉譯器可能會存取其受保護的屬性。

在每個情況下,您都應確保瞭解函式或屬性在其餘程式碼中的作用方式。

不公開

這些定義只能由定義所在檔案中的程式碼存取。直接存取這些屬性可能會導致未定義的行為。

子類別不得覆寫私人函式和屬性。

私人資源可能會在未發出警告的情況下變更,因為這些資源不屬於 Blockly 的公開 API。

Blockly 中的部分函式沒有可見度註解,因為這些函式並未從模組匯出。這些函式基本上是本機變數,無法在定義模組之外使用。應視為等同於私人財產。

內部

內部函式和屬性應在核心程式庫中使用,而非在外部使用。這些屬性會以 TsDoc @internal 註解指定。

內部屬性如有變更,恕不另行通知,因為這些屬性不屬於 Blockly 的公開 API。

內部屬性可從核心內的任何位置存取,只要簽章不變,即可在核心的子類別中覆寫。不得從核心程式庫以外的地方存取。

已淘汰

請勿使用標示為 @deprecated 的任何項目。大多數的淘汰項目都會在主控台警告或 TSDoc 中,提供關於偏好程式碼的指示。

在可行情況下,已淘汰的函式會記錄警告,其中包含預期刪除日期,以及建議的替換函式呼叫。

常見問題

以下是 Blockly 團隊遇到的一些常見問題。

如果我要使用的函式不是公開的,該怎麼辦?

請針對核心 Blockly 提出功能要求。請說明用途,並說明您希望我們公開哪些資訊。

我們會使用這項功能來要求討論,是否要將資訊公開,或是否有其他方式可以取得相同資訊。

如果我們決定公開,您或 Blockly 團隊會進行適當變更,並在下一個 Blockly 版本中生效。

如果您選擇在外掛程式中使用非公開成員,請考慮將外掛程式標示為 Beta 版,並在 README 中加入相關資訊。

那麼猴子補丁呢?

閱讀monkeypatching相關說明。

猴子修補是不安全的,因為修補程式可能會使用 Blockly API 的非公開部分,因此會在未發出通知的情況下停止運作。在外掛程式中修補特別危險,因為您的程式碼可能會與任何其他使用相同程式碼的猴子補丁外掛程式互動不良。因此,我們強烈建議您不要在應用程式和第三方外掛程式中使用猴子修補,且不會接受第一方外掛程式中的猴子修補。

我可以覆寫 public 函式嗎?

在子類別中:是。否則:不,那是猴子修補。

我可以覆寫受保護的函式嗎?

在子類別中:是。否則:不,那是猴子修補。

我可以覆寫內部或私人函式嗎?

不,那是猴子補丁。

何時可以直接存取資源?何時該使用 getter 或 setter?

如果我們發布 getter 或 setter,請使用該函式,而非直接存取屬性。如果屬性不是公開的,請務必使用 getter 和 setter。

如果資源沒有註解,該怎麼辦?

預設為公開,但如果我們想為您放置 getter/setter 組合,請與我們聯絡。

如果函式沒有註解,該怎麼辦?

預設為公開。

如果我還是不確定該怎麼做,該怎麼辦?

請在論壇上發問,我們會在幾天內回覆您。