【100 种语言速成】第 2 节:Emojicode
大多数编程语言都是为了满足一些真正的需求而创建的,但有些只是一种艺术声明。有一个这样的艺术声明是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 这样的连字字体- 源代码仍然会说!==,但在编辑器中你会看到≢。
- 点赞
- 收藏
- 关注作者
评论(0)