android上的纯函数编程

android上的纯函数编程,android,functional-programming,jvm,Android,Functional Programming,Jvm,这方面有什么进展吗?我希望能够在Android上用Haskell或类似语言编写纯功能代码。我尝试了一些Scala的例子,但开始时似乎很痛苦。有没有其他功能性JVM语言可以用来编写Android应用程序 编辑:编写本机android应用程序的函数式语言。我关于JVM的错误 我从未亲自尝试过,但你可以使用Xamarin.Android(我相信,还有Xamarin表单)进行F#编程。你可以看看导游。(它还包括示例代码) 作为背景,F#是.NET框架的函数式语言。它来源于ML;事实上,许多ML脚本几乎可

这方面有什么进展吗?我希望能够在Android上用Haskell或类似语言编写纯功能代码。我尝试了一些Scala的例子,但开始时似乎很痛苦。有没有其他功能性JVM语言可以用来编写Android应用程序


编辑:编写本机android应用程序的函数式语言。我关于JVM的错误

我从未亲自尝试过,但你可以使用Xamarin.Android(我相信,还有Xamarin表单)进行F#编程。你可以看看导游。(它还包括示例代码)

作为背景,F#是.NET框架的函数式语言。它来源于ML;事实上,许多ML脚本几乎可以“直接”编译为F#(需要注意的是,您可能需要进行一些重命名,因为F#有一些ML没有的额外关键字,以便支持几个特定于.NET的扩展)

Xamarin支持Android、iOS和Windows phone的本机开发。Xamarin Forms允许所有三个平台使用单一代码库(它是Ionic的竞争对手)

还有一个要点:Android不使用JVM,即使你是用Java编写应用程序。(事实上,Android还没有出现)。通过安卓4.4使用;之后,它开始使用

您还可以尝试使用类似Scala的JVM语言创建JAR文件并为其创建绑定库

还请注意,您最终将使用至少某种程度上的混合范例——例如,活动之类的东西都是对象,而用于定义Android屏幕的XML文件在所有实际用途中都是声明性的编辑:最后一点有点争议-请参阅评论


最后一种可能性:我还没有仔细检查过这一点,但也尝试过一个声称你可以在Android中使用Scala的网站。

我怀疑你是否能找到任何成熟的方法来为Android编写类似Haskell的代码。您确实需要实现Android API所需的Java抽象(实现活动等)

但是,如果你真的想用纯函数式的风格为Android编写代码,你可以尝试用纯函数式语言实现你的业务逻辑,这种语言可以编译成JVM,并从Java类中调用它。这种方法比试图完全以功能性风格实现它要简单得多

作为您的语言选择,您可以尝试

  • ,它甚至有一个android库-

  • ,它是非常新的,可能还没有人尝试在Android上使用它

在纯函数和Java之间,有一种方法是IMO实用函数。例如,Redux在React竞技场中实现了这一点

我的目标是编写一个应用程序(活动),该应用程序(活动)具有不可变的状态,并且由于交互而高级,因此具有功能性。 在浏览器中,您可以看到使用(类似Haskel的语言,也是web平台)完成的操作

由于我们想要一个Android应用程序,我打开了Android Studio,使用向导创建了一个带有导航抽屉操作栏(带抽屉、浮动操作栏)的应用程序, 然后将它转换为使用Elm概念的不可变模型函数方法,并基于一个小的Elm基类和习惯用法将其转换为一个可工作的POC。 代码是用Kotlin(JVM的首选JetBrains工具)编写的

你可以在my GitHub上找到这个应用程序,这种方法的优点是它利用了Kotlin的强类型特性,并且编辑器能够很好地完成代码,
以一种我从未见过的方式为我完成了大量的代码-惊人的体验(但它需要使用诸如sealed类之类的习惯用法,并且在正确的情况下)。

如果你想要一个无痛苦的Gradle构建解决方案等,你只有两个选择:Java和Kotlin,当然,您应该选择Kotlin

具有您需要以功能性风格编写的大部分内容:

  • 作为一等公民的职能
  • 高阶函数
  • 不变集合
  • var
    val
    类似于Scala中的
  • if-else
    作为语句
  • 模式匹配的元素(
    其中
    语句)
  • 尾部递归
  • 还有更多
如果您还包括和,您将拥有所有功能性的优点,如:
选项
尝试
、咖喱、备忘录、持久数据结构等等

要开始使用Kotlin,只需安装最新版本,它已经具有内置的Kotlin支持

顺便说一句,不要被“纯”的功能性极化;)毕竟,100%的“纯”意味着没有副作用,这意味着你的应用程序无法与用户交互;)


希望这有帮助:)

我认为Clojure也可以在JVM上运行。我没有这方面的经验。“这似乎是一个痛苦的开始”大多数函数式编程语言有一个陡峭的学习曲线。对于这个主题,我认为您应该询问如何使X语言在Android中工作。Android不使用JVM,所以这很可能是最大的痛点。要求人们推荐编程语言是基于观点的。我更多地谈论的是gradle构建等,有时存在的例子是。我要求更多的成熟度,工具和东西Scala不是一个痛苦的开始获取sbt,添加适当的插件,如果这仍然相关,Eta已经用于Android。它还有一个Gradle插件和更多,去年发生了很多事情,请查看该网站!活动可能是对象,但这并不一定意味着解决方案将是面向对象的。@4castle我不确定我是否遵循-我认为这将意味着您至少使用了多种范例(函数式、声明式和面向对象)。我是说面向对象编程是一种范例。对象是一种数据类型。正如面向对象编程语言可以使用