"中文编程"知乎专栏原链

原文: 日语编程语言"抚子" - 第三版特色初探

它山之石可以攻玉. 学习其他的母语编程语言, 相信对中文编程语言的设计和实践有借鉴意义. 在开源非英文关键词编程语言中, 由于日文和中文的相近性(如无空格的语法等等), 对日语编程语言"抚子"有特别的兴趣. 于是从官方文档开始探索. 以下试图突出一些发现的特色和亮点, 更完整的语法列表请见讨论组主题帖.

一些背景资料: 官方网站

  • 第三版(最新)源码库, 用JavaScript实现, 代码提交从2017/2至今
  • 第二版源码库, 用C#实现. 代码提交从2010/6到2016/2.
  • 第一版源码库, 用Pascal实现, 最近仍然在更新. 最早代码提交是2008年, 但应该在更早几年前就已经成型.

下面的示例代码源自第三版语法文档. 限于日语水平, 对它的示例源码也许有理解出入. 为方便理解, 已把它们转成对应的中文, 词序有不少调整. 如发现大的出入, 非常欢迎到主题帖批评指正.

接近日语自然语言的语法

比如它允许多种方式赋值:

价格是3000    #  原代码: 値段は3000
价格=2000
置价格为4000 # 値段に4000を代入。

很明显它支持无空格语法, 也同时支持传统(=)赋值和接近自然语言的赋值方式. 这个风格贯穿所有语法. 又如条件语句:

A = 4
如果A不是5
显示为「OK」
如果不是
显示为「NG」
直到这里。

暂时不确定空格缩进是否像Python那样必须, 还是仅为了代码可读性.

特别的’它’

加5到30,并乘以2来显示它。
加5到30。 它乘以两倍。 显示它。

的使用, 是一个特色. 个人感觉是内置的匿名变量, 并且在函数没有实参时默认使用. 这是很接近自然语言的指代用法! 例如:

它是“  abc   ”   <--- 后面几行都省略了'它'
空白删除。
大写转换
用“*”替换“A”
显示。

在函数中可以用, 作为返回的默认值:

●(A和B的)加法是
它是A + B
返回
直到这里

上例中即使没有返回“它”, 函数返回值仍然是的值

也会随着函数执行而更新, 如下示例, 函数体中没有, 但仍然显示50

●(A和B的)加法是
B添加到A
直到这里
30和7的加法. 显示它.

精简的循环

‘回数’是个保留变量, 可以获得当前循环次数的序号:

N=3
(N)次
  显示「这是第{回数}次」。
直到这里。

也可以遍历:

重复[1,2,3], 这里开始
显示对象。
直到这里。

上面的对象应该是类似回数的内置变量, 用以返回当前循环对应的值. (推测上面如果是显示{回数}的话, 应该显示0 1 2) 上面也可以用显示它

对象按照键遍历:

OBJ = {“Jan”:1,“Feb”:2,“Mar”:3,“Apr”:4}
重复OBJ
显示「{对象键} = {对象}月份」
直到这里。

这里也可以看到它支持JSON数据结构.

显式声明变量/常量

可带初始化的声明:

A是变量=30
B是常量=50

也可以简写:

变量A=30
常量B=50

函数

支持递归和匿名函数, 后者还未来得及细究(官方文档在)

允许内嵌JavaScript

这是个非常重要的功能, 虽然没有深入, 但个人理解是类似于Scala调用Java库的功能, 因而”抚子”语言可以用于所有JavaScript可用的领域(包括前后端). 因为此版是在NPM发布的, 猜测JavaScript也可以调用抚子语言的模块. 在缺乏自身的核心标准库时, 个人感觉新语言依托现有成熟语言的核心库以及丰富的第三方库对推广来说至关重要.

JavaScript回调事件参数 <— 此处不甚理解

参数这一内置变量可以以数组形式获取event参数的值。

●(A和B的)加法是
它=参数[0] + 参数[1]
直到这里
显示3和5的加法。

对移动设备和输入法的特别优化

一个很有特色的功能是, 为了简便地访问数组/对象. 因为智能手机很难输入A[n](猜想因为[]是在”符号”部分), 因此允许A@n. 这是第一次看到为了移动设备而设计的功能.

其他

字符串展开

感觉类似于Scala的功能(string interpolation). 复杂的字符串可以用S}(三对以上的大括号)表示:

