查看原文
其他

一言不合就自己写了个编程语言

2017-07-27 悠悠然然 开源中国

点击图片报名参加广州&珠海源创会


序言


摘要: 最近一直在写一个脚本语言,主要对标对象是润乾的集算器、Python等。感觉润乾的集算器有一定的应用场景,但是类似excel的方式严重影响编程可接受程度,另外其有些语法感觉与java习惯也非常不一致,因此就自己动手写了一个,目前正在紧张的验证中,验证完毕将完全开源。 欢迎感兴趣的同学mark,到时一起玩耍。 最终开源的git地址是:http://git.oschina.net/tinyframework/tinyscript 正常是完善好文档再开源,如果fork超过1000+,马上开源,开源协议是Apache V2。


运行


我们提供了Eclipse和Idea插件,可以直接右键运行扩展名为tinyscript的文件哦


示例


99表

运行结果

我们支持简化的println,其实你用java的写法也是可以的,比如:System.out.println。

数组


运行结果

列表

运行结果

当然也可以有更好玩的动作

当然,来点lambda也是可以的:

运行结果:

Java语法可以直接使用

运行结果:

当然脚本语言中的结果也可以在Java里面完美使用,完全没有违和感。

java的所有属性和方法都可以直接被调用:


运行结果:

这里也再次证明它和java都是完全一致的,从这个意义上说,他可以是ava的扩展。

当然,做它不是为了玩玩,当然是期望有比较简单的处理,这里的“#”表示集合元素的一个具体元素

运行结果:

上面的意思就是,对这个列表进行过滤,分别是取奇数、偶数和大于3的偶数。

由于后面的表达式可以任意编写,这样就有了非常好的适用场景了:


运行结果:

上面的逻辑是,取出年龄大于3且年龄是单数的用户列表。

Map


运行结果:

全排列

运行结果

当然你也可以对各种排列进行相关的处理

水仙花数

运行结果:

可以看到普通的算法是上面这个样子的。

采用全排列的算法是如下的:


运行结果:

可以看到比普通的算法多了两个0,1,原因是这里没有对000和001进行处理,直接转为0和1了,如果000=0、001=1,那么0、1也可以算作是符合条件的。

石头剪刀布游戏


运行结果:

看起来玩起普通的算法也是没有任何问题的。

类支持


运行结果:

计算连续3天涨停的股票

下面是某证券交易所一个月内的日收盘价记录,其中CODE列为股票代码,DT为日期,CL为收盘价。试找出这个月内曾连续三天涨停的股票。为避免四舍五入产生的误差,涨停的比率定为9.5%。

部分数据请见下图(完整记录请见附件stockRecords.txt,之后示例也遵守此规范)

这次的代码有点复杂,因此这里解释一下:

设定涨停增长率为0.095及以上。

从文本文件读取数据,当然从数据库读取也是一样的,只要改成如下即可:

然后增加一个列,并把CL列转成double,然后按CODE分组,然后按DT排序。

然后每支股票的第一天的增长率设置为0,然后,计算后面的增长率。

然后过滤连续3天增长率都大于涨停的股票。

运行结果:

计算订单邮费

 某B2C网站需要计算订单的邮寄费用,大部分情况下,邮费有包裹的总重量决定,但是,当订单的价格超过300美元时,提供免费付运。详细规则如下面的mailCharge表所示:

该表记录了各个字段在各种取值范围内时的邮费。例如,第一条记录表示,cost字段取值在300与1000000之间的时候,邮费为0(免费付运);第二条记录表示,weight字段取值在0到1(kg)之间时,邮费为10(美元)。

某B2C网站需要计算订单的邮寄费用,大部分情况下,邮费有包裹的总重量决定,但是,当订单的价格超过300美元时,提供免费付运。详细规则如下面的mailCharge表所示:

该表记录了各个字段在各种取值范围内时的邮费。例如,第一条记录表示,cost字段取值在300与1000000之间的时候,邮费为0(免费付运);第二条记录表示,weight字段取值在0到1(kg)之间时,邮费为10(美元)。

下面是该网站的一些订单:

请计算这些订单的详细邮费。

运行结果:

统计销售大户

下面是某企业的历史销售合同记录:

下面是某企业的客户信息表:

某年内按销售额排名的客户,达到一半销售额的前n个客户称为该年的“大客户”,请列出1998年该企业的大客户名单。


运行结果:

统计客户账户余额

一共涉及四张表,首先是Customers表,记录了客户ID和客户的账户余额:

第二张表是Orders表记录了每个订单以及它的客户:

第三张表OrderDetails表记录了每个订单的详细信息,包括订购的产品ID以及数量:

最后一张表Products表记录了企业所有的产品信息:

问题是为每一个订购了公司所有产品的顾客求出平均acct_balance(账户余额),并为每一个没有订购所有产品的顾客求出平均账户余额。


运行结果:


更多干货请前往公众号菜单栏“戳我”->“干货分享”查看。



推荐阅读

我写了一门编程语言,你也可以!

高性能 React: 3 个提升 APP 速度的新工具

Spring 思维导图,让 Spring 不再难懂(mvc篇)

2017 开发者生态报告:Java 最火,Go 最有前途

点击“阅读原文”查看更多精彩内容

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存