我已经阅读了关于声明性/函数式编程(语言)的一些文本,尝试了Haskell以及自己写的一个。 从我所看到的,函数式编程与古典命令式风格相比有几个优点: 无状态程序; 无副作用 并发; 对于不断上升的多核技术的玩法非常好 程序通常较短,在某些情况下更易于阅读 生产力提高(例如:Erlang) 命令式编程是一个非常古老的范式(据我所知),可能不适合21世纪 为什么使用function语言编写程序的公司仍然如此“罕见”? 为什么在研究函数式编程的优点时,我们还在使用命令式编程语言呢? 也许现在为时太早,但今天呢?
每当程序员抱怨空错误/exception,每当有人问我们做什么,而没有null。 我对选项types的冷静有一些基本的想法,但我没有知识或语言技能来最好地expression它。 对于普通程序员来说,下面这样一个很好的解释是什么,我们可以指出这个人呢? 具有引用/指针的默认情况下是不可用的 选项types如何工作,包括缓解检查空例如的策略 模式匹配和 一元的理解 消息吃零的替代解决scheme (我错过了其他方面)
我听说C ++类成员函数模板不能是虚拟的。 这是真的? 如果它们可以是虚拟的,那么可以使用这种function的场景的例子是什么?
我在这里看到很多关于函数式语言和东西的讨论。 你为什么要用一个“传统”的语言? 他们做什么更好? 他们还有什么更糟的? 什么是理想的function编程应用程序?
在函数式编程和PLT圈子里,我多次听到“余数”这个术语,特别是当讨论的是物体,连接器,镜头等时。 谷歌search这个术语给页面给这些结构的math描述,这是我很难理解的。 任何人都可以解释在编程语境下什么是合数,它们的意义是什么,它们是如何与对象和连接器相关的?
我最近抓住了FP错误(试图学习Haskell),而且我对迄今为止所看到的(一stream的函数,懒惰的评估以及所有其他的好东西)印象深刻。 我还没有专家,但是我已经开始发现,在function上比在基本algorithm中推理更容易(而且我在遇到麻烦的时候还要回去)。 但是,目前的FP似乎平坦的一个领域是GUI编程。 Haskell方法似乎只是包装命令式GUI工具包(如GTK +或wxWidgets),并使用“do”块来模拟命令式的风格。 我没有使用F#,但我的理解是,它使用OOP与.NET类做类似的事情。 显然,这样做有一个很好的理由 – 目前的GUI编程都是关于IO和副作用的,所以纯粹的函数式编程在大多数当前的框架中是不可能的。 我的问题是,是否有可能对GUI编程有function的方法? 我很难想象这在实践中会是什么样子。 有没有人知道任何框架,试验或其他,尝试这样的事情(甚至任何框架是从底层devise的function语言)? 或者是只使用混合方法的解决scheme,OOP用于GUI部件和FP用于逻辑? (我只是出于好奇而问 – 我很喜欢认为FP是“未来”,但GUI编程似乎是一个相当大的空缺)。
为什么C#这样devise? 据我所知,一个接口只描述行为,并描述一个实现特定行为的接口类的契约义务。 如果class级希望以共享的方式实施这种行为,他们为什么不呢? 以下是我想到的一个例子: // These items will be displayed in a list on the screen. public interface IListItem { string ScreenName(); … } public class Animal: IListItem { // All animals will be called "Animal". public static string ScreenName() { return "Animal"; } …. } public class Person: IListItem { private string name; // […]
自从去年开始学习F#和OCaml以来,我已经阅读了大量的文章,坚持认为devise模式(尤其是Java)是命令式语言中缺less特性的解决方法。 我发现的一篇文章提出了相当强烈的说法 : 我遇到的大多数人都阅读了“四人帮”的devise模式书。 任何自我尊重的程序员都会告诉你,这本书是语言不可知的,这些模式一般适用于软件工程,不pipe你使用哪种语言。 这是一个崇高的主张。 不幸的是,事实远非如此。 function语言是非常有performance力的。 在一种function语言中,由于语言可能如此之高,所以不需要devise模式,最终可以将概念中的devise模式排除在外。 函数式编程的主要function包括函数作为第一类值,柯里化,不可变的值等。对我来说,OOdevise模式近似于任何这些特性似乎并不明显。 此外,在支持OOP的函数式语言(如F#和OCaml)中,使用这些语言的程序员使用与其他所有OOP语言相同的devise模式似乎是显而易见的。 实际上,现在我每天都在使用F#和OCaml,而且我在这些语言中使用的模式与我在使用Java编写时使用的模式之间没有明显的区别。 function性编程是否消除了对OOPdevise模式的需求,是否有任何事实? 如果是这样,你可以发布或链接到一个典型的OOPdevise模式的例子和它的function等效?
我知道语言规范禁止function模板的部分专业化。 我想知道为什么禁止它的理由? 他们没用吗? template<typename T, typename U> void f() {} //allowed! template<> void f<int, char>() {} //allowed! template<typename T> void f<char, T>() {} //not allowed! template<typename T> void f<T, int>() {} //not allowed!
是否有任何理由使重写的C ++虚函数的权限不同于基类? 这样做有没有危险? 例如: class base { public: virtual int foo(double) = 0; } class child : public base { private: virtual int foo(double); } C ++常见问题解答说,这是一个坏主意,但没有说明原因。 我已经在一些代码中看到了这个习惯用法,我相信作者试图让这个类最终成为一个假设,即不可能重写一个私有成员函数。 但是, 这篇文章显示了重写私有函数的一个例子。 当然,C ++ faq的另一部分build议不要这样做。 我的具体问题: 在派生类和基类中使用不同的虚拟方法权限是否有任何技术问题? 有没有合法理由这样做?