得分是35。 评价是「A」。
成绩报告是S{{{★成績表★
·他的分数是{得分}。
·评价是{评价}。}}}
显示成绩报告。

返回:

★成績表★
・他的分数是35。
・评价是A。

2017-11-06 日语编程语言"抚子" - 第三版特色初探的更多相关文章

  1. 日语编程语言"抚子" - 第三版特色初探

    原址: https://zhuanlan.zhihu.com/p/30800689 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, ...

  2. 2017-12-22 日语编程语言"抚子"-第三版实现初探

    前文日语编程语言"抚子" - 第三版特色初探仅对语言的语法进行了初步了解. 之前的语言原型实现尝试(如编程语言试验之Antlr4+JavaScript实现"圈4" ...

  3. [软件工程基础]2017.11.06 第十次 Scrum 会议

    具体事项 项目交接燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #62 调试生成报告代码:#60 整理物理网站上的实验流程:#71 撰写报告生成搭建文档: 李煦通 ...

  4. [LOJ 6249]「CodePlus 2017 11 月赛」汀博尔

    Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不 ...

  5. [LOJ 6248]「CodePlus 2017 11 月赛」晨跑

    Description “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生王队长决定坚持晨跑.不 ...

  6. Xamarin 2017.11.9更新

     Xamarin 2017.11.9更新 本次更新主要针对Xamarin.iOS,适配了iOS 11.1和Xcode 9.1.Visual Studio 2017升级到15.4.3获得新功能.Visu ...

  7. http://www.liangxiansen.cn/2017/04/06/consul/

    Consul 使用手册 | 一个梦 http://www.liangxiansen.cn/2017/04/06/consul/ 基于Consul的分布式锁实现 https://mp.weixin.qq ...

  8. 2017.11.11 B201 练习题思路及解题方法

    2017.11.11 B201 练习题思路及解题方法 题目类型及涵盖知识点 本次总共有6道题目,都属于MISC分类的题目,涵盖的知识点有 信息隐藏 暴力破解 音轨,摩斯电码 gif修改,base64原 ...

  9. Java转换Json日期/Date(1487053489965+0800)/格式以及js时间格式 Tue Feb 14 2017 14:06:32 GMT+0800

    /Date(1487053489965+0800)/用Java怎么转换成yyyy-MM-dd的格式 Tue Feb 14 2017 14:06:32 GMT+0800用Java怎么转换成yyyy-MM ...

随机推荐

  1. SVM理解

    https://blog.csdn.net/feilong_csdn/article/details/62427148

  2. springmvc接受及响应ajax请求。 以及@RequestBody 和@ResponseBody注解的使用

    1.发送ajax请求 $.ajax({ url:"user/testAjax", contentType:"application/json;charset=UTF-8& ...

  3. JavaScript操作和使用Cookie

    Cookie概述 Cookie是由服务器端生成并储存在浏览器客户端上的数据. 在javaweb开发中Cookie被当做java对象在web服务器端创建,并由web服务器发送给特定浏览器客户端,并且we ...

  4. Redis 客户端命令总结

    注意:括号里是参数,具体使用的时候不需要括号和逗号,直接使用空格分隔命令以及各个参数即可. 1.对Key操作的命令 exists(key):确认一个key是否存在.存在返回1,不存在返回0. del( ...

  5. 腾讯云播放器更新——TCplayer

    概述 最近腾讯云播放器进行了更新,增加了TCplayer,支持点播播放.由于工作需要,了解了一下TCplayer,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考文档: TCPlayer开 ...

  6. Shell-15--sed

  7. iOS开发笔记-Xcode添加pch文件

    xcode6以后苹果取消了pch文件,需要自己创建pch文件并手动添加引用. 1.新建pch文件 2.项目Build Settings添加引用 最后检查路径是否正确,编译一下查看是否出现问题. 如果出 ...

  8. spring boot集成 servlet自动注册的两种方式

    有两种方式:(两种方式同时存在时,@Bean优先@ServletComponentScan实例化,生成两个对象) 1)通过@ServletComponentScan类注解 扫描 带有@WebServl ...

  9. Excel设置excel打印每页都有表头标题

    Excel设置excel打印每页都有表头标题

  10. Postgresql ---plv8扩展(windows下安装过程)

    Postgresql下plv8安装过程其实很简单,但是在网络上搜集了半天都没有找到一篇满意的安装文档,现在总结如下: 1.下载和PostgreSQL相对应的plv8版本,下载地址如下: http:// ...