2017-01-24 8 views
10

Есть ли какие-либо улучшения в этой области? Я хочу, чтобы иметь возможность писать чисто функциональный код на Android в Haskell или подобных языках. Я пробовал некоторые примеры с Scala, но, похоже, это боль, чтобы начать. Существуют ли какие-либо другие функциональные JVM-языки, которые я могу использовать для написания приложений Android?Чисто функциональное программирование на android

Редактировать: функциональные языки, которые записывают собственные приложения для Android. Моя ошибка в JVM.

+0

Я думаю, что Clojure также работает на JVM. У меня нет опыта с этим. – 4castle

+1

* «Кажется, это боль, чтобы начать». * Большинство функциональных языков программирования имеют крутую кривую обучения. Для этого, чтобы быть по-теме, я думаю, вы должны спросить о том, как заставить X-язык работать в Android. JVM не используется Android, так что это наиболее вероятная точка боли. Просить людей рекомендовать языки программирования придерживаться мнения. – 4castle

+0

Я говорю больше о построениях град и т. Д. И иногда примеры, которые существуют, - это [одноименные программы hello world] (https://github.com/neurocyte/android-haskell-activity). Я спрашиваю больше о зрелости, инструментах и ​​т. Д. – user3574294

ответ

5

Я сомневаюсь, что вы можете найти что-нибудь зрелое для написания кода типа Haskell для Android. Вам необходимо реализовать Java-абстракции, которые требуются API Android (реализовать активность и т. Д.).

Но если вы действительно хотите написать для Android в чисто функциональном стиле, вы можете попытаться реализовать свою бизнес-логику на чистом функциональном языке, который компилируется в JVM и вызывает его из ваших классов Java. Этот подход был бы намного проще, чем пытаться полностью реализовать его в чисто функциональном стиле.

Как ваш выбор языка, вы можете попробовать

  • Frege, у него даже есть библиотека для Android - froid

  • Eta lang, это очень ново и, вероятно, никто не пытался использовать его для Android еще

+0

Есть ли какие-либо приложения, созданные с помощью froid? – user3574294

+0

@ user3574294 Я не знаю. Я считаю, что большинство приложений для Android не являются открытым исходным кодом, но вы можете попытаться найти способы использования froid в Github. Вы ищете зрелость, и ML-стиль не является обязательным требованием, вы можете попробовать Kotlin + Anko. Это позволит вам писать функциональный код, но без каких-либо гарантий чистоты. – SerCe

2

Я никогда не пробовал это лично, но вы можете программировать F #, используя Xamarin.Android (и, я полагаю, с Xamarin Forms тоже). Вы можете увидеть руководство here. (Он также содержит пример кода).

Как некоторый фон, F # является функциональным языком .NET Framework. Он получен из ML; на самом деле, многие сценарии ML могут быть скомпилированы почти «напрямую» как F # (с оговоркой, что вам, возможно, придется переименовать, поскольку F # имеет некоторые дополнительные ключевые слова, которые ML не имеет, чтобы поддерживать несколько расширений .NET) ,

Xamarin позволяет разрабатывать приложения для Android, iOS и Windows. Xamarin Forms позволяет использовать одну кодовую базу для всех трех платформ (это конкурент Ionic).

Еще одна быстрая точка: Android делает не использует JVM, даже если вы пишете приложения на Java. (На самом деле, Android does not even support all Java 8 features еще). Через Android 4.4 он использовал Dalvik; после этого он начал использовать Android Runtime.

Вы также можете попробовать использовать язык JVM, например Scala, для создания JAR-файла и создания для него библиотеки привязок.

Обратите внимание, что в конечном итоге вы будете использовать, по крайней мере, несколько смешанную парадигму - например, объекты, такие как Activities, являются объектами, а файлы XML, используемые для определения экрана Android, для всех практических целей являются декларативными. Редактировать: Этот последний вопрос немного спорный - см. Комментарии.

Окончательная возможность: я не проверял это слишком близко, но попробуйте также this link для сайта, утверждающего, что вы можете делать Scala на Android.

+1

Деятельность может быть объектами, но это не обязательно означает, что решение будет объектно-ориентированным. – 4castle

+0

@ 4castle Я не уверен, что буду следовать - я думаю, это означало бы, что вы, как минимум, использовали несколько парадигм (функциональных, декларативных и объектно-ориентированных). – EJoshuaS

+1

Я говорю, что объектно-ориентированное программирование является парадигмой. Объекты - это тип данных. Так же, как объектно-ориентированный язык программирования может использовать функции без какого-либо функционального программирования, функциональный язык программирования может использовать объекты, не будучи объектно-ориентированными. Парадигмы определяются не только их основным типом данных. – 4castle

1

Между Чистый функциональный и Java, есть способ, которым является IMO Прагматический функциональный. Например, Redux достигает, что в React арене.

Моя цель - написать приложение (действие), которое имеет неизменяемое состояние, которое продвигается в результате взаимодействий, является функциональным. В браузере вы можете увидеть, что сделано с elm (Хаскелем как язык, который также является веб-платформа)

Поскольку мы хотим Android приложения, я открыл Android студии использовала мастер для создания и приложение с Navigaton Ящика действий bar (с ящиком, FloatingActionBar), Затем преобразовали его в использование Концепция вязов функционального подхода неизменяемой модели в рабочий POC на основе небольшого класса и идиом ElmBase. Код написан на Kotlin (инструмент JetBrains по выбору для JVM).

Вы можете найти приложение на моем GitHub https://github.com/saffih/ElmDroid сладкого пятно такого подхода состоит в том, что она использует Котлин будучи сильно типизированной и редактор делает код доработки очень хорошо, делает много в коде завершенного для меня так, у меня есть никогда не видел - удивительный опыт (Но для этого нужно использовать идиомы, такие как , запечатанные класс и , когда должным образом).

3

Я вы хотите безболезненное решение с точки зрения Gradle сборки и т.д., у вас есть только два варианта: Java и Котлин, из которых, конечно, вы должны выбрать Котлин;)

Kotlin имеет большинство вещи, которые вы должны писать в функциональном стиле:

  • функции в качестве первого класса гражданина функции
  • высшего порядка
  • неизменные коллекции
  • var и val как в Scala
  • if-else как заявление
  • элементов сопоставления с образцом (where заявления)
  • хвостовой рекурсии
  • и многого другой ...

Если вы также включать funKTionale и kotlinx.collections.immutable, вы будете иметь все функциональные лакомства, как: Option, Try, выделки, запоминание, постоянные структуры данных и так далее ...

Чтобы начать с Котлином просто установите последнюю версию Android Studio 3 Preview, которая уже имеет встроенную поддержку Kotlin.

BTW, не быть настолько поляризован в «чистый» функциональный;) В конце концов, будучи 100% «чистой» не означает, что никаких побочных эффектов, что означает ваше приложение не может взаимодействовать с пользователем;)

Надеюсь, что это поможет :)

+0

Почему в этом комментарии нет нисходящего потока? Я думаю, что он заслуживает более позитивного голосования вместо этого – Derekyy