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

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

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

一些背景资料: 官方网站

  • 第三版(最新)源码库, 用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。

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

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

    "中文编程"知乎专栏原链 原文: 日语编程语言"抚子" - 第三版特色初探 它山之石可以攻玉. 学习其他的母语编程语言, 相信对中文编程语言的设计和实践有借鉴意 ...

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

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

  3. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  4. 《CLR.via.C#第三版》第一部分读书笔记(一)

    最近开始仔细研读<CLR.via.C#第三版>这本书.读pdf文档确实很累.建议有条件的朋友还是买书看吧. 我的笔记用来记录我对这本书的理解,简化下逻辑,对每个部分我觉得是要点的进行归纳总 ...

  5. JavaScript高级程序设计(第三版)学习,第一次总结

    Array类型 var arr = []; arr.length; //返回数组元素个数 改变length可以动态改变数组大小 检测数组 instanceof可以检测某个对象是否是数组,限制:只能是一 ...

  6. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  7. Ztree手风琴效果(第三版)

    第一版:点击一级目录展开,再点击时不能收回 第二版:点击一级目录展开,再点击时可以收回 第三版:优化样式,修复主菜单下的子菜单下级无子节点时点击无反应问题(js报错) <%@ page lang ...

  8. 如何学习C++? C++ Primer第三版中文版

    C++只是一门工具,要在实际项目中才能感受到它的伟大.是慢慢积累的(任何知识都是,冰冻三尺非一日之寒),它的思想是慢慢领悟的. 知道它的语法不代表你会用,你会用不代表你就会建造起高水平的作品,这是一个 ...

  9. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

随机推荐

  1. linux进程管理和系统状态查看命令简介

    1 进程管理简介 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 2 常用命令 2.1 pstree 2.1.1 功能描 ...

  2. tyvj4865 天天和树tree

    #include<bits/stdc++.h> #define MAXN 100000+10 using namespace std; *MAXN]; ,head[MAXN],pre[MA ...

  3. C++ stack

    stack 栈,一种后进先出的数据结构,在c++ stl里作为容器适配器,string,vector,deque,在内存中是连续的 声明方式 stack<int,deque<T>&g ...

  4. Android 从零搭建简单MVP Demo

    首先简单介绍一下MVP的构成及优缺点: MVP的全称为Model-View-Presenter, Model提供数据(网络请求.数据存储等): View负责页面显示: Presenter负责逻辑的处理 ...

  5. loadrunner 参数存储在data.ws、paralist、globals.h 中区别(参数与变量额区别于使用)

    1.如果变量数据只有一个值,可以直接放在data.ws 中    2.如果变量要根据循环取随机值.序列值等(参数存在一组值),放在paralist中     3.如果是申明全局变量,且要在代码中用到参 ...

  6. 【Access2007】解救被阉割的truncate

    Access2007使用被阉割的J-SQL语句,语法跟T-SQL语句.也就是寻常最标准的SQL语句一模一样,但就是仅保留insert into,delete,select,update与没太大意义的过 ...

  7. c++中虚多态的实现机制

    c++中虚多态的实现机制 參考博客:http://blog.csdn.net/neiloid/article/details/6934135 序言 证明vptr指针存在 无继承 单继承无覆盖 单继承有 ...

  8. flask框架-decorator装饰器

    调用包: from functools import wraps 装饰器其实就是一个函数:参数是一个函数,返回值是一个函数 1.装饰器使用是通过@符号,在函数的上面 2.装饰器中定义的函数,要使用*a ...

  9. Python 爬虫 爬校花网!!

    爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 1.福利来了  校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易不会受到打击,第二呢 你懂得... 1.第一步,需要下载 ...

  10. JAVA入门[10]-mybatis分页查询

    1.添加分页插件 在mybatis-generator-config.xml添加plugin节点: <plugin type="org.mybatis.generator.plugin ...