当前位置:  开发笔记 > 程序员 > 正文

斯巴达编程

如何解决《斯巴达编程》经验,为你挑选了2个好方法。

我非常喜欢杰夫关于斯巴达编程的帖子.我同意这样的代码是一种阅读的乐趣.不幸的是,我不太确定与他们一起工作一定会很愉快.

多年来,我一直在阅读并坚持"一行一线"的做法.当许多编程书籍使用示例代码来反驳这个建议时,我已经打了很好的战斗并坚持了下来:

while (bytes = read(...))
{
   ...
}

while (GetMessage(...))
{
   ...
}

最近,出于更实际的原因,我提出了每行一个表达式 - 调试和生产支持.从生产中获取一个声明NullPointer异常的日志文件在"第65行",其中显示:

ObjectA a = getTheUser(session.getState().getAccount().getAccountNumber());

令人沮丧,完全可以避免.没有抓住专家的代码可以选择"最可能"的对象是空的......这是一个真正的实际痛苦.

每行一个表达式在步进代码时也有很大帮助.我是在假设大多数现代编译器可以优化掉我刚创建的所有多余的临时对象的情况下练习的...

我试着整洁 - 但是用明确的对象混乱我的代码确实有时会感到费力.它通常不会使代码更易于浏览 - 但是在生产中跟踪事物或者通过我或他人的代码时,它确实派上了用场.

提倡什么样的风格,能在实际意义上理顺它吗?



1> Dan Blair..:

实用程序员 Hunt和Thomas谈论他们称之为Demeter法的研究时,它关注的是功能与模块之外的模块的耦合.通过允许函数永远不会达到其耦合的第3级,您可以显着减少错误数量并提高代码的可维护性.

所以:

ObjectA a = getTheUser(session.getState().getAccount().getAccountNumber());

接近重罪是因为我们是鼠洞下面的4个物体.这意味着要改变其中一个对象中的某些东西我必须知道你在这个方法中调用了整个堆栈.太痛苦了.

更好:

Account.getUser();

请注意,这与现在非常受模拟软件欢迎的表达形式的编程背道而驰.权衡的是,无论如何你都有一个紧密耦合的界面,而富有表现力的语法使它更容易使用.



2> pkaeding..:

我认为理想的解决方案是在极端之间找到平衡点.没有办法写出适合所有情况的规则; 它带来了经验.在自己的行上声明每个中间变量将使得读取代码变得更加困难,这也将导致维护上的困难.出于同样的原因,如果内联中间值,调试会更加困难.

"甜蜜点"位于中间位置.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有