LBYL vs. EAFP
目录

在编写代码时有两种错误检查方法:

  • Look Before You Leap (LBYL)
  • It's Easier to Ask Forgiveness than Permission (EAFP)

1. LBYL

LBYL是“旧的”处理方法,基本思想是提前对使用的数据做检查。 这种方法会引出一些问题,比如如果我们要检查对象,就要知道对象的实现细节,这打破了封装的初衷。 并且,我们需要写一些繁琐的代码来对数据做检查,这样也会打断思维。 比如:

int key_length = strlen(getval(map,key));

就需要写成下面几行来检查数据。

int key_length = 0;
char* value = getval(map,key);
if (val != 0 ) {
key_length = strlen(value);
}

2. EAFP

EAFP是“新的”处理方法,异常处理就是这种方法的典型实现。 这种方法避免了LBYL的一些问题,但是也有自己的烦恼。

2.1 EAFP rocks!

  • 对于调用者有很好的错误声明(上抛)
  • 可以把错误处理集中在代码某一层上(边界上)
  • 符合DRY原则:Don't Repeat Yourself。
  • 代码可读性更好

2.2 EAFP sucks!

  • 异常处理几乎就是看不见的GOTO语句
  • 异常处理的效率问题

参考

发表评论