Android上的纯function编程

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

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

Solutions Collecting From Web of "Android上的纯function编程"

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

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

作为你的语言select,你可以尝试

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

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

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

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

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

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

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

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

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

我希望在Gradle构build等方面有一个无痛的解决scheme,你只有两个select:Java和Kotlin ,当然你应该selectKotlin ;)

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

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

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

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

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

希望这可以帮助 :)

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

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

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

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