BT语言的语法设计
随笔
2024-11-08
←
链式语法
在设计BT语言的时,初步设定是支持链式语法,因为在使用PHP语言时,函数嵌套太过麻烦,例如: $str = preg_replace('/(\d+)/', '($1)', substr(trim(' hello world! '), 2, 13)); 明明实现一个简单的字符串处理,却不能简化,甚至代码需要从右向左去读,十分费解,所以我就有了开发一套能支持链式语法的脚本语言,这是我的初步定位,经过一段时间的努力,BT语言实现了,支持链式语法,将上面的代码转成BT语言: str = ' hello world! '.tirm().substr(2,13).replace(/(\d+)/,'($1)')原型函数的重要性
链式语法的好处非常明显,从左往右执行,也简单易懂,更重要的是你永远不必因为传参而感到困惑! 为什么这么说呢?例如在BT语言中基础数据类型都拥有原型函数,类似Rust和JavaScript的机制,拿str.join()
来说,join基于字符串类型实现,所处理的也是str本身,但是在PHP中让人十分困惑,我们举例来说明:
$array = [1, 2, 3, 4, 5];
$string = implode(',', $array);
echo $string; // 输出:1,2,3,4,5
implode这个函数主要处理数组,我们将所有的传参分为两种,一种是用于处理该数据本身的参数,我们称作源数据,例如$array,另一种是辅助参数,例如这个用于分割的逗号:,
通过implode这个函数你会发现,源数据放在了第二位,辅助参数放在了第一位,咱们再看一个例子:
$string = "<pre>hello<pre>";
echo trim($string, "<pre>"); // 输出:hello
你会发现源数据参数又放在了第一位,而辅助参数放在了第二位,Why?trim这个函数的第二个参数并不是非必填的,但是两个参数都是字符串类型,程序设定的时候完全可以判断一下,将源数据放在第二位,如果只有一个参数的话,那么将第一个参数做为源数据。
PHP中关于这种函数的参数设定对我来说是很乱的,但是链式语法不一样,你永远不用为传参感到困惑,因为她是基于数据原型的函数,不必传递源数据参数,所以你可以随心所欲的操作:
arr = [1,2,3,4,5]
print arr.map(v->v*2).join(',')