《代码整洁之道》阅读小记

  • 让变量的命名名副其实,如果变量名称需要注释来补充,那就不算是名副其实。

  • 废话就是冗余,Variable一词永远不应该出现在变量名中。

  • 类名和对象名应该是名词或名词短语。

  • 方法名应该是动词或动词短语。

  • 可以考虑将相应的构造器设置为private,强制使用参数的静态工厂方法名。

  • 函数的第一规则是要短小,第二条规则是要更短小。

  • 每个函数都只说一件事,而且,每个函数都依序把你带到下一个函数,这就是函数应该达到的短小程度。

  • 函数应该做一件事。做好这件事。只做这一件事。

  • 最理想的参数数量是零(零参数函数),其次是一(单参数函数),再次是二(双参数函数),应尽量避免三(三参数函数)。

  • 如果函数看来需要两个,三个或者三个以上参数,就说明其中一些参数应该封装为类了。

  • 用代码本身来表达意图,而不是通过注释。好的代码不需要注释。

  • 随着时间的流逝,注释会越来越背离代码。因为程序员一般不维护注释。

  • 不要注释代码:让别人觉得想删又怕以后有用。

  • 概念相关的代码应该放到一起。相关性越强,彼此之间的距离就该越短。

  • 一般而言,自上向下展示函数调用依赖顺序。也就是说,被调用的函数应该放在执行调用的函数下面。

  • 一个开发小组应该使用一样的代码风格来编写代码。
    在这里插入图片描述

  • 对象暴露行为,隐藏数据;数据结构暴露数据,没有明显的行为。

  • 错误处理很重要,但如果它搞乱了代码逻辑,就是错误的做法。

  • 测试代码和生产代码一样重要。它需要被思考,被设计和被照料。它该像生产代码一样保持整洁。

  • 把单元测试清晰地拆分为三个环节:1.构造测试数据;2.操作测试数据;3.检验操作是否得到期望的结果。

  • Given-when-then约定:given一个上下文,指定测试预设;when进行一系列操作,即所要执行的操作;Then得到一系列可观察的后果,即需要检测的断言。

  • 系统应该由许多短小的类而不是少量巨大的类组成。每个小类封装一个权责,只有一个修改的原因,并与少数其他类一起协同达成期望的系统行为。

  • 在理想系统中,我们通过扩展系统而非修改现有代码来添加新特性。

  • 软件系统应该将启始过程和运行过程逻辑分离开。对象的初始化和运行逻辑分离,spring的IOC就遵循这一法则。

  • 单一权责原则(SRP)认为方法/类/组件应当只有一个修改的理由。并发设计自身足够复杂到成为修改的理由,所以也该从其他代码中分离出来。

  • 不要将系统错误归咎于偶发事件。

  • 注释只应该描述有关代码和设计的技术性信息。

  • 注释应该提及代码自身没提到的东西。

  • 删除注释掉的代码。

  • 基类应该对派生类一无所知。

  • 用多态代替If/Else或Switch/Case。

  • 魔术数指的是那些不能自描述的数字,如果数字可以自描述,不需要使用变量来定义它。

  • 如果要让函数之间有时序耦合,比较好的做法是让上一个函数产生下一个函数所需的结果。

  • 名称的作用范围越大,名称就该越长越准确。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.java的Java类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值