我在网络上已经读过很多遍了,如果您的语言不支持某些概念(例如,面向对象或函数调用),并且在其他情况下被认为是一种好的做法,则应该这样做。
我现在看到的唯一问题是,其他程序员可能会发现您的代码与通常的代码太不同,从而使他们难以编程。您认为这还会引起什么其他问题?
我在网络上已经读过很多遍了,如果您的语言不支持某些概念(例如,面向对象或函数调用),并且在其他情况下被认为是一种好的做法,则应该这样做。
我现在看到的唯一问题是,其他程序员可能会发现您的代码与通常的代码太不同,从而使他们难以编程。您认为这还会引起什么其他问题?
Answers:
问题之一是,您可能会发现自己编写了很多代码来表达您将要用另一种语言进行表达的方式,而您所使用的语言中存在一种更为直接的方式。
例如,在有关Stack Overflow的答案中,我解释了如何在不支持它们的PHP中部分模拟代码契约(.NET Framework中使用的概念)。我最终花了很多钱才写了代码,因为同样的事情对于简单的数组是可行的。
一般来说,每种语言都有自己的文化,最佳实践和风格。
如果我像C一样开始编写C#代码,那将是丑陋的。
如果我将Haskell理解为被迫使用Haskell的Java开发人员,但又不想了解其优势而只想克隆Java的概念,那么我编写的代码将会受到影响。
等等
尝试增强语言没有错(例如,通过像F#中那样引入度量单位来增强C#),但是如果您做得太多,则可能应该选择一种真正适合您需要的语言。
降低可读性本身就足以解决问题:它极大地减少了无需您进行大量培训就可以维护您的项目的人员库。
此外,
这不像在纸上出现的那样好。
示例1:如果您足够大,您可能还记得C是小镇上的新孩子的日子。Pascal和Ada程序员不喜欢C简洁的大括号。他们#defined begin
并end
打开大括号和大括号,瞧!卡达!从Ada或C的角度来看,不幸的结果是丑陋的。
例2,个人:我对Common Lisp对象系统的真正爱好之一是它在方法之前,之后和周围。它们可以在多个地方派上用场。因此,我在一些特定的地方用C ++模仿了这个概念。在C ++中模拟这些构造的唯一方法是要求派生类的开发人员在代码的正确位置调用同名的父类的方法。这对从我的类派生的开发人员提出了要求,这对C ++编程有点陌生,也许与C ++编程的本质背道而驰。不管该要求的文档化程度如何,人们都不会遵循该准则,因为它不完全符合C ++范例。
从其他语言模仿概念会产生什么问题?
out
在一个并不真正支持参数的框架中模拟参数。C#假定每个函数将始终写入其所有out
参数,但是C#方法调用的非C#方法不提供此类保证。