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