以前探讨过中文命名在业务部分的优势大于算法部分. 今天又一次看到了这个以冒泡算法的例子: 刘然:批判易语言的人是否用过这门语言,批判它的原因又是什么?有些感触. 先尝试对变量命名进行改进, 来看看是否会有不同观感. 注: 本文不讨论输入效率问题, 也不讨论易语言

时间太有限, 仅对帖子中的Python程序作粗浅探讨. 另一个易语言语法的例程也有不同方面的改进空间, 就不展开了. 有兴趣/质疑的欢迎提其他例程一同探讨.

for i in xrange(len(a)):for j in xrange(i + 1, len(a)):if a[i] > a[j]:a[i], a[j] = a[j], a[i]

首先, 在嵌套循环中使用i和j的一个问题是, 两者看起来有点像. 下面的视觉区分度更大:

for 甲 in xrange(len(a)):for 乙 in xrange(甲 + 1, len(a)):if a[甲] > a[乙]:a[甲], a[乙] = a[乙], a[甲]

也可以赋予变量名以更多语义, 来凸显变量的某些性质, 如下. 而英文命名想要表达类似语义就要长一些了:

for 前 in xrange(len(a)):for 后 in xrange(前 + 1, len(a)):if a[前] > a[后]:a[前], a[后] = a[后], a[前]

后感

中文命名很自然是个考验中文修养的活. 用中文命名的代码可以像天书一样"仅仅是符号", 也可以像好文章一样用词考究恰如其分, 当然更多的(包括在下写的)限于功力或者开发时间限制也许只能达到流水账的水平.

哪里用中文最有效果(对可读性增强最大), 哪里是鸡肋(比如上面的a, 可以改名为"数组", 但效果逊一些, 也许更合适放在注释中), 也与程序的目的/设计/理解非常相关.

相比数理能力, 更大量的编程任务更需要的是逻辑与思辨能力, 这种任务的比重只会越来越大. 而逻辑思辨能力是文理相通的. 与编程相配套的文档编写和阅读也更偏文, 团队建设/客户交流之类软实力更不用说. 相信随着IT产业的逐渐成熟, 文科背景的开发者将会越来越多, 长远看这肯定是好事.

论文Concise and Consistent Naming: Ten Years Later提到:

Approximately 70% of the source code of a software system consists of identifiers. Hence, the names chosen as identifiers are of paramount importance for the readability of computer programs and therewith their comprehensibility. However, virtually every programming language allows programmers to use almost arbitrary sequences of characters as identifiers which far too often results in more or less meaningless or even misleading naming.

很想看全文(尤其是那个辅助命名工具的十年实践的总结)但下载的pdf里只有摘要. 如果有哪位同学有全文请分享一下, 先谢了.

中文代码示例之冒泡算法, 后感相关推荐

  1. 中文代码示例之Spring Boot 2.0.3问好

    上次试用Spring Boot还是两年前: 中文代码示例之Spring Boot 1.3.3演示. 打算用在一个讨论组内小项目上, 于是从官网Building an Application with ...

  2. 中文代码示例之5分钟入门TypeScript

    "中文编程"知乎专栏原文 Typescript官方文档起的这个噱头名字: TypeScript in 5 minutes, 虽然光看完文章就不止5分钟...走完整个文档流水账如下( ...

  3. 中文代码示例之Vuejs入门教程(一)

    为了检验中文命名在主流框架中的支持程度, 在vuejs官方入门教程第一部分的示例代码中尽量使用了中文命名. 所有演示都在本地测试通过, 源码在这里. 下面省略了很多原教程的说明内容, 而着重于代码示例 ...

  4. 冒泡算法Python实现

    冒泡算法基本原理 依次比较两个数的大小,如果前面那个数字比后面的数字大就交换两个数字的位置. 代码实现 依据冒泡算法原理,我们来实现排序. 首先定义一个列表: list = [12, 23, 98, ...

  5. STC89C52单片机矩阵LED灯介绍以及代码示例

    目录 一,LED点阵屏介绍 二,显示原理 三,74HC595以及LED点阵屏 74HC595寄存器的介绍: 74HC595寄存器的使用方法: 74HC595以及LED点阵屏原理图: 四,开发板引脚对应 ...

  6. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  7. 送书 | 你一定能看懂的算法基础书(代码示例基于Python)

    本文引自图灵教育<算法图解> 你一定能看懂的算法基础书:代码示例基于Python:400多个示意图,生动介绍算法执行过程:展示不同算法在性能方面的优缺点:教会你用常见算法解决每天面临的实际 ...

  8. Mahout-协同过滤-CF-推荐算法基本概念及代码示例

    协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部 ...

  9. 【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )

    文章目录 一.FutureBuilder 简介 二.处理 Flutter 中的中文乱码 三.完整代码示例 四.相关资源 一.FutureBuilder 简介 FutureBuilder 本质是组件 : ...

最新文章

  1. Spring解析,加载及实例化Bean的顺序(零配置)
  2. 人工智能:一种现代方法汇总
  3. C++实现插入排序(附完整源码)
  4. FreeSql与SqlSugar性能测试对比
  5. oh-my-zsh官方教程
  6. AFNnetworking详解
  7. 菜鸟的学习之路(8) — 数组(Array)
  8. 基于OpenCV的图像去雾程序(Single Image Haze Removal Using Dark Channel Prior)
  9. 通过创建一条链来学习区块链 (1)
  10. WPS Office 2012兼容全部Office格式,为办公带来了很多便利
  11. cad字体安装_史上最全CAD字体库,3000+种字体!没有人能安装全!
  12. 华为云计算hcip证书有效期_华为认证云计算 V4.0认证
  13. SAS,软件使用中reg报错/gplot错误的解决方法。
  14. 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
  15. 【图像视觉基础】浅谈CCD和CMOS相机的联系和区别
  16. java excel 多列排序,《excel表格调取行和列的数据》 excel列排序的时候怎么让所有行的信息跟着排(其它的非数据行)...
  17. gta5怎么设置画质最好_GTA5:如何让你的游戏画质更好,游戏更顺手,一波设置教给大家!...
  18. 基于SSM框架的音乐网站系统设计与实现
  19. ipcs、ipcrm、sysresv、kernel.shmmax
  20. 平台篇-八年磨一剑,重新定义 HBase——HBase 2.0阿里云 HBase 解读

热门文章

  1. 使用 github 快速搭建属于自己的图床
  2. android.support.v7的v7报红,但程序不影响编译
  3. Android开机各个阶段(Android R)
  4. 【项目分享】赶集团购Web App开发总结
  5. c++ 箭头符号怎么打_关于C/C++中的点操作符和箭头操作符
  6. 股指期货推出后市场不会被操纵
  7. python虚拟环境管理干部学院_Virtualenv|基于Python虚拟环境管理包
  8. IDE解决算法4中环境配置问题algs.jar
  9. Android studio 升级问题
  10. 1486【动态规划★★】Max Sum Plus Plus.(求n个数m个不相交子段的最大和)