繁體中文
English 简体中文 繁體中文
Methodox 首頁

圖和成員

一個文件包含一個或多個圖,它們列在文件大綱中:文件自身的圖 Document,以及位於其下的其他圖。每個圖都有一個種類,它決定了圖的繪製方式、提供哪些節點,以及執行它意味著什麼。種類名稱顯示在畫布上方,並附有它所屬的類別——Flows · dataflow、Routine · procedural——其中 dataflow(資料流)表示值沿著連線流動,節點在需要其結果時執行;procedural(過程式)表示步驟一個接一個地執行;declarative(宣告式)表示圖描述某樣東西,而不是逐步計算它;definition(定義)則描述一個型別。

種類

種類 類別 說明
Flows dataflow 自由形式的畫布。值沿著連線傳遞,執行時會執行標記為 active 的節點及其所依賴的一切。它是日常用於探索和組裝的工作區域。
Function dataflow 可以被其他影像節點一樣呼叫的圖:一個 Input 節點、一個 Output 節點,兩者之間的每個節點都會執行。
Components dataflow 以資料流定義的物件:每個沒有被其他節點接收的輸出都會成為該物件的一個欄位,建立一個這樣的物件就是執行該圖。
Events procedural 由應用程式框架呼叫的回撥——Start、每一幀的更新,以及框架提供的其餘回撥。
Routine procedural 按順序執行的步驟:一個 Begin、沿執行連線排列的語句,以及 Return。迴圈和分支都在這裡。
StateMachine declarative 由具名轉換連線起來的各個狀態,每個轉換都由一個條件把守。每個狀態的行為本身就是一個圖,而狀態機的資料成員是各狀態共享的內容。一次執行會進入第一個狀態,執行它,然後沿第一個條件成立的轉換繼續。
Constructs declarative 由建構函式和工廠組裝而成的物件樹,沒有副作用——它是一份供其他圖讀取的描述。
Type definition 你自己的資料結構:資料成員,以及作為其方法的 Function 或 Routine 圖。它不會單獨執行;其他圖會建立它的例項。

新增圖

按 Ctrl+T,或按文件大綱中的 Add graph…。Add a graph 卡片在 Dataflow、Procedural、Declarative 和 Definition 下提供各種種類,每種都附有一句說明其用途的話。選擇一種,輸入 Name,然後按 Add graph;該圖會被新增到文件中並開啟。

Add a graph 卡片:Dataflow 下的 Flows、Function 和 Components,Procedural 下的 Events 和 Routine,Declarative 下的 StateMachine 和 Constructs,以及一個 Name 框

執行在應用程式框架上的圖會一併帶入該框架的包:如果將一個名為 Loop 的 Events 圖新增到尚未引用該框架所屬包的文件中,狀態列會顯示 Added Loop and declared Event Applications。一次 Ctrl+Z 會同時復原這兩項。

在大綱中,按一下某個圖可顯示它,右鍵按一下它可使用 Rename…、Set as entry 和 Delete…。F2 會要求為螢幕上的圖輸入新名稱。

入口圖

入口圖是文件執行開始的地方,大綱會將其標記為 entry。新文件的入口圖名為 Graph,其種類即在 Choose a workload 卡片上所選的種類。右鍵按一下另一個圖並選擇 Set as entry 可以移動該標記——可移至 Flows、Function、Events、Routine、StateMachine 或 Constructs 圖;Components 圖或 Type 永遠不能作為入口。

當標籤頁以 Interpreted 方式執行,且螢幕上的圖是 Routine、Events 圖或狀態機時,Run 會執行該圖而不是入口圖,這樣就可以單獨試驗文件的某一部分。Compiled 執行始終從入口圖開始。

Function

Function 是一個帶有簽名的圖,其他圖可以像呼叫節點一樣呼叫它。

  1. 按 Ctrl+T,選擇 Function,將其命名為 Twice,然後按 Add graph。它的畫布上有一個 Input 節點和一個 Output 節點。
  2. 在未選擇任何內容時,Properties 面板會列出 Function 的 Inputs 和 Outputs。在 Inputs 下按 Add entry:會出現一個名為 Input、型別為 Number 的條目。在其 Name 中輸入 Value 並按 Enter。在 Outputs 下執行同樣的操作,將其命名為 Result。條目初始為 Number;如需其他型別,請按一下其 Type 並從列表中選擇——常用型別排在前面,然後是文件的節點所使用的型別。
  3. 放置一個 Add(托盤中 Number Routines 下的那個),將 Input 節點的 Value 連線到它的兩個輸入,再將它的輸出連線到 Output 節點上的 Result。
  4. 回到一個 Flows 圖,按 Ctrl+Space 並輸入 Twice:你的 Function 會出現在以你的文件命名的標題 Document Modules (Hello) 下。放置它,它就像其他任何節點一樣接收一個 Value 並給出一個 Result。

重新命名條目、更改其型別或調整其順序都會保留其連線,並且每個呼叫該 Function 的節點都會隨之更新。一旦本文件引用了另一個文件,就可以用同樣的方式使用其中的 Function——請參閱引用。

Routine

