点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

专栏:代码之丑(七)——你的语言

  • 2010-12-06
  • 本文字数:939 字

    阅读完需:约 3 分钟

这是一段用 C++ 编写的数据库访问代码:

复制代码
int Comm::setIDBySevNum(const XString& servnumber) {
DB db;
db.setSQL("select id from users where servnumber=:servnumber");
db.bind(":servnumber", servnumber.c_str());
db.open();
if (!db.next()) {
return -1;
}
setID(db.getString(”id"));
return 0;
}

它告诉我们,如果找不到需要的值,那么操作失败,返回 -1,否则,返回 0,成功了。

显然,写下这段代码的人有着 C 语言的背景,因为在 C 语言里面,我们常常会用整数表示成功失败。我说过,这是一段 C++ 代码,而 C++ 里面有一种类型叫做 bool。

整数之所以能够占有本该属于布尔类型的舞台,很大程度上是受到 C 语言本身的限制。当然,C99 之后,C 程序员们终于有了属于自己的体面的布尔类型。

只是还有为数不少的 C 程序员依然生活在那个蛮荒年代。于是,很多人通过各种不尽如人意的方式模拟着布尔类型。不过,我们也看到了,偏偏就有这些生在福中不知福的程序员努力的重现着旧日时光。在我的职业生涯中,我见过许多用不同语法编写的 C 程序。

就个人学习语言经验而言,了解了基本的语法之后,如果有可能,我希望找到一本 Effective,寻求这门语言的编程之道。很多语言都有着自己的 Effective,比如《Effective C++》、《Effective Java》、《Effective C#》,等等。

不了解语言,也会给丑陋代码可乘之机。比如,下面这段 C++ 代码;

复制代码
void CommCode::notifyCRM(XString* retparam) {
if (NULL == retparam) {
throw IllegalArgumentsException(GetErrorMsg(" CommCode ::notifyCRM"));
}
...
}

如果把指针换成引用,就可以省去参数为空的判断,因为在 C++ 里,引用不为空。这里选择了一个简单的例子,而在真实的代码里,这种检查漫天遍野,其丑陋可想而知。某些函数里面,检查甚至超过了真正的执行部分。

工欲善其事,必先利其器。有了铲子,就别再用手挖地了。

作者简介:

郑晔,ThoughtWorks 公司咨询师,拥有多年企业级软件开发经验,热衷于探索各种程序设计语言在真实软件开发中所能发挥的威力,致力于探寻合理的软件开发方式,加入 ThoughtWorks 公司后,投入到敏捷开发方法的实践之中,为其他公司提供敏捷开发方法方面的咨询服务。他的 blog 是梦想风暴

查看原文:代码之丑(七)

2010-12-06 17:285277
用户头像

发布了 22 篇内容, 共 13.2 次阅读, 收获喜欢 48 次。

关注

评论

发布
暂无评论

职场“35岁现象”:焦虑 or 出路?是时候说出真相了!

狂师

职场 成长 软件测试 测试 软件开发

Kafka系列第4篇:消息发送时,网络“偷偷”帮忙做的那点事儿

z小赵

kafka 推荐 实时计算

缓存的五种设计模式

Rayjun

缓存

Kafka系列第1篇:Kafka是什么?它能干什么?

z小赵

大数据 kafka 推荐 实时计算

如何优雅的接收正在运行古董代码?

冰临深渊

项目管理 架构

游戏夜读 | 2020周记(4.3-4.10)

game1night

记录自有意义

彭宏豪95

人生 写作 感悟 记录

为AndroidApk添加系统级签名

Howe

Java android

高仿瑞幸小程序 01 初建项目,引入Vant Weapp

曾伟@喵先森

小程序 微信小程序 大前端 vant

Spring中的测试类~简洁方便

程序员的时光

spring

20 大类,100+ 网络副业兼职平台汇总推荐

一尘观世界

程序员 自由职业 副业 赚钱

制作Unknown Pleasures效果图的3种方法

张云金_GISer

设计 T恤 GIS 地图

Nacos 1.1.4 与微服务的实践经验记录

itfinally

Java 微服务 nacos

KubeFATE: 用云原生技术赋能联邦学习(二)

亨利笔记

Kubernetes 云原生 k8s FATE KUBEFATE

太极宗师与华晨宇

伯薇

水平思考力 电视剧 综艺节目 歌手

MyBatis核心功能介绍

Java收录阁

mybatis

Java新技术:文字块

范学雷

Java 编程语言

程序员陪娃漫画系列——上学路上

孙苏勇

程序员 生活 陪伴 漫画

JAVA中Base64加密与解密

Howe

Java base64 加密解密

周日福利来了

志学Python

Python 福利 python教程 python视频教程

Flutter引擎源码解读-Flutter是如何在iOS上运行起来的

稻子

flutter ios 移动应用 跨平台 dart

聊聊测试工程师的价值

软件测试 质量 测试工程师产出 测试的价值

动态规划问题的思路和技巧

Kenn

算法 动态规划

目标:2020年学会写文章

wiflish

​成功的人,都是 “狠角色”

非著名程序员

程序员 提升认知 成功学 自律

Kafka系列第2篇:安装测试

z小赵

大数据 kafka 推荐 实时计算

我愿沉迷于学习,无法自拔(二)

孙瑜

深度思考 个人成长

每天打卡python面试题 - 在一行中捕获多个异常(块除外)

志学Python

Python 面试 python 爬虫 python3.7

Java并发编程系列——锁顺序

孙苏勇

Java Java并发 并发编程 多线程

如何梳理画出牛逼的、高大上的架构图?

狂师

程序员 企业架构 开发者 软件测试 软件开发

为什么每个软件人都要懂点系统架构?

刘华Kenneth

架构 DevOps 高可用 敏捷 高并发

专栏:代码之丑(七)——你的语言_Java_郑晔_InfoQ精选文章