学习good taste代码

Linux 的创始人,在采访中提及了关于代码的 “good taste”。Linus Torvalds 展示了一一些代码:

void remove_list_entry(entry){
    prev = NULL;
    walk = head;

    //Walk the list
    while(walk != entry){
        prev = walk;
        walk = walk->next;
    }

    //Remove the entry by updating the head or the previous entry
    if(!prev){
        head = entry->next;
    }else{
        prev->next = entry->next;
    }
}

这是一个用 C 写的函数,作用是删除链表中的一个对象,它包含有 10 行代码。主要在底部的 if 语句。正是这个 if 语句受到他的批判。 Linus 向观众解释,正如我们所知道的,当从链表中删除一个对象时,需要考虑两种可能的情况。当所需删除的对象位于链表的表头时,删除过程和位于链表中间的情况不同。这就是这个 if 语句具有 “poor taste” 的原因。但既然他承认考虑这两种不同的情况是必要的,那为什么像上面那样写如此糟糕呢?下面,Torvalds 展示了一一些代码:他称为good taste的代码:

void remove_list_entry(entry){
    //The "indirect" pointer points to the *address* of thing we‘ll update
    indirect = &head;

    //Walk the list, looking for the thing that points to the entry we want to remove
    while((*indirect) != entry){
        indirect = &(*indirect)->next;
    }
    //..and just remove it
    *indirect = entry->next;
}

但代码的行数并不重要,关键是 if 语句,它不见了,因为不再需要了。代码已经被重构,不用管对象在列表中的位置,都可以运用同样的操作把它删除。Linus 解释了一下新的代码,它消除了边缘情况,就是这样的。

时间: 2024-12-23 04:53:37

学习good taste代码的相关文章

java学习教程之代码块

学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这个例子: public class Test{ public static void main(String args[]){ { //此处就是普通代码块,普通代码块中的代码按顺序执行 System.out.println("hello"); } } } 2.构造代码块 public cl

iOS: 学习笔记, 用代码驱动自动布局实例

iOS自动布局是设置iOS界面的利器. 本实例展示了如何使用自动布局语言设置水平布局, 垂直布局 1. 创建空白iOS项目 2. 添加一个控制器类, 修改YYAppDelegate.m文件 #import "YYAppDelegate.h" #import "YYViewController.h" @implementation YYAppDelegate - (BOOL)application:(UIApplication *)application didFin

c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出

#include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float math,eng; float aver; }stu[count],temp; //输入 for (int i = 0; i < count; i++){ scanf("%s%f%f", stu[i].name, &stu[i].math, &stu[i].eng)

iOS: 学习笔记, 用代码驱动自动布局实例(swift)

iOS自动布局是设置iOS界面的利器.本实例展示了如何使用自动布局语言设置水平布局, 垂直布局1. 创建空白iOS项目(swift)2. 添加一个控制器类, 修改YYAppDelegate.swift文件 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFi

c语言学习之结构篇代码示例-输入n个同学的姓名,数学英语成绩,按照平均分从低到高排序并输出

在虚拟机上测评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 因为是虚拟机上的测评,所以时间只做参考,不要太较真, 看看就好了.MySQL 工具:    1. 自带mysqlimport工具.    2. 命令行 load data infile ...    3. 利用mysql-connector-python Driver来写的脚本. PostgreSQL 工具:    1. pgloader 第三方工具.    2. 命令行 copy ... from

深度学习Matlab工具箱代码详解

最近研究了几天深度学习的Matlab工具箱代码,发现作者给出的源码中注释实在是少得可怜,为了方便大家阅读,特对代码进行了注释,与大家分享. 在阅读Matlab工具箱代码之前,建议大家阅读几篇CNN方面的两篇经典材料,对卷积神经网络Matlab工具箱代码的理解有很大帮助,稍后我会将这两篇文献上传到网上与大家分享.急需的也可以留言注明,我会及时发送至邮箱的. (1)<Notes on Convolutional Neural Networks>,这篇文章是与Matlab工具箱代码配套的文献,不过文

SQLite学习手册(实例代码&lt;一&gt;)

一.获取表的Schema信息:       1). 动态创建表.     2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型.     3). 删除该表.     见以下代码及关键性注释:  1 #include <sqlite3.h>  2 #include <string>  3  4 using namespace std;  5  6 void doTest()  7 {  8     sqlite3* conn = NULL;  9  

向Linus学习,让代码具有good taste

在最近关于 Linus Torvalds 的一个采访中,这位 Linux 的创始人,在采访过程中大约 14:20 的时候,提及了关于代码的 "good taste".good taste?采访者请他展示更多的细节,于是,Linus Torvalds 展示了一张提前准备好的插图. 他展示的是一个代码片段.但这段代码并没有 "good taste".这是一个具有 "poor taste" 的代码片段,把它作为例子,以提供一些初步的比较. 这是一个用

Tensorflow学习笔记---2--DCGAN代码学习

以mnist数据训练为例,学习DCGAN(deep convolutional generative adversarial networks)的网络结构. 代码下载地址https://github.com/carpedm20/DCGAN-tensorflow 注1:发现代码中以mnist为训练集的网络和以无标签数据集(以下简称unlabeled_dataset)为训练集的网络不同,结构有别.以下笔记主要针对前者(Generator=3个ReLU+1个Sigmoid,Discriminator=