文言文编程还难,那东北话呢?项目介绍文言编程很流行,但是使用它需要一定的文言知识,所以对大多数开发者来说不够友好。最近谷歌的工程师想出了一个比较接地气的编程语言项目:东北。项目地址:https://github.com/zhanyong-wan/dongbeidongbei,作者介绍如下:一种以东北方言词汇为基本关键词的人性化编程语言。简单来说:东北话节目。项目开发者进一步介绍:东北语是基于Python3进行二次开发,适用于MacOS、Windows、Linux等系统,安装也极其简单,通过命令安装即可:src/dongbei.py。如果你还没有安装Python3,可以通过以下链接安装:https://docs.python-guide.org/starting/install3/osx/按照惯例,安装完成后,首先要测试一下,输入:test/dongbei_test.py即可以。以上过程验证通过后,就可以正式开始编程了。像往常一样,先说“helloworld”。但是,东北话里的“helloworld”就不一样了。首先创建一个名为hello-world.dongbei的文本文件,内容如下(已调和):叽叽喳喳:“哎呀,这嘎嘎声真是什么!”。使用utf-8编码保存。如果编辑器显示编码错误,则将文件内容更改为:#-*-coding:utf-8-*-chattering:"Oh,whatarat!"。然后在命令行窗口中运行:src/dongbei.pyhello-world.dongbei执行结果如下:哎哟喂!当然,如果你是非东北程序员,听懂东北话还是有点难度的,所以需要对东北话做一些“补习”,地址在这里:https://github.com/zhanyong-wan/dongbei/blob/master/doc/cheatsheet.md语法规则学习一门语言,需要掌握“三要素”——形态、语法、语义。具有浓郁东北语言风格的东北编程语言在语法规则上有何不同?我们先来看看东北话的词汇。词法:字符串变量:在一行代码中,如果有成对的中文全角双引号,比如...“我是一个字符串”...那么引号中的内容(我是一个字符串)将被视为一个字符串常量。注意:在一行代码中,如果字符串常量外出现#字符,则所有以#开头的字符都将被视为注释而忽略。比如唠叨:#我是评论。“嘎哈#?”。#我还是评论。交谈:喋喋不休:“gaha#?”。同理:分词:很多西方语言为了避免歧义,写的时候会用空格或者标点符号来分隔单词,但同时这样也比较麻烦。东北话适应中国人的书写习惯,加空格换行无所谓。因此,以下两个表达式具有相同的效果。聊:“嘎哈?”。聊:“嘎哈?”。姓名:东北语中除关键字、标点符号和常量外,其余均为姓名。比如东北语表达“张三成李四”中,“程”是关键字,“张三”和“李四”是两个不同的名字,东北语允许中文全角方括号[】标记一串字符作为名称。常量:除了用阿拉伯数字表示的十进制整数(如2、42、250等)外,0到10的常量也可以用中文表示,二也可以写成二、二。三也可以写成三;零、一、二、三、四、五、六、七、八、九,比如五加二就是5+2五加二的语句:东北节目是由一串语句组成的。每个语句都以句点(.)结尾。为了表达程序员的热血情怀,还可以用感叹号(!)结束,和句号的意思一样。变量:翁贝语允许使用任意字符串作为变量名。只要记住两点:变量名中的所有空白字符将被忽略;有歧义时,变量名用【】括起来。定义变量:东北语是一种以人为中心的语言。我们知道,东北人都是活雷锋。于是定义一个变量叫XX,写:“XX是活雷锋”,“老王是活雷锋”,“老王是活雷锋!”都是可能的。XX是活雷锋。老王是活雷锋。老王是活雷锋!给变量赋值:东北话不用那么客气的“赋值”二字。我们称之为“假装”。例如:老王装二。在C语言中可以理解为lao_wang=2;要清除一个活雷锋的值回到原来的状态,可以用“切”:切老王。加减变量:除了伪装,火雷锋也是常用的操作。根据无病走两步的规则,这些操作的名称是:走,走,走X步,轻走X步。比如:老张装二。#现在老张等于2个老张走开。#现在老张等于3老张走两步。#现在老张等于5个老张咯。#现在老张等于4个老张略微五步之遥。#现在老张等于-1引用变量:变量,火雷锋定义后即可引用。引用的方法很简单,写火雷锋的名字就可以了。例如:老张是活雷锋。老王是活雷锋。老张装250,老王假装老张加13,定义两个活雷锋:老张和老王。老张值250,老王值263。输出:输出信息用“chat”表示,假设输出信息为YY,可以写:chatter:YY。字符串操作:逗号(,)操作符可以将两个值连接成字符串。假设现场雷锋老王的当前值是字符串“NB”,那么上述表达式老王的代码的值,“A”就是字符串NBA。算术运算:仍然支持基本的四种算术运算,只是符号换成了文字,+号表示“加法”,-号表示“减法”,符号表示“乘法”,符号由“分”表示。用"表示。作者特别强调,除法运算叫“dividedby”,不是“dividing”。乘法和除法的优先级高于加法和减法。相同优先级下,从左到右进行操作。比如:3加2乘以5,最后的结果是13,而不是25变量名从X到Y:...#需要重复的事情都做了。判断(条件):在做某事的时候,一定要在一定的条件下去做,在这个项目中的表述是:思考:CCC?如果你想做,就XXX。如果条件不满足还需要进行其他操作,可以这样写:思考:CCC?如果有效,则XXX,如果无效,则YYY。简单的演示在熟悉了一些基本的语法规则后,作者也做了一些简单的演示。比如当我们需要定义一个方法时(作者在项目中使用“routines”来表达),可以这样表达(以“写九十九表”为例):如何写九十九table:#Definition例程写入九十九个表。OldWangfrom1to9Moji:LaoZhangfromLaoWangto9Moji:喋喋不休:老王,“*”,老张,“=”,老王骑老张。#打印X*Y=Z完成。喋喋不休:“”。#跳行。结束了。结束了。#结束例程定义。如果需要运行该方法,可以使用整数+例程名的方法,例如:写九九表,打印出结果:1*1=11*2=21*3=3...8*8=648*9=729*9=81等简单的例子还有很多,这里只列一个供参考。对于复杂的递归问题,作者说这种编程语言也行之有效,比如这个程序员很熟悉的问题。:求n的阶乘f(n):如果n为0,结果为1。如果n大于0,结果为n*f(n-1)。递归的本质(作者用“自我推销”来表达)是在计算f(n)时,先计算f(n-1),然后从f(n-1)计算f(n)。上面的思路如果用东北语写的话,会产生如下效果:[Factorial](Nah)如何调整:#例程factorial的定义,有个参数那个。思考:有什么比小的更好?#需要自我推销吗?如果你想这样做,就离开这里。#不必要。如果你做不到,就让开,然后乘以整个[factorial](然后减去1)。#需要。强迫自己。结束了。#定义结束。关于作者ZhanyongWan是Google的高级软件工程师/技术主管经理,也是Google的C++测试框架googletest和googlemock的原作者。
