logo BT编程语言
首页动态文档关于登录更新记录
BT语言的语法设计
随笔 2024-11-08

链式语法

在设计BT语言的时,初步设定是支持链式语法,因为在使用PHP语言时,函数嵌套太过麻烦,例如: 明明实现一个简单的字符串处理,却不能简化,甚至代码需要从右向左去读,十分费解,所以我就有了开发一套能支持链式语法的脚本语言,这是我的初步定位,经过一段时间的努力,BT语言实现了,支持链式语法,将上面的代码转成BT语言:

原型函数的重要性

链式语法的好处非常明显,从左往右执行,也简单易懂,更重要的是你永远不必因为传参而感到困惑! 为什么这么说呢?例如在BT语言中基础数据类型都拥有原型函数,类似Rust和JavaScript的机制,拿str.join()来说,join基于字符串类型实现,所处理的也是str本身,但是在PHP中让人十分困惑,我们举例来说明: implode这个函数主要处理数组,我们将所有的传参分为两种,一种是用于处理该数据本身的参数,我们称作源数据,例如$array,另一种是辅助参数,例如这个用于分割的逗号:,通过implode这个函数你会发现,源数据放在了第二位,辅助参数放在了第一位,咱们再看一个例子: 你会发现源数据参数又放在了第一位,而辅助参数放在了第二位,Why?trim这个函数的第二个参数并不是非必填的,但是两个参数都是字符串类型,程序设定的时候完全可以判断一下,将源数据放在第二位,如果只有一个参数的话,那么将第一个参数做为源数据。 PHP中关于这种函数的参数设定对我来说是很乱的,但是链式语法不一样,你永远不用为传参感到困惑,因为她是基于数据原型的函数,不必传递源数据参数,所以你可以随心所欲的操作:

声明函数为什么用fn

BT语言的链式语法参考了Rust和JavaScript,上面这个例子中可以看到函数的关键字用到了fn,这个关键字用于声明函数。 一般的编程语言用function比较多,但BT语言延续了母语Rust的写法,用fn来声明函数,有的语言使用func,说实话,个人非常不喜欢,要简洁就简洁一点嘛,感觉去掉了tion好难看,还不如直接用全称,所以最终考虑了fn。 在BT语言中,函数的参数可以设置默认值,此方式参考了JavaScript,这里要说明一下,函数的返回值在默认情况下取的最后一条语句,你也可以使用return语句来设置返回值,此方式参考了Rust语言。

条件表达式

在BT语言中,条件表达式也参考了Rust,使用if关键字,后面跟一个条件表达式,注意,条件表达式无需括号,包括各类循环,条件表达式都不需要括号,例如: 条件表达式的括弧是多余的,除非你需要显式地改变优先级,例如: 所以在BT语言中,推荐不使用括号,因为没有必要,虽然她是支持的,但我相信,哪怕你已经习惯了使用括号,当你使用BT语言时,你会慢慢发现,不使用括号是很爽的一件事。 这里我考虑到了花括号是否也要去掉,但是综合考虑之下,认为花括号是必须的,因为花括号可以避免不必要的错误,也使代码更加清晰,更加易读,这一点也是因为Python通过缩进来定义代码块的结构,而不是使用花括号,你必须要保持代码的缩进结构,对我来说这失去了灵活性和自由,所以深重考虑之下,保持花括号。

语句结束符

BT中语句无需添加结束符分号,换行和空格都属于结束符,虽然是支持分号的,但不建议使用。 上面这种形式是BT都支持的,从我个人审美观来说,我更喜欢用空格或逗号来分割单行语句,此语法参考了python。