如何使用没有反射的编程语言来干燥?

Ada*_*ent 5 c reflection aop dry

任何编程语言都没有合适的反射机制,我发现它对于快速变化的问题非常不利.

对某些语言而言似乎难以置信或难以做到:

  • 约定优于配置
  • 自动数据绑定
  • AOP/Meta编程

没有反思.

一些没有某种程序反射的示例语言是: C,C++,Haskell,OCaml.我相信还有更多.

为了向您展示大多数这些语言可能违反DRY(不要重复自己)的例子,那就是您必须编写单元测试.您几乎总是需要在定义测试之外的这些语言中注册测试用例.

这些语言的程序员如何缓解这个问题?

编辑:对那些不知道的人有反射的常用语言有:C#,Java,Python,Ruby,以及我个人最喜欢的F#和Scala.

编辑:它似乎是两种常见的方法是代码检测和代码生成.但是我从未见过C的仪器.

有些人可以评论为什么要关闭它,而不仅仅是投票结束,我将删除帖子.

Pau*_*bel 1

C++ 单元测试的一个很好的例子是 cxxtest: http://cxxtest.tigris.org/。它使用约定和 python 脚本通过使用 python 对 C++ 进行后处理来生成 C++ 测试套件。

考虑绕过语言限制的一个好方法是 Michael Feathers 的“接缝”概念。接缝是可以在不更改代码的情况下更改程序的地方。例如,在 C 中,预处理器和链接器提供了接缝。在 C++ 中,多态性是另一个地方。在更动态的语言中,例如您可以更改方法定义或反映,您可以获得更大的灵活性。如果没有接缝,事情会变得更加复杂,有时您只是不想尝试用鞋子钉钉子,而是想顺着手头的工具流动。