Routine 從 Begin 開始沿著執行連線,一條語句接一條語句地執行。它的語句是帶有執行引腳的節點——Print Line、Branch、各種迴圈——執行引腳繪製為箭頭;而沒有執行引腳的節點(例如 Add)會在某條語句需要其值時執行。

迴圈體掛在迴圈的 Next 引腳上,每輪執行一次;迴圈之後的內容掛在 Completed 上。下面這個 Routine 會列印 0、1 和 2:

  1. 建立一個入口為 Routine 的文件——在 Choose a workload 卡片上選擇 General Purpose 和 Routine——或者在已有的文件中按 Ctrl+T 並選擇 Routine。它一開始包含 Begin 和 Return。
  2. 按 Ctrl+Space 並輸入 For:第一個候選項就是 Procedural Programming 下的迴圈。放置它。它按 Step 從 Start 計數到 End(兩端都包含)——除非你更改,否則分別為 0、10 和 1。將 End 設為 2。
  3. 放置一個 Print Line。將 Begin 的 Next 連線到 For 的 Previous,將 For 的 Next 連線到 Print Line 的 Previous,並將 For 的 Current Value 連線到 Print Line 的 Message。
  4. 將 For 的 Completed 連線到 Return 的 Previous,然後按 F5。

一個 Routine:Begin,For 從 0 到 2,Print Line 列印目前值,然後 Return——執行後列印出 0、1 和 2

以編譯方式執行時,它列印的內容相同。Return 無論在哪裡被執行到,都會結束 Routine:如果改為將其連線在迴圈體內的 Print Line 之後,它就會列印 0 然後停止。一個 Routine 可以有多個 Return。

區域變數

Routine 可以在執行期間儲存自己的值。在未選擇任何內容時,按 Properties 面板中的 Define local variable…(或在托盤中找到 Define Local Variable),為其命名並選擇型別。之後托盤會為它提供一個 Get 節點和一個 Set 節點。每次呼叫 Routine 時,該變數都從其初始值開始,如果沒有初始值則從其型別的預設值開始。

Events

Events 圖是應用程式框架上的一組回撥:你放置框架的事件——Start 以及它提供的其他事件——並將語句掛在它們上面,由框架決定每個事件何時執行。它是哪個框架,由圖的 Procedural base type 決定,在未選擇任何內容時顯示在 Properties 面板中——新建的圖為 BasicApplication。按一下它可以選擇其他框架:列表會提供文件所引用的包中的框架,因此由 GUI Development 工作負載建立的文件會提供它的兩個 GUI 框架。Events 圖可以擁有自己的 Function 和 Routine,供其回撥呼叫:在未選擇任何內容時,按其 Properties 中的 Define behavior member…。GUI 和 Glaze 類別中的示例很適合開啟來看看——請參閱示例。

Type

Type 定義一個資料結構:它的資料成員,以及作為其方法的內部 Function 或 Routine 圖。其他圖通過它的 Make 節點建立例項——對於名為 Point 的 Type 就是 Make Point——並讀取和設定其成員。在其畫布上未選擇任何內容時,Properties 面板中的 Type kind 可以在以下幾種之間選擇:Class,由持有它的所有物件共享;Struct,一個會被複制的值;以及 Record,由其成員一次性構建,之後不再更改。

文件本身也是一個型別,以其檔案命名,並由它自身的圖說明它是哪一種:請參閱引用。

資料成員和初始值

資料成員是屬於某個型別、在多次呼叫之間持續存在的值——累計總數、分數、某項設定。文件本身就是一個型別,因此它自身的圖 Document 可以儲存資料成員,供其中的所有圖共享;Type 也可以。

  1. 按一下大綱中的 Document 以顯示文件自身的圖。在未選擇任何內容時,按 Properties 面板中的 Define data member…。(它也在托盤中,名為 Define Data Member。)

  2. Define a data member 卡片會要求輸入 Name 和 Type。列表以 Number、Integer、Text 和 Truth 開頭,然後是它們各自的列表和陣列——List of Number、Number Array 等——再然後是 Divooka 的其餘常用型別,以及文件的節點所輸出或接收的型別。將其命名為 Total,選擇 Number,然後按 Define。該成員的節點會被放置,托盤現在會在文件的每個圖中提供 Get Total 和 Set Total。

    Define a data member 卡片:Name 為 Total,Type 列表中選中了 Number

  3. 選擇該成員的節點。它的 Properties 列出其 Name、Type 和 Starting value。在 Starting value 中輸入 2 並按 Enter:狀態列顯示 Set starting value,節點上也會顯示該值。

選中的資料成員 Total,其 Starting value 在 Properties 面板中設為 2

無論哪種模式,每次執行開始時 Total 都為 2;列印 Get Total 的 Routine 會列印 2。框旁邊的叉號會將其重置為該型別的預設值。列表或陣列也可以設定初始值,逐個元素設定;結構體則逐個部分設定——例如一個初始為 X 1、Y 2 的 Point。Flows 圖不接受自己的資料成員;請在文件的圖或某個 Type 上定義它們。

要重新命名成員,請按兩下其節點的標題列,或選擇它並按 F2:每個讀取或設定它的節點都會隨之更新。