从编译器的角度理解代码中的各种古怪写法

在编写代码时,总会遇到一些“奇怪”的要求或者约束,仔细想想跟正常逻辑似乎不太对应,这时候就需要换个角度来理解了。

比如,按照声明顺序初始化,对象初始化包括两步操作,先初始化后计算赋值。
再比如,代码中的一些稀奇古怪的写法,列表方式,,,,Java的main在class中(虽然这是为了贯彻Java的彻底面向对象要求,但是个人觉得main单独提出来,按照其本意独立使用,似乎更好理解)。

其实,这些都转换成容易理解的方式即可,不必去深究,否则就是钻牛角尖了。因为他们都只是语义的表达,严格来讲,并非完全、严密的符合数学中关于闭合系统的定义。比如类的定义中使用类的类型(这时候类可能还没有描述完成,逻辑上讲是不合理的)。这些东西,只要符合语言的语法即可,因为有更严格的编译程序,以语法为框架和约束条件,对代码进行解释处理,将其转化为更加严格的,更加符合逻辑的形式。最终会是代码的等价形式,但是解释可能就不一样。

类似的,对于一个类的定义中,使用类的各种操作,严格意义上来讲,类的定义未完成,使用类的东西,是不符合逻辑的,至少按照先有后用的逻辑来理解是这样,因为有些东西还没有确定下来。但是代码写完了,类的定义肯定也就完整了,我们可以理解,编译程序解释代码时,如果发现类的定义还没有完成,就用到了类的一些东西,那么可以先把使用的地方空下,等类的定义完整了,再补充上去。但是,如果要求写代码时,类定义未确定前,不能使用该类型,那么,按照这种方式来写,最终代码可能太死板或者会太别扭,更有可能需要考虑额外考虑本来可以由编译器做的部分工作,这进一步的影响到效率。

总的来讲,编译器就类似做了代数工作,用xy先代替,完了再替换。
另一个方面,可以将代码看成是意思的表达,编译器看作是解释的表达,最终转化后,是内存的一片土地上的各种建筑元素,用来构成最终的大建筑的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值