Чисто функциональное программирование на Android
Есть ли какие-либо улучшения в этой области? Я хочу, чтобы иметь возможность писать чисто функциональный код на Android в Haskell или подобных языках. Я пробовал несколько примеров с Scala, но, похоже, это боль, чтобы начать. Существуют ли какие-либо другие функциональные языки JVM, которые я могу использовать для написания приложений Android?
Изменить: функциональные языки, которые записывают собственные приложения для Android. Моя ошибка в JVM.
Ответы
Ответ 1
Я сомневаюсь, что вы можете найти что-нибудь зрелое для написания Haskell-подобного кода для Android. Вам нужно реализовать Java-абстракции, которые требуются API Android (реализовать активность и т.д.).
Но если вы действительно хотите писать для Android в чисто функциональном стиле, вы можете попытаться реализовать свою бизнес-логику на чистом функциональном языке, который компилируется в JVM и вызывает его из ваших классов Java. Этот подход был бы намного проще, чем пытаться полностью реализовать его в чисто функциональном стиле.
Как ваш выбор языка, вы можете попробовать
-
Frege, у него даже есть библиотека для Android - froid
-
Eta lang, это очень новый и, вероятно, никто не пытался использовать его для Android еще
Ответ 2
Мне нужно безболезненное решение с точки зрения Gradle сборок и т.д., у вас есть только два варианта: Java и Kotlin, из которых, конечно же, вы должны выбрать Kotlin;)
Kotlin имеет большинство вещей, которые вам нужно написать в функциональном стиле:
- функционирует как гражданин первого класса
- функции более высокого порядка
- неизменяемые коллекции
-
var
и val
как в Scala
-
if-else
как оператор
- элементы сопоставления шаблонов (
where
)
- хвостовая рекурсия
- и многое другое...
Если вы также включили funKTionale и kotlinx.collections.immutable, у вас будут все функциональные свойства, такие как: Option
, Try
, каррирование, memoization, постоянные структуры данных и т.д....
Чтобы начать с Kotlin, установите последнюю версию Android Studio 3 Preview, которая уже имеет встроенный Kotlin поддержка.
BTW, не настолько поляризованы в "чистый" функционал;) В конце концов, 100% "чистый" означает отсутствие побочных эффектов, что означает, что ваше приложение не может взаимодействовать с пользователем;)
Надеюсь, что это поможет:)
Ответ 3
Я никогда не пробовал это лично, но вы можете программировать F #, используя Xamarin.Android(и, я полагаю, с Xamarin Forms тоже). Вы можете увидеть руководство здесь. (Он также содержит пример кода).
Как некоторый фон, F # является функциональным языком .NET Framework. Он получен из ML; на самом деле, многие сценарии ML могут быть скомпилированы почти "напрямую" как F # (с оговоркой, что вам, возможно, придется переименовать, поскольку F # имеет некоторые дополнительные ключевые слова, которые ML не имеет, чтобы поддерживать несколько расширений .NET).
Xamarin позволяет разрабатывать приложения для Android, iOS и Windows. Xamarin Forms позволяет использовать единую кодовую базу для всех трех платформ (это конкурент Ionic).
Еще один момент: Android не использует JVM, даже если вы пишете приложения на Java. (На самом деле, Android еще не поддерживает все функции Java 8). Через Android 4.4 он использовал Dalvik; после этого он начал использовать Android Runtime.
Вы также можете попробовать использовать язык JVM, например Scala, для создания JAR файла и создания для него библиотеки привязок.
Также обратите внимание, что в конечном итоге вы используете, по крайней мере, несколько смешанную парадигму - например, такие вещи, как "Деятельности", являются объектами, а XML файлы, используемые для определения экрана Android, для всех практических целей являются декларативными. Изменить: Этот последний вопрос немного спорный - см. комментарии.
Одна окончательная возможность: я не проверял это слишком внимательно, но попробую эту ссылку для сайта, утверждающего, что вы можете сделать Scala в Android.
Ответ 4
Между Чистым функционалом и Java существует способ, который является IMO Прагматическим функционалом. Например, Redux достигает этого в арене React.
Моя цель - написать приложение (Activity), имеющее неизменяемое состояние, которое продвигается в результате взаимодействий, является функциональным.
В браузере вы можете увидеть, что это сделано с помощью elm (например, язык Haskel, который также является веб-платформой)
Поскольку нам нужно приложение для Android, я открыл Android Studio, который использовал мастер для создания и приложения с панелью действий ящика Navigaton (с Drawer, FloatingActionBar)
Затем преобразовали его, чтобы использовать концепции Elm функционального подхода неизменяемой модели в рабочий POC, основанный на небольшом классе и идиомах ElmBase.
Код написан в Kotlin (инструмент JetBrains для JVM).
Вы можете найти приложение в моем GitHub https://github.com/saffih/ElmDroid Сладкое место в этом подходе состоит в том, что он использует строго сформулированный Котлин и редактор очень хорошо дополняет код,
делая часть кода законченной для меня таким образом, которого я никогда не видел раньше - удивительный опыт (Но для этого требуется использование идиом, таких как закрытый класс и когда это правильно).