如何写好程序📝📝📝
- 计算机并不解决问题,它们只是执行解决方案
- 软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软 件过于复杂,没有明显的缺陷
- 控制复杂性是计算机编程的本质 ——Brian Kernighan
- A good programmer is someone who always looks both ways before crossing a one-way street——Doug Linder 好的程序员即使在过单行道时也总是会环顾两边。
- Simple is better than complex 简洁胜于复杂
- Complex is better than complicated 复杂胜于凌乱
- Flat is better than nested 扁平胜于嵌套
- Programs must be written for people to read, and only incidentally for machines to execute —— Harold Abelson , Gerald Jay Sussman 程序必须首先为了人去阅读而编写,其次才是为了机器执行。
- Good code is its own best documentation. As you’re about to add a comment, ask yourself, ‘How can I improve the code so that this comment isn’t needed?’" —— Steve McConnell 好的代码本身就是最好的文档。当你打算添加注释时,问问自己:“我怎样改进代码,使之无需注释就能表达清楚?”
def fibonacci(n):
"""
返回前n个斐波那契数列的生成器。
斐波那契数列定义为:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n > 1)
"""
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 使用斐波那契数列生成器
for fib in fibonacci(10):
print(fib, end=' ')
经典的Python程序片段,何为简洁胜于复杂, 它演示了斐波那契数列的生成器表达式,展示了简洁、高效的代码风格
public class FibonacciExample {
public static void main(String[] args) {
// 初始化斐波那契数列的前两个数
int a = 0;
int b = 1;
// 打印前10个斐波那契数
for (int i = 0; i < 10; i++) {
System.out.print(a + " ");
// 计算下一个数
int next = a + b;
// 更新a和b的值
a = b;
b = next;
}
}
}
pub fn fibonacci() {
let n = 10; // 假设我们要生成前10个斐波那契数列
let mut fib_sequence = vec![0, 1];
// 如果需要超过前两个数,则填充剩余的斐波那契数列
while fib_sequence.len() < n {
let next = fib_sequence[fib_sequence.len() - 1] + fib_sequence[fib_sequence.len() - 2];
fib_sequence.push(next);
}
// 打印斐波那契数列
for &number in fib_sequence.iter() {
println!("{}", number);
}
}
软件工程的重要设计原则
- 模块化(Modularity):将复杂的系统划分为一系列独立的、可组合的模块,每个模块具有特定的功能和清晰的接口,允许单独开发、测试和维护。
- 抽象(Abstraction):使用抽象来隐藏实现细节,仅暴露必要的接口给外部世界。通过定义抽象的数据类型和行为,降低复杂性并促进重用。
- 信息隐藏(Information Hiding/Encapsulation):也称封装,是指将数据和处理这些数据的函数绑定在一起,并对外隐藏其内部实现细节,防止外界直接访问或修改内部状态。
- 高内聚(High Cohesion):内聚性描述的是模块内部各部分之间的相关程度,高内聚指模块内部的所有元素都紧密相关,共同服务于一个单一的目标或功能。
- 低耦合(Low Coupling):耦合度衡量的是不同模块之间互相依赖的程度,低耦合意味着模块间相互独立,减少不必要的相互依赖,增强系统的灵活性和可维护性。
- SOLID原则:这是面向对象设计领域的五大基本设计原则:
- 单一职责原则(Single Responsibility Principle, SRP):一个类或模块应有且仅有一个改变的理由。
- 开闭原则(Open/Closed Principle, OCP):软件实体应当对扩展开放,对修改关闭。
- 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们的基类型。
- 接口隔离原则(Interface Segregation Principle, ISP):客户端不应该被迫依赖它们不需要的接口。
- 依赖倒置原则(Dependency Inversion Principle, DIP):依赖于抽象而不依赖于具体实现。
- 迪米特法则(Law of Demeter):也称为最少知识原则,一个对象应当尽可能少地了解其他对象的内部结构,只和“朋友”交流。
- KISS原则(Keep It Simple, Stupid):让设计保持简单,避免不必要的复杂性。
- DRY原则(Don’t Repeat Yourself):避免代码重复,提倡复用。
- YAGNI原则(You Ain’t Gonna Need It):只实现当前真正需要的功能,避免过度设计。