编程杂感两篇

2023-11-20

(一)

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之。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程杂感两篇 的相关文章

  • 项目开发中开发文档出现的问题及其对策

    在常规项目开发管理中 很多项目专家都提出要用各种各样规范的文档对开发工作进行管理 但是在日常工作中 由于这些文档的编写的管理工作都是相当繁重的 以致让一线员工不能主动积极使用 更新这些文档 长期下来 这些管理型的 设计型的文档所发挥的作用就
  • [springboot+thymeleaf ] 前台js读取后台传值

    后台代码 通过ModelAndView类型返回 RequestMapping value list method RequestMethod GET public ModelAndView list RequestParam value p
  • 【infiniband】 MAD、 uMAD、Verbs、RDMACM

    1 MAD Management Datagram MAD是InfiniBand网络中用于管理和配置的数据报文 它包含了各种类型的管理操作 如查询端口状态 配置端口参数等 MAD通常用于执行网络管理任务 2 uMAD User MAD uM
  • tcp/ip在物理层/数据链路层 实现简单抓包

    socket的精妙之处在于协议族的横向转换和地址族的纵向转换 我们也可在更底层实现对流经host的数据流的监督和修改 尤其是监察数据 十分简单 这里是混杂模式实现对ip数据流的监察与对tcp数据流的简单查看 需要root权限 这里忽略了tc
  • 3年c/c++开发总结(二):书籍[1]

    对3年来学习中书籍的整理 评价 主要为c c 方面 分数为个人意见 虽然大家都知道 但还是强调下 免得口水 分1 5 5为最高 格式 英文名 中文名 作者 出版社 个人评价 评分 无译者说明是因为建议看原版 p s 国产图书要努力 因看过的
  • QT文件读取路径

    最近在弄中兴的一个程序大赛 用QT读取XML文件的编程 在编程中发现QT文件读取路径与VS有不同之处 我们提供给QFile的文件路径无非就是绝对路径和相对路径 绝对路径是绝对没问题的 不过相对路径就得小心了 谈到相对路径 需要注意区分进程所
  • 工控上位机程序为什么只能用C语言?

    工控上位机程序并不只能用C 开发 实际上在工业自动化领域中 常见的上位机开发语言包括但不限于以下几种 C C 是一种常用的编程语言 在工控领域中被广泛使用 它具有良好的面向对象特性和丰富的类库支持 可以实现高性能的上位机程序开发 C C C
  • 终于有人把软件测试用例讲清楚了(一定要收藏)

    目录 1 公司流程 1 1 测试用例的4个特性 1 1 测试用例通常包括以下几个组成元素 1 编写测试用例的基本方法 1 1 1 概念 1 1 1 示例 1 1练习案例 1 1 边界值法 1 1 1 确定边界值的方法 1 1 因果图法 1
  • Python如何执行shell脚本

    Python如何执行shell脚本 自从出了Pyhon3 5之后 os模块下的system os popen 基本被废弃了 因此如下只介绍2种方式 一 使用commands模块 有三个方法可以使用 1 commands getstatuso
  • MFC多线程编程之一——问题提出

    原文地址 http www vckbase com document viewdoc id 1704 一 问题的提出 编写一个耗时的单线程程序 新建一个基于对话框的应用程序SingleThread 在主对话框IDD SINGLETHREAD
  • Python沙雕故事生成器

    Python故事生成器 本文章小编来给大家分享使用Python制作一个故事生成器 仅供娱乐 一 知识归纳 StringVar 控件变量 python中在使用界面编程时 用于跟踪数值不断发生变化的变量 确保数值的变更可以随时在根窗口上面显示出
  • 初学者怎么高效率学习c语言?

    想学C语言我们首先的了解C语言是什么 它是一门面向过程的 抽象化的通用程序设计语言 广泛应用于底层开发 C语言能以简易的方式编译以及处理低级存储器 C语言是仅产生少量的机器语言以及不需要任何运行环境支持就可以运行的高效率程序设计语言 尽管C
  • java 字符串拼接

    最常用的有4种方法 运算符 如果拼接的都是字符串直接量 则适合使用 运算符实现拼接 public static void main String args method1 字符串拼接 public static void method1 S
  • 全面分析冒泡排序过程

    冒泡排序也是一种简单直观的排序算法 其思想是 它重复地走访过要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 也就是说该数列已经排序完成 这个算法的名字由来是因为越小的元素会经
  • 使用CUDA和CUFFT进行快速1D卷积的示例

    使用CUDA和CUFFT进行快速1D卷积的示例 在计算机视觉 数字信号处理和机器学习中 卷积是一种常见的操作 然而 卷积操作通常需要大量计算 因此需要一种高效的方法来完成 CUDA和CUFFT可以用于对使用FFT的快速1D卷积进行加速 在本
  • 各种汇编器masm masm32 fasm nasm yasm gas的区别

    原文地址 http www verydemo com demo c269 i661 html masm MASM是微软公司开发的汇编开发环境 拥有可视化的开发界面 使开发人员不必再使用DOS环境进行汇编的开发 编译速度快 支持80x86汇编
  • 在Qt Creator中实现Android设备调试

    在Qt Creator中实现Android设备调试 要在Qt Creator中调试和运行Android应用程序 需要先连接设备并设置Qt Creator以使用适当的工具链 本文将介绍如何在Qt Creator中连接Android设备并配置Q
  • C++简易计数器

    Created by Carlgood Note This program is written in version DEV C 5 11 include
  • 刚入行的嵌入式新人是否值得坚持嵌入式方向?

    今日话题 刚入行的嵌入式新人是否值得坚持嵌入式方向 如果你正在学习C语言或者嵌入式方向 坚持下去是一个明智的选择 嵌入式行业涉及硬件 技术更新相对较慢 但这为你积累宝贵的经验提供了机会 与纯软件相比 具有独特的优势 我提供了一套全面的嵌入式
  • 学习STM32正点原子好吗?

    今日话题 学习STM32正点原子好吗 正点原子的教程内容简单明了 代码也清晰直接 使初学者能够轻松理解其功能和使用方法 尤其对于需要快速完成大学作业等任务的大学生来说 可以直接借鉴并稍作修改 便可满足需求 正点原子提供的资料通俗易懂 适合用

