易读代码的艺术(影印版)

易读代码的艺术(影印版)
作 者: 博斯韦尔 富彻
出版社: 东南大学出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 程序设计
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Dustin Boswell,毕业于加州理工学院,在谷歌公司从事过五年的Web信息采集基础设施和广告营销计划的研究工作。他先后构建过多个Web站点,目前的主要研究兴趣在于大数据的处理和机器学习领域的相关技术。Trevor Foucher,过去十年中先后在微软公司担任Windows及安全相关产品的工程师、经理和技术领导者的职务,现任职于谷歌公司,主要从事谷歌广告营销计划和搜索基础设施的研究工作。

内容简介

作为程序员,我们经常看到一些充满Bug、让我们头痛不已的丑陋代码。在过去五年中,《易读代码的艺术(影印版)》的作者博斯韦尔(DustinBoswell)和富彻(TrevorFoucher)分析了许多这样的“糟糕代码”(这些代码有很多是出自于他们自己之手),他们试图厘清为什么这些代码如此糟糕以及如何改进这些代码。他们得出的结论是:你必须写出让他人(这里也包括你自己)花费最少时间能够理解的代码。

图书目录

PREFACE

PREFACE

CODE SHOULD BE EASY TO UNDERSTAND

What Makes Code "Better"?

The Fundamental Theorem of Readability

Is Smaller Always Better?

Does Time-TilI-UnderstandinR Conflict with Other Goals?

The Hard Part

Part One SURFACE-LEVEL IMPROVEMENTS

PACKING INFORMATION INTO NAMES

Choose Specific Words

Auoid Generic Names Like Imp and retual

Prefer Concrete Names ouer Abstract Names

Attachin9 Extra Information to a Name

How Lon.g Should a Name Be?

Use Name Formatting to Conuey Meaning

Summary

NAMES THAT CAN'T BE MISCONSTRUED

Example: FilterO

Example: Clip(text, length)

Prefer rain and max for (Inclusiue) Limits

Prefer first and last for Inelusiue RanRes

Prefer herin and end for.lnclusiue/Exclusiue RanRes

NaminR Booleans

MatchinR Expectations of Users

Example: EualuatinR Multiple Name Candidates

Summary

ESTHETICS

Why Do Aesthetics Matter?

BearranRe Line Breaks to Be Consistent and Compact

Use Methods to Clean Up IrreRularity

Use Column AliRnment When Helpful

Pick a MeaninRful Order, and Use It Consistently

OrRanize Declarations into Blocks

Break Code into "Parafgraphs"

Personal Style uersus Consistency

Summary

KNOWING WHAT TO COMMENT

What NOT to Comment

Becordin9 Your Thouyhts

Put Yourself in the Reader's Shoes

Final Thoughts--Getting Over Writer's Block

Summary

6 MAKING COMMENTS PRECISE AND COMPACT

Keep Comments Compact

Avoid Ambiguous Pronouns

Polish Sloppy Sentences

Describe Function Behavior Precisely

Use Input/Output Examples That Illustrate Corner Cases

State the Intent of Your Code

"Named Function Parameter" Comments

Use Information-Dense Words

Summary

Part Two SIMPLIFYING LOOPS AND LOGIC

MAKING CONTROL FLOW EASY TO READ

The Order of Arguments in Conditionals

The Order of if/else Blocks

The ?: Conditional Expression (a.k.a. "Ternary Operator")

Avoid dogwhile Loops

Returning Early from a Function

The Infamous goto

Minimize Nesting

Can You Follow the Flow of Execution?

Summary

BREAKING DOWN GIANT EXPRESSIONS

Explainin9 Variables

Summary Variables

Using De Morgan's Laws

Abusing Short-Circuit Logic

Example: Wrestling with Complicated Logic

Breaking Down Giant Statements

Another Creative Way to Simplify Expressions

Summary

VARIABLES AND READABILITY

Eliminatinfg Variables

Shrink the Scope of Your Variables

Prefer Write-Once Variables

A Final Example

Summary

Part Three REORGANIZING YOUR CODE

EXTRACTING UNRELATED SUBPROBLEMS

Introductory Example: findClosestLoeationO

Pure Utility Code

Other General-Purpose Code

Create a Lot of General-Purpose Code

Project-Specific Functionality

Simplilying an Existing Interface

Reshaping an Interface to Your Needs

Taking Things Too Far

Summary

ONETASK ATA TIME

Tasks Can Be Small

Extracting Values from an Object

A Larger Example

Summary

TURNING THOUGHTS INTO CODE

Describing Logic Clearly

Knowing Your Libraries Helps

Applying This Method to Larger Problems

Summary

WRITING LESS CODE

Don't Bother Implementing That Feature--You Won't Need It

Question and Break Douan Your Requirements

Keeping Your Codebase Small

Be Familiar with the Libraries Around You

Example: Using Unix Tools Instead of Coding

Summary

Part Four SELECTED TOPICS

TESTING AND READABILITY

Make Tests Easy to Read and Maintain

What's Wrong with This Test?

Making This Test More Readable

Making Error Messages Readable

Choosing Good Test Inputs

Naming Test Functions

What Was Wrong with That Test?

Test-Friendly Deuelopment

Going Too Far

Summary

DESIGNING AND IMPLEMENTING A "MINUTE/HOUR COUNTER"

The Problem

Defining the Class Interface

Attempt 1: A Naiue Solution

Attempt 2: Conueyor Belt Design

Attempt 3: A Time-Bucketed Design

Comparing the Three Solutions

Summary

FURTHER READING

INDEX