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 实用功能 。 例如Redux在React竞技场中实现了这一点。
我的目标是编写一个应用程序(活动)具有不断变化的状态,作为交互功能的结果先进。 在浏览器中,你可以看到用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拥有大部分需要用功能风格编写的东西:
- 作为一等公民
- 更高阶的功能
- 不变的集合
-
var
和val
像Scala -
if-else
作为陈述 - 模式匹配元素(
where
语句) - 尾递归
- 和更多…
如果你还包括funKTionale和kotlinx.collections.immutable ,你将拥有所有功能的好东西,如: Option
, Try
,柯里化,记忆,持久的数据结构等…
要开始Kotlin只是安装最新的Android Studio 3预览 ,已经内置Kotlin支持。
顺便说一句,不要这么极端化为“纯”功能;)毕竟,100%“纯”意味着没有任何副作用,这意味着你的应用程序不能与用户交互;)
希望这可以帮助 :)