Luna 語言是一個尚待完善的面向對象語言,它最大的特點是嘗試用可視化的方式將程序的進程表現出來。

在最常見的情況下,每個節點對應一行代碼。例如下圖

 

 

它的對應Luna代碼是

a = 1
b = 2
c = a + b
c.succ

 

從這裡我們可以看出,節點實際上將一行代碼分為兩部分:等號左邊和等號右邊。等號左邊是要處理的變數名,右邊則是對於表達式。

最左邊的兩個節點對應於行a = 1和b = 2。變數名稱a,b成為其相應節點的名稱,數字1和2它們的定義。他們沒有輸入埠和每個輸出埠。

中間的節點對應於該行c = a + b。它具有a和b連接到它的輸入節點。由此,可以清楚地看到輸入數據來自哪裡。

最右邊的節點對應於該行c.succ。該節點沒有名稱,因為相應的行沒有定義任何變數。它有c連接到它的self埠的節點。這個埠表示方法調用的目標。

我們可以看到,鏈接各個節點的線條顏色是黃色,這代表的是數據的類型。黃色是整型,橙色是浮點型( Luna 中被稱為real),紫色是字元串型,列表(數組)是藍色,含有多種數據類型的列表是綠色。每個節點的左端代表輸入,右端代表輸出。

數據類型:

就 Luna 目前的數據類型及處理來看,想要成為一門合格的面向對象的可視化語言還亟待完善。

Luna 目前支持三種基本數據類型:整型,真值(即浮點型),字元串,但三者直接的轉換如1+1.5這種表達式尚不能被實現,因此在用於數據處理方面的話還較為麻煩。

關於自定義數據類型:

與 python 類似, Luna 可以靠類生成一個新對象,以此達到使用自定義數據類型的目的。

對象在 Luna 里具有不可變性。也就是說在其他語言里,你可能會使用counter.count += 1去改變對象。而在 Luna 里,如果你寫foo = Circle 15.0, 無論如何使用它,foo將永遠是Circle 15.0,除非你重定義foo。

構造類與方法:

以下是構造類和方法的文本說明:

class Shape:
Circle:
radius :: Real
Rectangle:
width  :: Real
height :: Real

def perimeter: case self of
Circle r: 2.0 * pi * r
Rectangle w h: 2.0 * w + 2.0 * h

def area: case self of
Circle r: pi * r * r
Rectangle w h: w * h

 

總結:

主要優勢:

作為一款新型的可視化編程語言, Luna 更關注於數據的處理,這可以使任何需要使用計算機輔助進行數據處理的人都能快速的使用 Luna 進行編程。

主要缺陷:

目前的 Luna 在類和對象方面還有所欠缺。目前,沒有辦法使用可視化編輯器定義類和方法。

個人感覺 Luna 為了圖形化程序流程在代碼的靈活性上作出了很大的妥協,以至於cos=sin=5這樣的連等表達式都無法一行寫出,這對筆者這種喜愛語法糖的人來說還是比較不友好的QAQ,不過 Luna 本身側重的就是那些有數據處理需求而又不太對編程或者說語法感冒的設計者,有興趣的同學還是可以去 GitHub 上學習一下的。

此外:Luna的基礎語法以及操作都在官方文檔里有詳細的解釋

https://luna-lang.gitbooks.io/docs/content/visual_representation.html