编程杂感两篇

技术评论 同时被 2 个专栏收录
4 篇文章 1 订阅
1 篇文章 0 订阅

(一)

Null是个巨大的错误吗?

为null正名。

null可以表示未初始化的引用。为什么不强迫初始化,因为初始化时可能抛异常。变量声明放进try块,又可能有跨作用域的需求。一种常见的做法是大改语法引入maybe关键字支持代数类型,并且函数做模式匹配,否则难以完美处理这个问题。另外,每个处理meybe类型变量的函数,无非强制写两个分支分别处理nothing和just,本质就是强迫程序员分别处理null变量和已初始化变量,虽然好处是从文法上保证程序的正确性。但是实践中识别null变量也可以留给程序检查或者IDE插件来实现,而大部分IDE也已经做到了。
null也可以用来表示空的返回值。同样,调用者要处理null或non-null返回值。如果文档明确提醒使用者有可能会返回null值,实践中是可行的,这也是惯例。返回一个maybe类型未尝不可,但是在面向对象编程实践中,这又增加了抽象的层次(比如协变的概念,假如要利用返回对象的虚函数),增加了开发者的脑力负担。

所以说,null还是有好处的。尤其在IDE的帮助下,降低了开发的难度。

(二)

Java与C++编程效率。

Java借力软件工程,C++重视与计算机底层的结合。

面向对象的软件设计方法,第一件事是建模,把现实抽象为若干个类,定义若干接口。C++软件的设计,从现实抽象建模的同时,手动管理对象生命周期,容器、工厂类设计好,谁创建对象,谁负责对象的销毁,谁只是持有指针,对象析构同时释放资源,这些都要考虑。同时也要考虑计算机底层的内存分配,甚至要考虑CPU cache、分支预测、IO效率等。所以C++要设计好,需要考虑更多底层实现。

但是,Java的虚拟机,帮你解决了大部分底层问题,比如GC。你只需关注在抽象层,设计好容器、工厂、事件,对象生命周期问题JVM帮你解决。同时,Java有反射和注解,更方便对象的管理,软件工程上带来IOC、AOP思想,造就了各种框架。于是更有利于解耦,把应用开发变成了模板填空。降低了每个人的心智负担,便于分工协作,自然提高效率,降低开发难度。应用开发的最省力方式就是,拖控件,填模板。

以上所说只是单纯对比开发相同大小的两个小程序,而不牵涉后台的数据库、并发、缓存这些架构问题。而这些更是Java的强项,强大的开源生态,跨平台的开箱即用,也大大提高了开发效率。

原为某问答网站上两个回答,现收藏入blog,note之。
  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

nklofy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值