Android上的纯功能编程

这方面有什么进展吗? 我希望能够用Haskell或类似的语言在Android上编写纯粹的功能代码。 我已经尝试了一些与斯卡拉的例子,但似乎是一个开始的痛苦。 是否还有其他可用于编写Android应用程序的功能性JVM语言?

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

我怀疑你可以找到任何成熟的Android编写类似Haskell的代码。 您需要实现Android API所需的Java抽象(实现活动等)。

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

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

  • 弗雷格 ,它甚至有一个android – froid的库

  • Eta lang ,这是非常新的,可能没有人尝试过使用它的Android

我从来没有亲自尝试过,但是你可以使用Xamarin.Android来做F#编程(我相信,也可以使用Xamarin Forms)。 你可以在这里看到指南。 (它也包括示例代码)。

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

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

还有一点很简单:即使你用Java编写应用程序,Android 也不使用JVM。 (事实上​​,Android 甚至不支持所有的Java 8功能 )。 通过Android 4.4使用Dalvik ; 之后,它开始使用Android Runtime 。

您也可以尝试使用像Scala这样的JVM语言来创建一个JAR文件并为其创建一个绑定库。

另请注意,您最终会使用至少一些混合的范例 – 例如,诸如活动是对象之类的东西,而用于定义Android屏幕的XML文件实际上是声明性的。 编辑:这最后一点是有点争议 – 见评论。

最后一种可能性:我没有太紧密地检查过这个,但也试试这个链接 ,声称你可以在Android上做Scala。

纯粹的功能Java之间 ,有一种方式是IMO 实用功能 。 例如ReduxReact竞技场中实现了这一点。

我的目标是编写一个应用程序(活动)具有不断变化的状态,作为交互功能的结果先进。 在浏览器中,你可以看到用elm (Haskel like语言这也是web平台)

由于我们想要一个Android应用程序,我打开了使用向导创建的应用程序,并使用Navigaton Drawer Action bar(带有Drawer,FloatingActionBar)创建应用程序,然后将其转换为使用Elm概念的不可变模型功能方法,小ElmBase类和成语。 代码是用Kotlin (JVM的JetBrains工具)编写的。

你可以在我的GitHub https://github.com/saffih/ElmDroid上找到这个应用程序。这个方法最好的地方就是它利用了Kotlin的强类型,编辑器完成代码的完成,使得完成了很多的代码以我以前从未见过的方式 – 惊人的体验(但是它需要使用像封闭类和成功的习惯用法)。

我希望在Gradle构建等方面有一个无痛的解决方案,你只有两个选择:Java和Kotlin ,当然你应该选择Kotlin ;)

Kotlin拥有大部分需要用功能风格编写的东西:

  • 作为一等公民
  • 更高阶的功能
  • 不变的集合
  • varval像Scala
  • if-else作为陈述
  • 模式匹配元素( where语句)
  • 尾递归
  • 和更多…

如果你还包括funKTionalekotlinx.collections.immutable ,你将拥有所有功能的好东西,如: OptionTry ,柯里化,记忆,持久的数据结构等…

要开始Kotlin只是安装最新的Android Studio 3预览 ,已经内置Kotlin支持。

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

希望这可以帮助 :)