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

圖和成員

一個文件包含一個或多個圖,列在左側的文件大綱中:文件自身的圖 Document,以及位於其下的其他圖。每個圖都有一個種類,它決定圖的繪製方式、提供哪些節點以及執行意味著什麼。畫布上方會顯示種類及其所屬的類別,例如 Flows · dataflow、Routine · procedural。其中,dataflow(資料流)表示值沿連線流動,節點在需要其結果時執行;procedural(過程式)表示各步驟依次執行;definition(定義)表示描述一個型別,而不是執行。

圖的種類

種類 類別 說明
Flows dataflow 一塊自由形式的畫布。值沿連線傳遞,執行時執行標記為啟用的節點及其依賴的所有內容。它是日常用於探索和組裝的工作區。
Function dataflow 其他圖可以像呼叫節點一樣呼叫的圖:有一個 Input 節點和一個 Output 節點,兩者之間的每個節點都會執行。
Events procedural 由應用程式框架呼叫的回撥:Start、每幀呼叫的更新,以及框架提供的其他回撥。
Routine procedural 按順序執行的步驟:一個 Begin、沿執行連線排列的語句,以及 Return。迴圈和分支都在這裡。
Type definition 你自己的資料結構:資料成員,以及作為其方法的 Function 或 Routine 圖。它不會單獨執行;由其他圖建立它的例項。

新增圖

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

Add a graph 卡片:Dataflow 下有 Flows 和 Function,Procedural 下有 Events 和 Routine,Definition 下有 Type,以及一個 Name 輸入框

在大綱中,按一下某個圖即可顯示它,右鍵按一下則可選擇 Rename…、Set as entry 和 Delete…。F2 會要求為目前顯示的圖輸入新名稱。

入口圖

入口圖是文件執行的起點,大綱中將其標記為 entry。新文件的入口圖名為 Graph,其種類為在 New document 卡片上選擇的種類。右鍵按一下另一個圖並選擇 Set as entry,即可將標記移到該圖上;入口圖可以是 Flows、Function、Events 或 Routine 圖,但 Type 永遠不能作為入口。目前顯示的圖是 Routine 或 Events 圖時,Run 會改為執行該圖,這樣就可以單獨試執行文件的某一部分。

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 的節點也會隨之更新。

Routine

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

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

  1. 建立一個入口為 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,從 0 到 2 的 For,用 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 面板中,新建的 Events 圖為 BasicApplication。按一下它可以選擇其他框架,例如用於帶按鈕視窗的框架,或用於帶幀迴圈遊戲的框架。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,在 Properties 面板中其 Starting value 設定為 2

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

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