用 Emojicode 写一个可爱的程序
这种有趣的开源语言是学习编码真正的完美选择。
编程 表情符
219.217.246.94
哈哈哈，真有趣！
来自黑龙江哈尔滨哈尔滨工业大学的 Firefox 112.0|GNU/Linux 用户
2023-04-07T20:17:34.000
218.90.110.104
看起来就是简单的文本替换
来自江苏无锡的 Firefox 109.0|Ubuntu 用户
2023-04-08T04:13:33.000
139.189.60.181
太抽象辣
来自海南海口的 Chrome Mobile 99.0|Android 12 用户
2023-04-13T12:26:47.000
183.95.248.30
?乐了 哪里都有抽象小鬼
来自湖北荆门的 Chrome Mobile iOS 112.0|iOS 16.3 用户
2023-04-13T13:21:23.000
183.95.248.30
?乐了 哪里都有抽象小鬼
来自湖北荆门的 Chrome Mobile iOS 112.0|iOS 16.3 用户
2023-04-13T13:21:26.000
这种有趣的开源语言是学习编码真正的完美选择。
![](/data/attachment/album/202304/07/141230yv2s53itmiw45ots.jpg)



> 
> 这种有趣的开源语言是学习编码真正的完美选择。
> 
> 
> 


在这篇文章中，我将介绍一个最好的编码语言，学习如何制作任何东西！它叫做 Emojicode，是由 Theo Belaire 在 2014 年创建的，它是一种开源的编程语言，使用 emoji 字符来表示其语法。当用 Emojicode 开发时，表情符被用来创建变量、函数和控制结构。因为它是一种静态类型的语言，变量类型必须在使用前声明，但它也支持类和继承等面向对象的概念。这种语言可以在每个操作系统上运行，它是一种超级有趣的编码方式，特别是当你是一个非英语母语的人时。这很有帮助，因为象形表示可以把我们大家聚集在一起，让我们以类似数学的方式说同样的语言。


### 先决条件


在本教程中，我使用的是基于 Debian 的操作系统。我的工具可能与你的操作系统的要求不同。以下是我所使用的工具：


* [Geany](https://github.com/geany/geany)，一个 Linux 下的开源 IDE。
* IBus，它允许你挑选表情符并把它们放在你的编辑器中。我使用的界面被称为 **emoji picker**。
* 基于 Debian 的 Linux。
* 一个 C++ 编译器。我使用的是 `g++` 编译器。
* [Emojicode](https://github.com/emojicode/emojicode)


我使用的是 Linux 操作系统，但你可以 [阅读文档](https://www.emojicode.org/docs/) 了解在其他操作系统上使用它时可能需要采取的任何特殊步骤。


### 在 Linux 上安装 Emojicode


有几种方法可以在你的电脑上安装 Emojicode，但它们有一个很酷的 [神奇的安装页面](https://www.emojicode.org/docs/guides/)，可以告诉你具体该怎么做。下面是我的做法：



```
$ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \
    && tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \
    && cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \
    && cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64

```

Emojicode 的安装过程提供了有用的反馈。


![The emojicode installation procedure provides useful feedback along the way.](/data/attachment/album/202304/07/141304mo66ec077m780kxa.jpg)


现在，你已经安装好了，是时候开始编写代码了！


### 它是怎么运作的？


首先，所有 Emojicode 文件的扩展名都以文件名 `.?` 结尾，但因为你不能在一般的文件名中这样做，所以它被翻译成 `filename.emojic`。这里是最重要的语法元素：


* 把 `?` 放在一行的开头，表示要执行哪些代码块
* 用 `?` 开始一个代码块
* 用 `?` 来结束一个代码块
* 想打印什么吗？就用 `? ? <string> ? ❗`


还有很多其他的，所以这里有一些实际的例子。


### 打印一首俳句


首先，试着打印一首漂亮的俳句来玩玩吧! 在这个例子中，我将添加一行注释。看看你是否能识别它。



```
??
? This is a single line comment for fun
? ?Emojicode is great,? ❗
? ?Fun and expressive code,? ❗
? ?no sadness, just joy.? ❗
?

```

现在我们需要保存我们的代码，并通过我们的编译器运行它，使之成为一个漂亮的可执行文件：



```
$ emojicodec haiku.emojic 
$ ls
haiku  haiku.emojic  haiku.o

```

正如你所看到的，代码已经被编译并生成了两个文件，其中一个是可执行的。运行 `haiku` 文件：



```
$ ./haiku 
Emojicode is great,
Fun and expressive code,
no sadness, just joy.

```

### 数学和变量操作


接下来，你要同时做几件事：一点点数学和变量的改变。首先，将一个变量赋值为 0：



```
0 ➡️ ??x

```

你刚刚使用蜡笔（`?`）表情符、新建（`?`）表情符和变量名称创建了一个新变量，同时还将该变量赋值为 0。


接下来，用磁铁（`?`）表情符打印一行包括该变量的内容：



```
? ?The value is ?x? ? ❗

```

接下来，使用加号（`➕`）和箭头（`⬅️`）表情符改变变量：



```
x ⬅️➕ 1

```

然后打印另一行的值。如此这般，然后打印出最终的数值。如下：



```
? ?

?Updating a variable using math 
0 ➡️ ??x
? ?The value is ?x? ? ❗

x ⬅️➕ 1
? ?The value is ?x? ? ❗

x ⬅️➕ 15
? ?The value is ?x? ? ❗

x ⬅️➖ 9
? ?The value is ?x? ? ❗

x ⬅️➗ 2
? ?The final value is ?x? ? ❗
?

```

接下来，用 `emojicodec` 编译代码，然后用你的可执行代码来看看结果：



```
$ emojicodec math.emojic 
$ ./math 
The value is 0 
The value is 1 
The value is 16 
The value is 7 
The final value is 3

```

如你所见，作为变量打印出来的所有内容都已使用新数学进行了更新。你可以用许多数学表情符来进一步操作。下面是一些更多的运算符：



```
? is your modulo
◀ Less than
▶ Greater than
◀? less than or equal to
▶? greater than or equal to

```

### Emojicode 的怪癖


当我在文档中来回查看时，我发现了一些有趣的怪癖。其中之一是，当从用户那里抓取输入时，由于一些已知的编译器问题，耳朵的肤色很重要。


获取用户输入的动作是这样的：



```
??▶️??❗️

```

获取和分配用户输入的操作是这样的：



```
??▶️??❗️ ➡️ inputText

```

我试图让它工作，我的编译器出现了一些问题，我发现了这个问题。你也可能会在这里和那里遇到一些小问题。如果你遇到了，请创建一个 [议题](https://github.com/emojicode/emojicode/issues)，这样它就有可能被修复。


### 没有技巧，只有很棒的代码


虽然我可以介绍更多内容，但我可以向你保证，这段令人惊叹的代码背后的文档非常丰富。尽管我写这篇文章只是为了赶上愚人节的乐趣，但我不得不承认这是有史以来最好的语言之一，因为它教会了你很多非常真实的编程概念。我恳切地建议把它作为一种有趣的方式来教你的一些朋友、孩子，或者是对编码感兴趣的同学。希望你度过了一个充满乐趣的愚人节！




---


via: <https://opensource.com/article/23/4/emojicode>


作者：[Jessica Cherry](https://opensource.com/users/cherrybomb) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

