大多数编程语言都是为了满足一些真正的需求而创建的,但有些只是一种艺术声明。有一个这样的艺术声明是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 这样的连字字体- 源代码仍然会说!==,但在编辑器中你会看到≢。