对于那些在Haskell和一些Lisp中都有经验的人,我很好奇是如何"愉快"(使用一个可怕的术语)是在Haskell和Lisp中编写代码.
一些背景:我学习Haskell现在,稍早有计划和CL(和一点点进军Clojure的)工作.传统上,你可以认为我是动态语言的粉丝,因为它们提供了简洁和快速.我很快就爱上了Lisp宏,因为它给了我另一种避免冗长和样板的方法.
我发现哈斯克尔难以置信的有趣,因为它把我介绍给编码我不知道的方式.它肯定有一些方面似乎有助于实现敏捷性,比如易于编写部分功能.不过,我有点担心失去Lisp的宏(我假设我失去他们,说实话我可能只是没有了解他们吗?)和静态类型系统.
会有人谁做了两个世界编码,像样的数目介意评论经验如何不同,您喜欢哪一种,如果说偏好的态势?
在我作为开发人员的工作中我必须解决的大多数问题都与数据建模有关.例如,在OOP Web应用程序世界中,我经常需要更改对象中的数据属性以满足新的要求.
如果我很幸运,我甚至不需要以编程方式添加新的"行为"代码(函数,方法).相反,我可以通过注释属性(Java)来声明添加验证甚至UI选项.
在函数式编程中,由于模式匹配和数据构造函数(Haskell,ML),添加新数据属性似乎需要大量代码更改.
如何最大限度地减少此问题?
这似乎是一个公认的问题,因为Xavier Leroy在"对象和类与模块"的第24页很好地说明 - 总结那些没有PostScript查看器的人,它基本上说FP语言比OOP语言更好地添加新的对数据对象的行为,但OOP语言更适合添加新的数据对象/属性.
FP语言中是否有任何设计模式可以帮助缓解此问题?
我已经阅读了Phillip Wadler 建议使用Monads来帮助解决这个模块化问题,但我不确定我是怎么理解的?
任何编程语言都没有合适的反射机制,我发现它对于快速变化的问题非常不利.
对某些语言而言似乎难以置信或难以做到:
没有反思.
一些没有某种程序反射的示例语言是: C,C++,Haskell,OCaml.我相信还有更多.
为了向您展示大多数这些语言可能违反DRY(不要重复自己)的例子,那就是您必须编写单元测试.您几乎总是需要在定义测试之外的这些语言中注册测试用例.
这些语言的程序员如何缓解这个问题?
编辑:对那些不知道的人有反射的常用语言有:C#,Java,Python,Ruby,以及我个人最喜欢的F#和Scala.
编辑:它似乎是两种常见的方法是代码检测和代码生成.但是我从未见过C的仪器.
有些人可以评论为什么要关闭它,而不仅仅是投票结束,我将删除帖子.