大多数编程语言都是为了满足一些真正的需求而创建的,但有些只是一种艺术声明。有一个这样的艺术声明是Emojicode语言 —— 自称为“由 emojis 组成的成熟编程语言”。

Hello World

让我们从写 Hello World 开始:

????????????????
???? ????
???? ????????????????????????, ????????????????????????❗️
????

如你所见,通常的关键字已被表情符号取代:

  • ???? 是注释行
  • ???? ???? ...????是主要功能
  • ???? 就像引号
  • ????...❗️就像打印
  • 一般来说,❗️ 结束参数列表

字符串和注释的内容不一定是表情符号,但我也用我的应用程序来制作花哨的文字来为它们增添趣味。

变量

我们可以使用 ➡️ 将事物放入变量中。变量在右边,这是相当非常规的选择,但并非完全闻所未闻。???? 进行字符串插值:

???? ????
????ⓔⓥⓔⓡⓨⓞⓝⓔ????➡️who
???? ????????????????????????, ????who????????❗️
????

列表和 for 循环

列表由????...????. 我得到了第一个表情符号,对第二个不太确定。

你可以使用 循环???? iterator list ???? body ????,这是一个不错的循环表情符号:

???? ????
????
????Python????
????JavaScript????
????Ruby????
????Emojicode????
????PHP????
????➡️languages
???? ????Most important languages to learn????❗️
???? language languages ????
???? language❗️
????
????

FizzBuzz

我们这里还需要提前准备一些东西。

???? 变量 ????⏩ start afterend step 相当于 在(start, afterend, step)范围循环
i ???? 15 ???? 0相当于 i % 15 == 0
↪️、????‍↪️ 和 ???? 相当于 if、else if 和else
有了它,我们可以编写一个 FizzBuzz,也可以使用花哨的字体进行输出:

???? ????
???? i ????⏩ 1 101 1 ????
↪️ i ???? 15 ???? 0 ????
???? ????????????????????????????????????????
????
????↪️ i ???? 3 ???? 0 ????
???? ????????????????????????
????
????↪️ i ???? 5 ???? 0 ????
???? ????????????????????????
????????????
???? ????????i????????
????
????
????

函数

我们还需要知道一件事——函数。

我有点迷了,文档里没有说明任何关于函数的内容。它有闭包,所以我们认为这可能有效:

???? ????
???? i ????➡️????
↩️ i➕i
???? ➡️ double

???? ????????⁉️ double 21❗????????❗
????

我们需要声明类型。????➡️???? 表示接受一个整数,并返回一个整数。↩️是回报。⁉️...❗ 是函数调用。还不错。

Y组合器失败

不幸的是这些不能递归,所以这根本不起作用!

???? ????
???? n ????➡️????
↪️ n ◀️ 3 ????
↩️ 1
????????????
???? Does not work
↩️ ⁉️ fib n➖1❗➕⁉️ fib n➖2❗
????
???? ➡️ fib

???? ????????⁉️ fib 5❗????????❗
????

我考虑过使用旧的 Lisp 技巧,并将 fib 闭包作为参数传递给 fib,这样它就可以调用自己,但这只有在没有愚蠢的类型妨碍时才有效。如果类型系统支持递归类型,则类型系统可能支持 Y 组合器,但我认为 Emojicode 不支持。

Classes

它的文档没有说明任何关于函数的内容,但它有类。所以让我们用方法 ???? 定义类 ???? 来做 fib:

???? ???? ????
????????
????

❗️ ???? n ????➡️???? ????
↪️ n ◀️ 3 ????
↩️ 1
????????????
↩️ ???????? n➖1❗➕???????? n➖2❗
????
????
????

???? ????
????????❗️ ➡️ fib

???? i ????⏩ 1 31 1 ????
????fib i❗️ ➡️ x
???? ????????x????????❗
????
????

如果你已经有了一定的研究,那么这段代码应该不会太难理解。

  • ????????❗️ ➡️ fib- 创建一个新的????并将其分配给fib变量
  • ????fib i❗️ ➡️ x- 在实例上调用???? fib,使用参数调用我们唯一的方法i
  • ???? ???? ???? ... ????- 定义一个名字为????的类(类名必须是表情符号)
  • ????????????- 空构造函数,我们需要为每个类创建一些构造函数,即使它不做任何事情
  • ❗️ ???? n ????➡️???? ????...????- 定义方法????...❗️ 接受一个整数参数n并返回一个整数
  • ↩️ ???????? n➖1❗➕???????? n➖2❗- 递归调用,???????? n➖1❗ 是this.????(n-1)更常用的语言

统一码

这种语言当然是作为一种艺术声明而创造的(或者如果你更喜欢这样说的话,也可以作为一个笑话),但它提出了一个重要的问题。在整个编程历史中,几乎所有语言(APL 和 Raku 是最值得注意的例外,别担心——我们肯定会在本系列中介绍这两种语言)仅限于带有 ASCII 字符的纯文本。

即使 ASCII 符号显然还不够,所以符号被重用来表示十种不同的东西(尝试列出 JavaScript 或实际上几乎任何语言中字符的所有句法含义),以及像,这样{}的长字符串被用作假的额外字符。!==**=

所以问题是 - 编程语言是否应该继续将自己限制在 ASCII 上,还是终于到了拥抱整个 Unicode 的时候了?一个有趣的中间地带是像 Fira Code 这样的连字字体- 源代码仍然会说!==,但在编辑器中你会看到≢。

✨ 写在最后的

想看看我在做什么?查看我的 个人网站 和 GitHub