|
|
51CTO旗下网站
|
|
移动端

老铁,东北话编程了解一下不?谷歌工程师新作!

文言文编程火了,但使用它需要有一定的古文功底,因此它对大部分开发者来说并不够友好。近日,一位谷歌的工程师琢磨出来一个更加接地气的编程语言项目:dongbei。

作者:陈思、钰莹、刘燕来源:AI前线|2020-02-06 15:20

 

如果说用文言文编程还是有些困难,那么,东北话呢?

项目介绍

文言文编程火了,但使用它需要有一定的古文功底,因此它对大部分开发者来说并不够友好。近日,一位谷歌的工程师琢磨出来一个更加接地气的编程语言项目:dongbei。

项目地址:https://github.com/zhanyong-wan/dongbei

dongbei,它的创造者这样介绍它:

一门以东北方言词汇为基本关键字的以人为本的编程语言。

简单来说就是:用东北话编程。项目的开发者又做了进一步的介绍:

dongbei 语言是基于 Python 3 二次开发的,适用于 Mac OS、Windows、Linux 等系统,安装也极其简单,通过指令:src/dongbei.py 安装即可。如果还没有安装 Python 3,可以通过以下链接安装:https://docs.python-guide.org/starting/install3/osx/

按照惯例,安装完成后要先进行测试,输入:test/dongbei_test.py 即可。

上述流程都验证完了,就可以正式开始编程了,老规矩,先上一句“hello world”。不过,这东北话的“hello world”可是与众不同。

首先创建一个名字叫 hello-world.dongbei 的文本文件,内容如下(已做和谐处理):

  1. 唠唠:“唉呀,这嘎哒真那啥!”。 

用 utf-8 编码保存。要是编辑器显示编码错误,那就把文件内容改成:

  1. # -*- coding: utf-8 -*- 
  2.  
  3. 唠唠:“唉呀,这嘎哒真那啥!”。 

然后在命令行窗口运行:

  1. src/dongbei.py hello-world.dongbei 

执行结果如下:

  1. 唉呀,这嘎哒真那啥! 

当然,如果是非东北程序员,那么理解东北话还是有点儿困难的,因此你需要对东北话进行一番“补习”,地址在此:

https://github.com/zhanyong-wan/dongbei/blob/master/doc/cheatsheet.md

语法规则

学习一门语言,要掌握“三要素”—词法、语法、语义,带有浓厚东北语言风格的 dongbei 编程语言的语法规则又有什么不一样呢?

先来看看 dongbei 语言词汇的构成。

词法:

字符串变量:

一行代码当中,要是出现配对的中文全角双引号,比如

  1. ...“我是一个字符串”... 

那么引号当中的内容(我是一个字符串)会被当成一个字符串常量。

注释:

一行代码当中,如果在字符串常量外面出现 # 字符,所有从 # 开始的字符都会被当成注释被忽略掉。比如

  1. 唠唠:# 我是一个注释。 
  2.  
  3. “嘎哈 #?”。# 我还是一个注释。 

跟:

  1. 唠唠:“嘎哈 #?”。 

是一样的:

分词: 为了避免歧义,很多西方语言在书写时要用空白字符或标点把单词隔开,但同时这也比较麻烦,dongbei 语言适应华人的书写习惯,加不加空格换行无所谓。所以,下面两种表达方式的效果是一样的。

  1. 唠 
  2.  
  3. 唠 
  4.  
  5. : 
  6.  
  7. “嘎哈?” 
  8.  
  9. 。 
  1. 唠唠:“嘎哈?”。 

名字: 在 dongbei 语言里面,除了关键词、标点符号和常数,剩下的都是名字。比如,在“张三乘李四”这个 dongbei 语言表达式里,“乘”是一个关键词,“张三”和“李四”是两个不同的名字,dongbei 语言允许用中文全角方括号【】把一串字符标注为名字。

常数: 除了用阿拉伯数字表示的十进制整数(比如 2、42、250,等等),0 到 10 的常数也可以用中文表达,二也可以写成两或者俩。三也可以写成仨;

  1. 零一二三四五六七八九十 

例如五加二的意思是 5+2

  1. 五加二 

语句: 一个 dongbei 程序是由一串语句组成的。每个语句以句号(。)结束。为了表达程序员炽热的感情,也可以用感叹号(!)结束,意思和句号是一样一样的。

变量:ongbei 语言允许使用任何字符串做变量名。只要记住两点:变量名里所有的空白字符都会被忽略;有歧义的时候要把变量名用【】括起来。

定义变量:dongbei 是一门以人为本的语言。我们知道东北人都是活雷锋。所以,要定义一个叫 XX 的变量,写成 :”XX 是活雷锋“, ”老王是活雷锋“ ,”老王是活雷锋!“ 都是可以的。

  1. XX 是活雷锋。  
  1. 老王是活雷锋。  

  1. 老王是活雷锋!  

给变量赋值:dongbei 语言不整“赋值”这种文绉绉的词儿。咱们叫“装”。比如:

  1. 老王装二。 

可以理解为 C 语言的

  1. lao_wang = 2

要把一个活雷锋的值清空回到原始状态,可以用”削“:

  1. 削老王。 

