Y a-t-il des progrès dans ce domaine? Je veux pouvoir écrire du code purement fonctionnel sur Android en Haskell ou dans des langues similaires. J'ai essayé quelques exemples avec Scala mais cela semble être difficile de commencer. Existe-t-il d'autres langages JVM fonctionnels que je peux utiliser pour écrire des applications Android?

Edit: langages fonctionnels qui écrivent des applications Android natives. Mon erreur sur la JVM.

11
user3574294 24 janv. 2017 à 08:15

4 réponses

Meilleure réponse

Je doute que vous puissiez trouver quelque chose de mature pour écrire du code de type Haskell pour Android. Vous devez implémenter les abstractions Java requises par l'API Android (activité d'implémentation, etc.).

Mais si vous voulez vraiment écrire pour Android dans un style purement fonctionnel, vous pouvez essayer d'implémenter votre logique métier dans un langage fonctionnel pur qui se compile en JVM et l'appelle à partir de vos classes Java. Cette approche serait beaucoup plus simple que d'essayer de l'implémenter entièrement dans un style purement fonctionnel.

Selon votre choix de langue, vous pouvez essayer

  • Frege, il a même une bibliothèque pour Android - froid

  • Eta lang, c'est très nouveau et probablement personne n'a encore essayé de l'utiliser pour Android

7
SerCe 6 mars 2017 à 23:42

Entre purement fonctionnel et Java , il y a un moyen qui est à l’OMI fonctionnel pragmatique . Par exemple, Redux y parvient dans l'arène React .

Mon objectif est d'écrire une application (Activité) ayant un état immuable qui a avancé à la suite d'interactions est fonctionnelle. Dans le navigateur, vous pouvez voir cela fait avec elm (langage de type Haskel qui est aussi plateforme web)

Puisque nous voulons une application Android, j'ai ouvert Android Studio utilisé l'assistant pour créer une application avec la barre d'action Navigaton Drawer (avec Drawer, FloatingActionBar), Ensuite, convertissez-le pour utiliser les concepts Elm de l'approche fonctionnelle du modèle immuable en un POC fonctionnel basé sur une petite classe ElmBase et des idiomes. Le code est écrit en Kotlin (outil JetBrains de choix pour la JVM).

Vous pouvez trouver l'application sur mon GitHub https://github.com/saffih/ElmDroid Le sweet spot de cette approche est qu'elle tire parti du fait que Kotlin est fortement typé et que l'éditeur effectue très bien les complétions de code, faire une grande partie du code complété pour moi d'une manière que je n'ai jamais vue auparavant - une expérience incroyable (mais cela nécessite d'utiliser des idiomes comme la classe scellée et quand correctement).

1
Saffi Hartal 25 avril 2017 à 16:21

Je ne l'ai jamais essayé personnellement, mais vous pouvez faire de la programmation F # à l'aide de Xamarin.Android (et, je crois, avec Xamarin Forms aussi). Vous pouvez consulter le guide ici. (Il comprend également un exemple de code).

Pour rappel, F # est le langage fonctionnel du .NET Framework. Il est dérivé de ML; en fait, de nombreux scripts ML peuvent être compilés presque "directement" en F # (avec la mise en garde que vous devrez peut-être renommer car F # a des mots-clés supplémentaires que ML n'a pas pour prendre en charge plusieurs extensions spécifiques à .NET) .

Xamarin permet le développement natif pour Android, iOS et Windows Phone. Xamarin Forms permet une seule base de code pour les trois plates-formes (c'est un concurrent d'Ionic).

Un dernier point rapide: Android n'utilise pas la JVM, même si vous écrivez des applications en Java. (En fait, Android ne prend même pas encore en charge toutes les fonctionnalités de Java 8 ). Grâce à Android 4.4, il utilisait Dalvik; après cela, il a commencé à utiliser Android Runtime.

Vous pouvez également essayer d'utiliser un langage JVM comme Scala pour créer un fichier JAR et créer une bibliothèque de liaisons pour celui-ci.

Veuillez également noter que vous finirez par utiliser au moins un paradigme mixte - par exemple, des choses comme les activités sont des objets, et les fichiers XML utilisés pour définir un écran Android sont, à toutes fins pratiques, déclaratifs. Edit: Ce dernier point est légèrement discutable - voir les commentaires.

Une dernière possibilité: je n'ai pas vérifié cela de trop près, mais essayez également ce lien pour un site revendiquant vous pouvez faire Scala sous Android.

2
EJoshuaS - Reinstate Monica 24 janv. 2017 à 23:06

Si vous voulez une solution indolore en termes de builds Gradle, etc., vous n'avez que deux options: Java et Kotlin , parmi lesquelles vous devez bien sûr choisir Kotlin ;)

Kotlin possède la plupart des éléments dont vous avez besoin pour écrire dans un style fonctionnel:

  • fonctionne comme un citoyen de première classe
  • fonctions d'ordre supérieur
  • collections immuables
  • var et val comme dans Scala
  • if-else comme déclaration
  • éléments de correspondance de modèle (instruction where)
  • récursivité de la queue
  • et plus...

Si vous incluez également funKTionale et kotlinx.collections.immutable , vous aurez tous les avantages fonctionnels tels que: Option, Try, currying, mémorisation, structures de données persistantes, etc.

Pour commencer avec Kotlin, installez simplement la dernière Aperçu d'Android Studio 3 , qui a déjà un support Kotlin intégré.

BTW, ne soyez pas si polarisé en fonctionnel "pur";) Après tout, être 100% "pur" signifie pas d'effets secondaires, ce qui signifie que votre application ne peut pas interagir avec l'utilisateur;)

J'espère que cela t'aides :)

7
Grzegorz D. 4 juil. 2017 à 22:13