Omino Language - ywchiao/cocoa GitHub Wiki


--- Warning! Warning!! Warning!!! ---

這裡所寫的一切,所有的一切,都有可能變動!
在整個專案到達 1.0 的里程碑 (milestone) 之前,這裡的一切都只反映當下的設計思維, 隨時可能因思維改變或現實考量而作修正。同時因為專案和文件的時差,它僅能儘可能地貼近實際的程式碼狀態。

--- End of Warning ---


Omino


  • [語言概觀 Overview] (#overview)

  • [Omino 積木 (Omino Bricks)] (#omino-積木)


Overview

Omino 是一個類似 Scratch 的 Drag & Drop 圖像式程式語言 (programming language)。Omino 的設計目標為 K-12 (Kindergarden 到 12 年級)的程式初學者提供一個易學易用,又好玩的程式語言。嘗試引發他們對資訊科技的興趣。

和一般的程式語言不同,Omino 從根本就__不是__,也__不追求__成為一個通用 (general-purposed)的程式語言。舉例而言,Omino 沒有__使用者自定變數 (user-defined variables);相對的,Omino 僅在核心部份提供基本的__流程控制(flow control)語法結構,所有其它需要的程式構建單元都透過稱作__工具集__(tool sets)的__擴充模組__ (extensions)提供。希望讓 Omino 的使用者能更專注在解決問題的__流程__(work flows),方法(algorithms),而非語言本身。

影響 Omino 設計理念的啟發主要來自 (依字母順序):

  • Arduino

  • Lego/Lego MindStorm

  • Scratch

  • Tetris

範例

一個完整的 Omino 程式可以視作是對某個特定 FSM (Finite State Machine)的視覺化描述,所有的__狀態__(states)都根據預先設定好的問題需求而以不同的 StateBrick 準備好。舉例而言,假定要用 Omino 寫一個 LED 閃燈的程式。程式的功能為開始執行後,LED 燈會不斷的明滅閃爍,而當明滅到指定次數,如 10 次後,程式結束。要做到這樣的程式,使用者可能會需要:

. repeat: 一個 LoopBrick,用來控制重複的次數

. LED: 一個 StateBrick,記錄和控制 LED 的明滅狀態

. toggle: 一個 ActionBrick,當作 LED 的切換開關

這三個 Brick 就構成了 LED 明滅控制程式的__工具集__ (tool set); 而程式,以文字來表述就長成如下的形式:

repeat 20 times:
    toggle(LED)

而為了增加 Omino 程式解決問題的不同途徑,同樣的 LED 問題也可以提供以下的 Tool Set 組合:

. repeat: 一個 LoopBrick,用來控制重複的次數

. if-else: 一個 BranchBrick,用來檢查 LED 狀態,並作相對應動作

. LED: 一個 StateBrick,記錄和控制 LED 的明滅狀態

. ON/OFF: 兩個 StateBrick,分別代表 ON (true) 和 OFF (false)

. turn: 一個 ActionBrick,當作 LED 的開關

而 Omino 程式碼以文字表述就成了下面的形式:

turn(LED, OFF)
repeat 20 times:
    if (LED is ON):
        turn(LED, OFF)
    else:
        turn(LED, ON)

將這些 brick 或更多,收集成一個__工具集__,就可以讓 Omino 的使用者發揮自己的創意,組合出他們自己的程式。

Omino 積木