如何在 Haskell 中使用类型类以及与 Java 接口的区别

我昨天问了这个问题,用户@dfeuer 建议我,作为初学者,我不应该定义自己的类。他的评论:

我很好奇,为什么定义我自己的类通常(对于初学者)是个坏主意?这些“陷阱”是什么,为什么设计好的课程如此困难?

我认为类用于定义数据接口,就像我在 OOP 中所做的那样。我在写java代码的时候,尽量用抽象类,尤其是接口来写代码,这样当我需要改变数据的时候,我的大部分代码保持不变,而且我的方法有很高的可重用性。@Carl 在该问题下的另一条评论表明,这不是类的使用方式

我担心的是,如果没有这种 OOP 使用类,数据的任何更改都会破坏大部分代码。这种恐惧是没有资金的吗?如果它得到资助,为什么我不应该使用类来定义数据接口?

公平地说,我是自学的 Java 程序员,我没有读过别人的代码,所以也许我做的 Java 也错了。我只阅读了一些关于该语言如何工作的书籍,然后构建了一个应用程序。我开发了它一年左右,我的整个风格就是这种体验的结果。不过,我的风格似乎很适合我的需求,因此我认为 Java 编程/OOP 确实是这样完成的。

回答

我是一个相对较新(和业余)的 Haskell 爱好者。

我想说的是:不要再想着可以在 Haskell 中重用 OOP 知识、模式和其他东西了。甚至术语也不是“可重用的”。OOP 语言和 Haskell 中的类不是一回事(实际上,它们在 Haskell 中被称为类型类)。

这是对我的一个问题的回答。它或多或少是这样开始的:

即说明 Haskell 与 OOP 语言中两个相似(只是表面上相似!)概念之间的内在差异。

另一个有趣的链接是关于Haskell 中的设计模式。它是非常高级的,我仍然不太明白如何在 Haskell 中使用某些工具来替代特定的 OOP 模式。(目前,对我来说,可能是一等函数消除了对策略模式的需要这一事实是唯一完全清楚的。)但是,我认为这是一本很好的读物,最重要的是,它应该令人信服在 Haskell 中学习和编码会带来巨大的心理转变,最好从零开始。如果你拒绝,你就学不会 Haskell。

我并不是说你不应该用你的大脑去注意 OOP 语言和 Haskell 之间的相似之处。你应该假设即使试图建立在这些观察上也会妨碍你的学习过程。

至于具体的Haskell,坐下来学习LYAH,你在学校(用笔记本电脑来尝试的例子)是一个很好的学习方式很好的基础。这是一本易于阅读的书,并会手动指导您。

值得一提的是,我认为《计算机程序的结构和解释》是一本可以伴随学习函数式语言的好书,因为它为您提供了我之前提到的哲学转变的实践背景。你必须做练习。这样做会迫使你进行这种心理转变。

彻底研究 LYAH 之前,我永远不会申请的最后一个建议是完成The Monad Challenges。但我不得不说,LYAH 在教你挑战要求你思考什么方面已经做得很好。我发现自己在想“我已经知道这一点”,“为什么挑战如此迂回?”。

  • @Umaxo 关键是,您可能应该做一些事情来学习设计代码的功能性方法。比如跟着教程或者看书什么的。用 Haskell 重写现有的 Java 应用程序不是这样做的好方法。为此,您最终将迫使自己编写模拟 Java 特性的 Haskell 代码,这比初学者级别的 Haskell 复杂得多,也比原始 Java 复杂得多!说真的,Haskell 并不是一门难的语言,但是 OO 程序员通过将 OO 思维模式应用到一种完全不同的语言,让他们自己变得更难。

以上是如何在 Haskell 中使用类型类以及与 Java 接口的区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>