增减变量: 活雷锋除了会装,加加减减也是常见的操作。按没病走两步的规矩,这些操作的名字叫做:走走、稍稍、走 X 步、稍 X 步。比如:

  1. 老张装二。# 现在老张等于 2 
  2.  
  3. 老张走走。# 现在老张等于 3 
  4.  
  5. 老张走两步。# 现在老张等于 5 
  6.  
  7. 老张稍稍。# 现在老张等于 4 
  8.  
  9. 老张稍五步。# 现在老张等于 -1 

引用变量: 变量,活雷锋定义以后就可以引用了。引用的方法很简单:把活雷锋的名字写出来就成。比如:

  1. 老张是活雷锋。 
  2.  
  3. 老王是活雷锋。 
  4.  
  5. 老张装 250。 
  6.  
  7. 老王装老张加 13。 

定义了两个活雷锋:老张和老王。老张值 250。老王值 263。

输出: 输出信息用“唠唠”来表示,假定输出信息是 YY,可以写:

  1. 唠唠:YY。 

字符串运算 : 顿号(、) 操作符可以把两个值当成字符串拼接起来。假定活雷锋老王的当前值是字符串“NB”,那么表达式

  1. 老王、“A” 

上述代码的值就是字符串 NBA。

算术运算 :基本的四则运算还是支持的,不过把符号换成了文字,+ 号用“加”来表示,- 号用“减”来表示,号用“乘”来表示,/ 号用“除以”来表示。作者特别强调,除法运算叫“除以”,不叫“除”。

乘除的优先级比加减高,相同优先级下,运算从左到右。比如:

  1. 3 加 2 乘 5 

最终结果是 13,不是 25

循环:我们一般编程使用的循环是 for、while 等,在 dongbei 项目中,循环语言非常方便、易懂:

  1. 变量名 从 X 到 Y 磨叽: 
  2.  
  3. ... # 需要重复做的事 
  4.  
  5. 磨叽完了。 

判断(讲条件):当做某件事情,必须在某个条件成立下才可做时,在该项目中的表述为:

  1. 寻思:CCC ? 
  2.  
  3. 要行咧就 XXX 

如果该条件不成立时需要执行其他操作,可以写:

  1. 寻思:CCC ? 
  2.  
  3. 要行咧就 XXX 
  4.  
  5. 要不行咧就 YYY 

简单演示

在熟悉了一些基本的语法规则后,作者也给出了一些简单的演示,比如,当我们需要定义一个方法(作者在项目中用“套路”来表达),可以这样表述(以“写九九表”为例):

  1. 写九九表咋整:# 定义套路 写九九表。 
  2.  
  3. 老王从 1 到 9 磨叽: 
  4.  
  5. 老张从老王到 9 磨叽: 
  6.  
  7. 唠唠:老王、“*”、老张、“=”、老王乘老张。# 打印 X*Y=Z 
  8.  
  9. 磨叽完了。 
  10.  
  11. 唠唠:“”。# 空一行。 
  12.  
  13. 磨叽完了。 
  14.  
  15. 整完了。# 结束套路定义。 

如果需要运行该方法,可以使用整 + 套路名的方式,比如:

  1. 整写九九表 

这样就可以打印出结果了:

  1. 1*1=1 
  2.  
  3. 1*2=2 
  4.  
  5. 1*3=3 
  6.  
  7. ... 
  8.  
  9. 8*8=64 
  10.  
  11. 8*9=72 
  12.  
  13. 9*9=81 

这样的简单示例还有很多,此处仅列举这一个作为参考,对于复杂的递归题目,作者表示该编程语言同样有效,例如这道程序员都很熟悉的题目:

  1. 求 n 的阶乘 f(n) :如果 n 是 0,结果为 1。如果 n 比 0 大,结果就是 n * f(n-1)。递归(作者使用“自推”来表达)的精髓是在算 f(n) 时,先算 f(n-1),再从 f(n-1) 算出 f(n)。 

如果把上面的思路用 dongbei 这个语言写出来,就是下述效果:

  1. 【阶乘】(那啥)咋整:# 定义套路 阶乘,有一个参数 那啥。 
  2.  
  3. 寻思:那啥比一小?# 需要自推吗? 
  4.  
  5. 要行咧就 滚犊子吧 一。# 不需要。 
  6.  
  7. 要不行咧就 滚犊子吧 那啥乘整【阶乘】(那啥减一)。# 需要。自推吧。 
  8.  
  9. 整完了。# 定义结束。 

作者简介

Zhanyong Wan,谷歌资深软件工程师 / 技术主管经理,谷歌 C ++ 测试框架 googletest 和 googlemock 的原始作者。

【编辑推荐】

  1. 我花了两年,从不懂Python变成了AI工程师
  2. 30天就能学会一门编程语言的开源项目来了
  3. 堪比Python、秒杀Excel表格,这个数据分析工具太猛了
  4. 口碑扑街?Python告诉你《囧妈》到底囧在哪里?
  5. Python中的图像增强技术
【责任编辑:张燕妮 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月获赞

订阅专栏+更多

Python应用场景实战手册

Python应用场景实战手册

Python应用场景实战手册
共3章 | KaliArch

122人订阅学习

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

207人订阅学习

云架构师修炼手册

云架构师修炼手册

云架构师的必备技能
共3章 | Allen在路上

44人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微