返回值类型有哪些

您所在的位置:网站首页 关于函数中的返回类型有哪些 返回值类型有哪些

返回值类型有哪些

#返回值类型有哪些| 来源: 网络整理| 查看: 265

返回值类型有哪些

_

关于类型的思考

ts⽤得很爽,实现了我⼼⽬中关于类型的想法。类型!=⾯向对象。类型甚⾄不是真实存在的,运⾏期会移除,只是辅助代码编写。类型是别

名,本质上只要满⾜鸭辨就是同⼀类型。联合类型的区分太智能了,再以联合字符串为本质。字符串的等⽐较太常⽤了,在各lisp都成了

match语法,进⼀步⾛向prolog,像sql分析数据库。

类型有什么⽤?脚本语⾔本来有各种基础类型,再标注上各种类型,脱裤⼦放屁?⽽且很多复杂的类型⼿写很困难,在ts⾥遇到了,java等

传统⾯向对象语⾔不会遇到,但等效的在不断创建新类型,代码与概念暴增。标注类型能帮我们静态分析,在编译期——类型语⾔是区分编

译期的。可是单独编译效率仍然太低下了,IDE能实时分析实时提⽰,与其说⾯向编译,不如说⾯向IDE,有IDE这么智能的⼯具应⽤起来,

谁愿意回到⼑耕⽕种的时代。

所以标注准确说不应该叫类型标注,⽽是⾯向IDE标注,使⽤这样的标注⽅式,IDE能帮你检查。代码是实现需求,标注是获得检查,脚本上

的脚本,替代的是单元测试。以字符串联合为基础的ts,其实本⾝就更完善地覆盖了很多单元测试的情况,少写了很多代码。为什么说是⾯

向IDE⽽不是说强类型?很多时候⼿写类型太多,类型间有因果关系,就希望⽤宏来⽣成类型,这时IDE实时执⾏了宏脚本⽣成了⽬标类型,

也不⽤⼀次重构处处修改,代码更内聚了。脱离了IDE谈类型是⽆稽之谈,编程语⾔更确切是某种IDE的特定交互⽅式,IDE就是最智能的⼈

机交互。

验错,提⽰,重构,是类型的⽤处。IDE可以对代码序列化反序列化,⽤json-AST传输转换成另⼀种语⾔。IDE应该是⽅便复制拷贝的⽂

本,容错,下拉提⽰,错误提⽰,灵活的输⼊——有了这些能⼒,可以⽤脚本灵活定制IDE。

————————————

量变引发质变,虽然我⾃制的S-Lisp不带类型标注,但其实很多函数有明确的类型,但如果能明确地写出来,⾄少可以减少长篇⼤论的说明

吧。但⼀直也没找到好的⽅法。

类型是确实存在的,作为S-Lisp的基础类型,列表空布尔字符串数字(int)函数。意味着某些数据,在某些函数的操作下是绝对安全的,但如

果是另⼀种数据,就是低级的错误。⽐如extend函数的第⼆个参数只能是列表或空,⽽不能是布尔/字符串或函数。

因为很多条件分⽀的嵌套,脚本语⾔很难检查低级错误,但脚本确实很强⼤,基本上就是按照⼈的⾃然思路来。更别说parse函数等返回的

类型的不确定性。脚本语⾔基本上是⼀个⼈是⼀条龙,三个和尚没⽔喝。这时候似乎Java是更正式的,Java有强⼤的重构能⼒,字段与类

型的检查,同时还有匿名类,基本上⽐其它⾯向对象语⾔贴近函数式编程。

我曾简单地设想对基础的内置函数标注类型,在具体计算之外单独做⼀次基于流程的lambda类型演算,保证系统⾄少不存在低级类型错

误。其实如果从重构⾓度,有了类型演算的检查,重构也会有保证了。我希望有⼀种简化版的Java,保留其强⼤的类型与字段验证、重构能

⼒和匿名类,必要时候可以舍弃类型的概念。

简化的Java,应该舍弃中缀表达式,幸亏Java还没有⾃定义中缀表达式,不然优先级也是⼀笔糊涂账。中缀表达式只能接受两个参数,⽼

⽼实实⽤括号不会错,如果⽤的是S表达式就更好了。Java没有重载操作符,这也很好。Java还应该加上空联合,像kotlin⼀样尽早区分。

if语句与while语句应该是函数式的,返回值,尽量⽆副作⽤,减少概念...。

总是难免要重构的,尤其是分散的引⽤,乃⾄作为库被别⼈引⽤。JS系字典作参数,增量的改造可以不处理,破坏性的改造,稳妥的办法就

是新建带版本号的函数,旧引⽤仍然能正常⼯作,但很丑,同时如果旧函数内部本来存在逻辑问题,就没办法了。功耗可能要⼤⼀些。脚本

的系统仍然得靠⼈的统筹管理(不过事实上现在的什么系统不是三五年就过时了?)

既然重⼤的重构能⼒与类型演算殊途同归,其实也只是回过头考虑给脚本加上⼀些限制,使尽量保留脚本的灵活,同时获得类型验证。⽐如

可能parse函数就没有了。如果完全不写类型标识,可能问题⽐较多的是if语句。

我曾经想联合类型是像TypeScript⼀样,与空联合也只是普通的⼀种了。事实上每个列表(元组)类型都不同,函数更不同,便⽣出析分

类型处理的问题,似乎超出了脚本的能⼒。然⽽事实上联合的类型多了⼈也不好分辨,JS等只动态地检查它是空/列表/布尔/函数/字符串,

⽽Java⾥更只有与空联合,那就只允许与空联合吧。

因为不强制类型转换,可能有个特殊的函数(或标识),⽐如if-exist-run,将空联合分成两种情况分⽀去处理。然⽽和其它if语句⼀样两种

情况只能返回⼀种类型,或者与空联合,得检查两个分⽀返回的同⼀种类型(或内中⼀种为空)。

如果完全不标注类型,还有⼀点好处,所有函数都像C++中的泛型函数⼀样,只要在具体运⾏场合不出错就OK。在if系语句中如何确定⾃

定义函数的类型?

⽽且类型隐含了兼容性,⽐如⼀个接受任意类型的函数,可以替代任何作参数的特定函数(还有返回值的约束)。kvs属于List,兼容于

List的所有操作。

在这其中其实我想到⼀种类型的表⽰⽅法,很S-Lisp,⽐如



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3