android - logica - programacion funcional vs orientada a objetos
ProgramaciĆ³n funcional pura en Android (4)
¿Hay algún avance en esta área? Quiero poder escribir código puramente funcional en Android en Haskell o en idiomas similares. He intentado algunos ejemplos con Scala, pero parece ser un dolor para empezar. ¿Hay algún otro lenguaje JVM funcional que pueda usar para escribir aplicaciones de Android?
Editar: lenguajes funcionales que escriben aplicaciones nativas de Android. Mi error sobre la JVM.
Nunca lo he intentado personalmente, pero puedes hacer programación F # usando Xamarin.Android (y, creo, también con Xamarin Forms). Puedes ver la guía aquí . (También incluye código de muestra).
Como antecedentes, F # es el lenguaje funcional de .NET Framework. Se deriva de ML; de hecho, muchos scripts ML se pueden compilar casi "directamente" como F # (con la advertencia de que es posible que tenga que cambiar el nombre porque F # tiene algunas palabras clave adicionales que ML no tiene para admitir varias extensiones .NET específicas) .
Xamarin permite el desarrollo nativo para Android, iOS y Windows Phone. Xamarin Forms permite una base de código única para las tres plataformas (es un competidor de Ionic).
Un punto más: Android no usa JVM, incluso si está escribiendo aplicaciones en Java. (De hecho, Android ni siquiera es compatible con todas las características de Java 8 ). A través de Android 4.4 usó Dalvik ; después de eso, comenzó a usar Android Runtime .
También podría intentar usar un lenguaje JVM como Scala para crear un archivo JAR y crear una biblioteca de enlaces para él.
Tenga en cuenta que terminará usando al menos un paradigma mixto, por ejemplo, cosas como Actividades son objetos, y los archivos XML utilizados para definir una pantalla de Android son, a todos los efectos prácticos, declarativos. Editar: Este último punto es ligeramente discutible - ver los comentarios.
Una última posibilidad: no he comprobado esto demasiado de cerca, pero pruebe también este enlace para un sitio que dice que puede hacer Scala en Android.
Dudo que puedas encontrar algo maduro para escribir el código de Haskell para Android. Necesita implementar abstracciones de Java que son requeridas por la API de Android (implementar actividad, etc.).
Pero si realmente quieres escribir para Android en un estilo puramente funcional, puedes intentar implementar tu lógica de negocios en un lenguaje funcional puro que compila a JVM y lo llama desde tus clases de Java. Ese enfoque sería mucho más simple que intentar implementarlo completamente en un estilo funcional puro.
Como su elección de idioma, puede intentar
Entre Pure funcional y Java , hay una manera que es IMO Pragmático funcional . Por ejemplo, Redux logra eso en la arena React .
Mi objetivo es escribir una aplicación (Actividad) que tenga un estado inmutable que avance como resultado de las interacciones sea funcional. En el navegador puede ver que se haga con olmo (lenguaje similar a Haskel, que también es una plataforma web)
Como queremos una aplicación de Android, abrí Android Studio y utilicé el asistente para crear y aplicar la barra de acción Navigaton Drawer (con Drawer, FloatingActionBar), luego la convertí para usar los conceptos de Elm de enfoque funcional de modelo inmutable en un POC de trabajo basado en un pequeña clase de ElmBase y modismos. El código está escrito en Kotlin (la herramienta JetBrains de elección para la JVM).
Puede encontrar la aplicación en mi GitHub https://github.com/saffih/ElmDroid El punto ideal de ese enfoque es que aprovecha Kotlin fuertemente tipado y el editor codifica las terminaciones muy bien, haciendo mucho del código completado para mí de una manera que nunca había visto antes: una experiencia increíble (pero requiere usar modismos como la clase sellada y cuando es apropiado).
Si desea una solución sencilla en términos de compilaciones de Gradle, etc., solo tiene dos opciones: Java y Kotlin , de las cuales, por supuesto, debe elegir Kotlin ;)
Kotlin tiene la mayoría de las cosas que necesita para escribir en estilo funcional:
- funciona como ciudadano de primera clase
- funciones de orden superior
- colecciones inmutables
-
var
yval
como en Scala -
if-else
como una declaración - elementos de coincidencia de patrón (declaración
where
) - recursividad de la cola
- y más...
Si también incluye funKTionale y kotlinx.collections.immutable , tendrá todos los extras funcionales como: Option
, Try
, currying, memoialización, estructuras de datos persistentes, etc.
Para comenzar con Kotlin basta con instalar la última versión de Android Studio 3 Preview , que ya tiene soporte Kotlin incorporado.
Por cierto, no estés tan polarizado en funcionalidades "puras";) Después de todo, ser 100% "puro" significa que no hay efectos secundarios, lo que significa que tu aplicación no puede interactuar con el usuario;)
Espero que esto ayude :)