更具体地说,你如何建模功能程序,或者使用功能样式(没有类)使用图表而不是文本表示开发的功能程序,它是否可能,并且有人可以请我指向最近的应用程序(开源,啤酒中的免费,如果你愿意的话)
在功能编程方面触及Monads之后,该功能是否实际上使语言变得纯粹,或者它是否只是另一个"从监狱免费卡中获取"来推理现实世界中的计算机系统,在黑板数学之外?
编辑:
这不是有人在这篇文章中所说过的火焰诱饵,而是一个真正的问题,我希望有人可以用枪击我说,证明,这是纯粹的.
此外,我正在研究关于其他不那么纯粹的功能语言和一些使用良好设计和比较纯度的OO语言的问题.到目前为止,在我非常有限的FP世界中,我仍然没有理解Monads的纯度,你会很高兴地知道我喜欢不变性的想法,这在纯度赌注中更为重要.
monads haskell functional-programming referential-transparency
UML可以用于自己编程计算机系统,没有支持的实现语言,例如直接到机器代码的图表(可能通过C或C++等),没有人工编码干预.
一直在搞乱python,像往常一样,它把我刚性的静态类型面向对象的世界抛到了一个烂摊子.Python支持duck typing,没有基于接口的编程的可用概念(如在C#接口中)并允许全局变量.所有这些好东西都是依赖注入容器的任何意义,或者Python运行时是否成为容器.
我理解这些容器在静态类型的OO语言中的意义,例如Java和C#,但是这样的东西是否适合python的坚果世界(我喜欢它)?
我一直怀疑依赖注入作为一种设计模式是一种难闻的气味,一切都必须是一个"纳粹思维"的类,即c#和Java,我会是正确的还是我缺少的东西?
到目前为止,我认为只需使用Globals就可以覆盖工厂,单例,多实例对象.我也怀疑Aspect的内容也被覆盖了,虽然我还在考虑这个问题.
鸭子打字是目前让我感觉到的东西,因此习惯于定义接口然后在这些接口上基于类,让静态的东西覆盖我的愚蠢,我觉得没有静态类型,容器有点无用.
编辑
我想在使用python时我不会使用Dependency Injector框架/容器.真的没有任何意义.在思考并阅读到目前为止的反馈之后,论证清楚地表明,如果没有静态类型定义,所作出的承诺是如此宽松,以至于为什么要麻烦.鸭子打字就是这样,唯一的承诺可以通过文档来实现.只要引用通过signiture参数进入类Method/function,而不是通过编程环境的以太,那么我认为我会安全.
但令人震惊的是,我无法通过我在Java和C#中完成的过度设计实践来强化我对其他人的意愿.我在乎......不......
我对此感到相当顽皮,所以请不要认为我会认真尝试这一点,因为我从痛苦的经验中了解到静态类型检查系统的优势.
但是,至于一个概念,是否有可能以完全动态的方式基本上做C#,将静态类型检查器抛到一边并说"呃,你这么老式!".
我最近有过IronPython和F#的丰富经验,但我觉得在家里使用的是基于C语言的.
在动力学的道路上,C#能走多远?我最近写了一个XML到ExpandoObject解析器,这很棒,感觉就像是javascript原型.
动态的东西是如何优化的,它是否像NodeJs和CPython这样的一些真正的动态编程语言环境一样快?
在python中,yield关键字可以在push和pull上下文中使用,我知道如何在c#中执行pull上下文,但是如何实现push.我发布了我试图在c#中从python中复制的代码:
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
cr.next()
return cr
return start
@coroutine
def grep(pattern):
print "Looking for %s" % pattern
try:
while True:
line = (yield)
if pattern in line:
print line,
except GeneratorExit:
print "Going away. Goodbye"
Run Code Online (Sandbox Code Playgroud) 我喜欢新的Dynamic关键字并读取它可以用作替换访问者模式.
它使代码更具声明性,我更喜欢.
尽管用实现动态调度的类替换'Type'上的所有switch开关实例是一个好主意.
class VistorTest
{
public string DynamicVisit(dynamic obj)
{
return Visit(obj);
}
private string Visit(string str)
{
return "a string was called with value " + str;
}
private string Visit(int value)
{
return "an int was called with value " + value;
}
}
Run Code Online (Sandbox Code Playgroud) 从beta开始,我一直在使用C#多年.我有一点时间,从OOP转向功能导向编程(FOP).我从20世纪80年代后期开始使用过程编程和功能组合的概念,并且从1995年左右开始就开始使用OO,当时UML正处于初期阶段,我使用程序和OO的多范式方法在Delphi中进行编程.是否有任何好的书籍建议,以帮助从根深蒂固的OO程序员过渡到函数式编程?
我尝试了一本Haskell书,但它似乎需要一些背景知识并且非常难以接近.
我有几本关于F#的O'Reilly,Apress书籍,但这一切看起来都有点毛茸茸,只是完成工作.它还将对象与功能混合在一起以满足需求.
F#似乎原谅我在我的OOP思考中比Haskell更多,但我认为要获得真正的好处,我需要进入FOP的思维模式以充分利用代码.我在日常的C#内容中阅读了大约两年的函数式编程.但我觉得我没有深入思考.
我很确定那里有很多像我一样的人.我认为,任何答案对许多希望转移到F#的C#人员都有很大的帮助.特别是在市场上有许多大型击球手要求F#.我是一名需要尽快加速的承包商.
可能重复:
设计模式真的是语言缺陷吗?
在花了多年时间阅读有关OOP和OOP技术的书籍,并且最近越来越多地参与编程的功能样式之后,推断设计模式是指向面向对象编程作为一个整体的系统性问题的指针是否公平.面向对象编程是否存在根本性缺陷(不要与设计混淆),因为在通过封装处理状态时,已经导致越来越多的模式来解决这种范式的问题.
我对此没有得出任何结论,但我的"直觉"感觉是OOP范式可能会出现更严重的错误.
封装的想法是否导致了比他们解决的问题更多的问题.