这个领域有进步吗?我希望能够在Haskell或类似语言的Android上编写纯功能代码。我已经尝试过使用Scala的一些例子,但开始时似乎很痛苦。我可以用来编写Android应用程序的其他功能JVM语言吗?
编辑:编写本机Android应用程序的函数语言。我对JVM的错误。
这个领域有进步吗?我希望能够在Haskell或类似语言的Android上编写纯功能代码。我已经尝试过使用Scala的一些例子,但开始时似乎很痛苦。我可以用来编写Android应用程序的其他功能JVM语言吗?
编辑:编写本机Android应用程序的函数语言。我对JVM的错误。
我怀疑你能为Android编写类似Haskell的代码找到任何成熟的东西。您需要实现Android API所需的Java抽象(实现活动等)。
但是如果你真的想用纯函数风格的Android编写,你可以尝试用纯函数语言实现你的业务逻辑,编译成JVM并从你的Java类中调用它。这种方法比完全以纯粹的功能方式实现它要简单得多。
作为您的语言选择,您可以尝试
我想要Gradle构建等方面的无痛解决方案,你只有两个选择:Java和 科特林,当然你应该选择 科特林 ;)
科特林 有大部分你需要用功能风格写的东西:
var
和 val
就像Scala一样if-else
作为声明where
声明)如果你也包括 funKTionale 和 kotlinx.collections.immutable,你将拥有所有功能性的好东西: Option
, Try
,currying,memoization,持久数据结构等......
从Kotlin开始,只需安装最新的 Android Studio 3预览版,已经内置了Kotlin支持。
顺便说一句,不要那么极化为“纯粹”功能;)毕竟,100%“纯”意味着没有副作用,这意味着你的应用程序无法与用户互动;)
希望这可以帮助 :)
我从来没有亲自尝试过,但你可以使用Xamarin.Android进行F#编程(我相信,也可以使用Xamarin Forms)。你可以看到指南 这里。 (它还包括示例代码)。
作为一些背景知识,F#是.NET Framework的功能语言。它来自ML;事实上,许多ML脚本几乎可以“直接”编译为F#(需要注意的是你可能需要重命名,因为F#有一些额外的关键字ML没有,以支持几个特定于.NET的扩展) 。
Xamarin允许Android,iOS和Windows手机的本机开发。 Xamarin Forms允许所有三个平台的单一代码库(它是Ionic的竞争对手)。
还有一点:Android确实如此 不 即使您使用Java编写应用程序,也要使用JVM。 (事实上,Android 甚至不支持所有Java 8功能 然而)。通过Android 4.4使用它 的Dalvik;之后,它开始使用 Android运行时。
您还可以尝试使用像Scala这样的JVM语言来创建JAR文件并为其创建绑定库。
还请注意,您最终将使用至少某种混合范例 - 例如,活动之类的东西就是对象,而用于定义Android屏幕的XML文件,出于所有实际目的,都是声明性的。 编辑: 最后一点有点值得商榷 - 请参阅评论。
最后一种可能性:我没有仔细检查过这个问题,但也尝试了 这个链接 对于声称可以在Android中执行Scala的网站。
之间 纯功能 和 Java的,有一种方式是IMO 务实的功能。例如 终极版 实现了 应对 竞技场。
我的目标是编写一个具有不可变状态的应用程序(Activity),该状态由于交互功能而提升。 在浏览器中,您可以看到完成 榆树 (Haskel喜欢也是web平台的语言)
由于我们想要一个Android应用程序,我打开了 Android Studio 使用向导创建和使用Navigaton抽屉操作栏(带抽屉,FloatingActionBar), 然后将其转换为使用 榆树的概念 不可变模型功能方法基于小型ElmBase类和习语的工作POC。 代码是用来写的 科特林 (JetBrains JVM的首选工具)。
你可以在我的GitHub上找到这个应用程序 https://github.com/saffih/ElmDroid 这种方法的最佳点是它利用了Kotlin的强类型,并且编辑器可以很好地编写代码完成, 以我以前从未见过的方式为我完成了许多代码 - 令人惊叹的体验(但它需要使用类似于 密封 上课和 什么时候 正确)。