热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《代码之美》——长期记忆系统是通过关联来检索的

前言今天读到了第十三章--基因排序器的设计,虽然对于生物科学方面的知识有所欠缺,但是从中透露出来的关于软件设计方面的思想还是可以拿来借鉴的。所以至于生物

前言

    今天读到了第十三章--基因排序器的设计,虽然对于生物科学方面的知识有所欠缺,但是从中透露出来的关于软件设计方面的思想还是可以拿来借鉴的。所以至于生物学方面的细节,我就一概忽略了(包括前一章~~毕竟不懂Perl,难得看出Perl的代码的美丽所在),就简单叙述自己的理解吧。

C语言实现多态

    这个是让我最为吃惊的,大家都说C是面向过程的编程语言,要让C实现面向对象的特点,这个有多难呀!但是本文中貌似很“轻松”得让C实现了多态的特点。这不禁让我想起,其实编程语言是小事,主要是编程思想。估计这也就许多代码的美丽之所在吧。真正美的不是代码本身,而是代码背后流露的思想。

    看看C是如何实现多态的呢?其实并不是十分复杂,如果熟悉C的函数指针,我们就可以用这个来实现C语言的多态。所谓多态不就是在运行时,函数的动态绑定吗~其实C语言也可以实现,而且实现机制就是函数指针。在程序运行时对这些函数指针赋上不同的函数入口值,那么在调用的时候便会出现多态的特性。当然这个只是多态的浅显的实现,比起C++,Java,C#这些真正面向对象的语言来说,用C实现的多态明显有些单薄。但是思想在此,这样的设计仍旧是面向对象的,必然也能达到面向对象的多态的好处。

    书中就表格的列,进行了对象化,并写出了他的结构体,实现了多态。代码如下:

struct column
/*大表格中的一列,hgNear中的核心数据*/
{
/*所有的列中都存在的数据: */struct column *next; /*链表中的下一列*/char *name; /*列名,用户看不到*/char *shortLabel; /*列标签*/char *longLabel; /*列描述*//* -- 方法 -- */void (*cellPrint)(struct column *col,struct genePos *gp,struct sqlConnection *conn);/*在HTML中打印该列的一个单元格*/void (*labelPrint)(struct column *col);/*在标签行中打印标签*/void (*filterControls)(struct column *col,struct sqlConnection *conn);/*打印高级过滤器中的控件标签*/
};

记录下这段代码,提醒自己:编程思想最重要。否则,面向对象的语言也会编出面向过程的程序……

大规模美丽代码理论

    引用原文的一段话:

    编码是人的一种活动,而在程序设计中最受限制的资源可能就是我们人类的大脑的记忆。通常,我们的短期记忆(short-term memory)可以同时记住五六件事情。超过这个数我们就需要长期记忆了(long-term memory)。我们的长期记忆系统有惊人的存储容量,但信息进入其中的速度却慢一些,同时我们也不能随机地提取其中的信息,只能通过关联(association)来检索。

    这里不仅仅说的是人类的大脑,而是我们的编程习惯。大家总会感觉到自己写的程序过几天看就基本忘记了自己在写什么了。其实这个很正常,这就需要我们根据自己写的注释重新恢复自己对代码的记忆。这就牵扯到了我们读代码的能力。如果一个函数过大,一个类承担了过多的任务。。试想这样的代码即使是我们自己写的,过几天也未必能真正读懂。于是作者提出了如下几个提高代码可理解性的方法:

  • 尽可能地让作用域局部化。如果对象成员变量可以解决问题,就不要使用全局变量,而如果局部变量可以解决问题,就不要使用对象的成员变量。
  • 减小副作用。特别地,除了函数的返回值,避免修改任何变量的值。符合这条规则的函数被称为“可重入”的,这也是一种美丽。它不仅容易理解,而且自动就是线程安全的,还可以被递归调用。除了可读性,副作用少的的代码也更容易在不同的情形中被重用。

转:https://www.cnblogs.com/pangliang/archive/2011/02/05/1949207.html



推荐阅读
  • 本文详细介绍了定时器输入捕捉技术的原理及其应用。通过配置定时器通道的引脚模式为输入模式,并设置相应的捕获触发条件,可以实现对外部信号的精确捕捉。该技术在实时控制系统中具有广泛的应用,如电机控制、频率测量等场景。文中还提供了具体的配置步骤和示例代码,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文探讨了在使用 Outlook 时遇到的一个常见问题:无法加载 SAVCORP90 插件,导致软件功能受限。该问题通常表现为在启动 Outlook 时会收到错误提示,影响用户的正常使用体验。文章详细分析了可能的原因,并提供了多种解决方法,包括检查插件兼容性、重新安装插件以及更新 Outlook 版本等。通过这些步骤,用户可以有效解决这一问题,恢复 Outlook 的正常运行。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在本地环境中调试远程服务器上的网站代码执行问题,可以通过以下步骤实现:首先,在本地安装 Visual Studio 并配置远程调试工具。接着,确保服务器和本地机器之间的网络连接畅通,并正确设置防火墙规则以允许调试流量。最后,使用 Visual Studio 的远程调试功能连接到服务器,进行代码调试。这种方法不仅提高了开发效率,还减少了在服务器上直接操作的风险。 ... [详细]
  • 在C语言程序开发中,调试和错误分析是确保代码正确性和效率的关键步骤。本文通过一个简单的递归函数示例,详细介绍了如何编写和调试C语言程序。具体而言,我们将创建一个名为 `factorial.c` 的文件,实现计算阶乘的功能,并通过逐步调试来分析和解决可能出现的错误。此外,文章还探讨了常见的调试工具和技术,如GDB和断点设置,以帮助开发者高效地定位和修复问题。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
author-avatar
人生-顺势而为
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有