结构体-常不变语言
概述:
跟js差别不大,但Object\Array\Value默认定义好就是不可变的。没有变量,只有绑定像lisp。但需要副作用,副作用是get\set函数的Object。
比如字符串对象,可能是char[]+Length的对象,只存储最简与自己相关的数据,操作集成在第三方库中,如String\Object\Array。
结构体不应该取部分,只能用.操作符访问与传递,可以构造成为其它的部分??
对写编写者友好了,能更大范围地明确哪些受了副作用的影响,但仍然存在副作用且可传递副作用。是没有希望的,还得寄望得类似vue-react这种树状的局部副作用语言。
实现上,强类型结构体,是结构化语言,一经构造(类似js的Object与Array的构造)后只读不可打开。结构体更像契约。由于没有类,函数使用闭包替代类。组件-类有确定的构造函数,而不是js的Object或Array式构造。构造函数的参数却是契约的、临时调用实现、js的Object或Array的。比如
//声明返回特定类型
var a=function(p){
var me={
};
return me;
};
//调用时的参数是临时构造、满足契约
a({
});
强类型的好处自然是字典向数组方向的编译优化。
默认构造函数{}或[],自定义构造函数(用函数封装),是否可能函数参数也有自定义构造函数呢(不太好,注入只能是某个键)
还有闭包回调的参数-函数体实现。
函数调用必须带键,传统的类C++语言没有键,只有a.setB(xx).setC(yy).setD(xx).build()的构造过程,我觉得不好,易遗漏,默认值。而kotlin的扩展函数的注入——结果很好看,整体不喜欢,不喜欢面向对象,不可分割的只是最小无冗余集合,其它第三方库函数都通过这个最小集合来组装实现。
必须改造函数,使满足结构化的强类型,同时有构造过程。类就是覆盖结构体的默认构造过程(js式的构造)
//默认构造函数即为{x:xxx,y:xxx}
struct A {}
//重写默认构造函数
struct B{} function(p){}
//更完整的
B:Struct{//返回结构体}function(p){//构造函数}Struct{//参数结构体}
因为有值存储、字典存储、数组存储,外延有文件存储、数据库存储等副作用。又比如DOM上节点的属性存取,如果不知道内部实现,都是调用函数,调用函数传递不变结构体,永远只是创造与消耗,但因为创建实例,相当于动态创建了函数。函数是不可变实体唯一引用,有唯一副作用效果,有副作用的函数是针对性的,而不是类似+-*/有普适性,因为函数依赖创建的闭包环境,不同运算结果出来时代码中同一处函数不同。
JSON万能,比lisp好,有字典类型,但需要访问字典类型的键的方法,点访问符甚至不必是数组的[]访问。