随机推荐

  • Java中的List接口

    文章目录 前言 一 什么是List 二 List常见接口介绍 三 List的使用 总结 前言 以实践为线索 逐步深入数据结构和算法 提升编程能力和思维能力 一 什么是List 在集合框架中 List是一个接口 继承自Collection C
  • git 新添加一个项目

    如何将一个新的项目放到制定的git地址上 1 创建一个项目 2 在githup上添加一个仓库 3 在命令行模式下 在指定的目录下 git init 此处需要修改一下ignore文件 git remote add origin https g
  • jvm之栈、堆

    1 Java Virtual Machine 人群当中 一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌 就在此时 c老头和c 老头缓步走来 看着被众人围住的java c老头感叹地对着身旁的c 说道 原以为你就可以挑起我的梁
  • 反斜杠“\”与斜杠“/” 的区别

    与 的区别为 用途不同 系统不同 网址不同 一 用途不同 1 只能用来表示目录 2 技能作为除法符号或者间隔符号使用 也能用来表示目录 二 系统不同 1 用作目录时 适用于windows系统 2 用作目录时 适用于unix系统 也可用于wi
  • Kali安装配置中的一些小细节

    整理文档时 找到了一年前的一些文档 零零散散 在其中看到了一篇在初学kali时写的注意点 我根据更新做了一些修改 都适用于kali最新版 希望能帮助一些自学 初学者比当年的我更快弄懂 Ubuntu系统学习 主机名 kali name rid
  • Tcl-10. 字符串比较,匹配,替换,类别,映射,string 相关

    一 字符串比较 string compare string equal 我们在 expr 和控制语句如 if while 中可用比较运算符 等来进行字符串比较 但是如不注意的话就会产生问题 首先必须用双引号来将字符串值括起来 这样表达式语法
  • ant-design-vue 全局和局部引入组件

    1 全局引入 在main js里面引入 import Vue from vue import ant design vue dist antd css import Antd from ant design vue Vue use Antd
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • Error:(3, 32) java: 程序包org.springframework.boot不存在

    1 Error 3 32 java 程序包org springframework boot不存在 近期使用IDEA2020 1版本创建springboot项目的时候 运行主启动类后 突然就报错 错误如下 找了很多解决办法 刷新了很多遍Mav
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • RT-Thread记录(七、IPC机制之邮箱、消息队列)

    讲完了线程同步的机制 我们要开始线程通讯的学习 线程通讯中的邮箱消息队列也属于 RT Thread 的IPC机制 目录 前言 一 邮箱 1 1 邮箱控制块 1 2 邮箱操作 1 2 1 创建和删除 1 2 2 初始化和脱离 1 2 3 发送
  • 骑马与砍杀服务器修复,《骑马与砍杀2》新热修补丁:联机社交系统更新、修复单机崩溃...

    目前 骑马与砍杀中文站官博公开了 骑马与砍杀2 7月1日Beta e1 4 1测试版公共版热修补丁 此次热修补丁会更新联机社交系统 同时还会修复单机崩溃问题 以下为官方原文 官博截图 公共版 版本 Native e1 4 1 Sandbox
  • qt 获取父类指针

    QWidget QWidget parentWidget const Returns the parent of this widget or 0 if it does not have any parent widget
  • 单向散列函数的性质

    一 根据任意长度计算出固定长度的散列值 首先 单向散列函数的输入必须能够是任意长度的消息 其次 无论输入多长的消息 单向散列函数必须都能够生成长度很短的散列值 如果消息越长生成的散列值越长的话就不好用了 从使用方便的角度 散列值的长度最好是
  • 运行Chrome中的app

    chrome apps
  • python中and与or的计算规则

    1 在纯and语句中 如果每一个表达式都不是假的话 那么返回最后一个 因为需要一直匹配直到最后一个 如果有一个是假 那么返回假 2 在纯or语句中 只要有一个表达式不是假的话 那么就返回这个表达式的值 只有所有都是假 才返回假 3 在or和
  • git 报错did not match any file(s) known to git

    前言 在使用gitLab中时遇到一个问题 就是我在gitLab新建分支后 在本地切换分支不成功 遇到了这个问题 在大佬的博客的指点下 顺利解决这个问题 记录下我一步一步解决问题的过程 最后面是我参考大佬的地址 有兴趣的朋友可以去看一下 问题
  • 使用花生壳将自己的Linux主机配置为服务器

    1 服务端花生壳配置 http service oray com question 11630 html 如果在客户端连接失败 在这里点击诊断 如果局域网服务器连接成功才行 不成功可能的原因有两个 1 配置不对 内网主机要写Linux主机的
  • matlab产生高斯噪声

    randn randn random normal distribution 是一种产生标准 正态分布的 随机数或 矩阵的函数 属于MATLAB函数 返回一个n n的随机项的矩阵 如果n不是个数量 将返回错误信息 MATLAB函数randn
  • 编程杂感两篇

    一 Null是个巨大的错误吗 为null正名 null可以表示未初始化的引用 为什么不强迫初始化 因为初始化时可能抛异常 变量声明放进try块 又可能有跨作用域的需求 一种常见的做法是大改语法引入maybe关键字支持代数类型 并且函数做模式