Reporte
Reporte
Reporte
959
El creador del lenguaje, ha dicho que Ruby está diseñado para la productividad y la
diversión del desarrollador, siguiendo los principios de una buena Interfaz de usuario.
Sostiene que el diseño de sistemas necesita enfatizar las necesidades humanas más que
las de la máquina. Ruby es totalmente libre. No sólo gratis, sino también libre para
usarlo, copiarlo, modificarlo y distribuirlo. En Ruby, todo es un objeto. Se le puede
asignar propiedades y acciones a toda información y Código. La programación
orientada a objetos llama a las propiedades variables de instancia y las acciones son
conocidas como métodos. La orientación a objetos pura de Ruby se suele demostrar con
un simple código que aplica una acción a un número. Ruby sigue la influencia del
lenguaje Smalltalk pudiendo poner métodos y variables de instancia a todos sus tipos de
datos. Esto facilita el uso de Ruby, porque las reglas que se aplican a los objetos son
aplicables a todo Ruby. Ruby es considerado un lenguaje flexible, ya que permite a sus
usuarios alterarlo libremente. Las partes esenciales de Ruby pueden ser quitadas o
redefinidas a placer. Se puede agregar funcionalidad a partes ya existentes. Ruby intenta
no restringir al desarrollador. Los bloques de Ruby son también vistos como una fuente
de gran flexibilidad. El desarrollador puede anexar una cláusula a cualquier método,
describiendo cómo debe actuar. La cláusula es llamada bloque y se ha convertido en una
de las más famosas funcionalidades para los recién llegados a Ruby que vienen de otros
lenguajes imperativos como PHP o Visual Basic. A diferencia de otros lenguajes de
programación orientada a objetos, Ruby se caracteriza por su intencional herencia
simple. Sin embargo, Ruby incorpora el concepto de módulos (llamados categorías en
Objective-C), que son colecciones de métodos. A pesar de que Ruby utiliza la
puntuación muy limitadamente y se prefieren las palabras clave en inglés, se utiliza algo
de puntuación para decorar el código. Ruby no necesita declaraciones de variables. Se
utilizan convenciones simples para nombrar y determinar el alcance de las mismas.
Características de Ruby:
wxWidgets. Son unas bibliotecas multiplataforma y libres, con la ventaja que nos
permite producir o usar el código como privativo (cuando se trata de software
empresarial por ejemplo), hechos y creadas para el desarrollo de interfaces gráficas en
C++. Su interfaz gráfica se basa en bibliotecas nativas, con lo que obtendrán gráficas
casi idénticas al del entorno que usen y resuktan muy portables entre distintos sistemas
operativos. Están disponibles para Windows, MacOS, GTK+, Motif, OpenVMS y OS/2.
El API de la biblioteca cuenta con accesos a bases de datos, así como uso de XML,
gestión de hilos, soporte de red, manipulación de archivos, manejo de ficheros, etc.
En los últimos años el lenguaje se ha hecho muy popular, gracias a varias razones
como:
Características de Python:
Multiplataforma. Al contrario que muchos lenguajes como visual basic, que
principalmente solo se puede hacer cosas para Windows, con Python se tiene la
posibilidad de usarlo en muchos dispositivos y sistemas operativos, ya que se
han creado intérpretes para Unix, Linux, Windows y sistemas Mac Os.
Sobrecarga. En Python no se tiene sobrecarga de métodos, ya que al no definir
los tipos de los parámetros en el encabezado, no sería posible distinguir a qué
método hay que llamar. Sin embargo, se puede decir que sí tiene sobrecarga de
operadores, ya que al encontrar un operador, Python llamará a distintos métodos
según el tipo de las variables que se quiera sumar, restar, multiplicar, etc.
Multihilo: Los subprocesos permiten que los programas de Python manejen
múltiples funciones a la vez en lugar de ejecutar una secuencia de comandos
individualmente. Sin embargo, tiene una forma complicada en el desarrollarlo
para ejecutar múltiples hilos.
Manejo de memoria. Python, como C #, Java, Ruby, Kotlin y muchos otros
idiomas, utiliza la recolección de basura en lugar de la administración de
memoria manual. Simplemente crea objetos libremente y el administrador de
memoria del idioma periódicamente (o cuando lo dirige específicamente) busca
cualquier objeto que ya no esté referenciado por su progtwig.
PyQt. PyQt implementa la popular biblioteca Qt. Esto abre la posibilidad de desarrollar
aplicaciones en Python que tengan un aspecto familiar en muchas plataformas, al
tiempo que aprovechan las herramientas y el conocimiento de la gran comunidad de Qt.
PyQt tiene doble licencia bajo licencia comercial y GLP, similar al proyecto Qt en sí, y
la compañía principal que brinda soporte a PyQt ofrece una licencia de FAQ para
ayudar a entender lo que esto significa para su aplicación.
Existen ciertos entornos que para mejorar el rendimiento usan un pequeño compilador
para la última fase de compilación, de forma que una vez que se tenga el bytecode, en
vez de interpretarlo se compila generando código nativo para esa plataforma y se
ejecuta, pero esta compilación se realiza cada vez que se quiera ejecutar el programa. El
único código realmente independiente es el bytecode. Este tipo de compiladores se
conocen como 'Just In Time' o JIT. Sin embargo, el bytecode no se completa hasta que
se junta con un entorno de ejecución, que en este caso será la máquina virtual Java de la
plataforma en la que estemos. Un browser puede proveer dicha plataforma desde el
punto de vista del sistema operativo.
Características de Java:
Java Swing. Es una herramienta de interfaz gráfica de usuario (GUI) ligera que incluye
un amplio conjunto de widgets. Incluye un paquete que le permite crear componentes de
GUI para sus aplicaciones Java, y es independiente de la plataforma.
La biblioteca Swing está construida sobre el conjunto de herramientas de widgets
abstractos de Java (AWT), un kit de herramientas GUI más antiguo que depende de la
plataforma. Puede utilizar los componentes de la GUI de Java como el botón, el cuadro
de texto, etc., de la biblioteca y no tiene que crear los componentes desde cero.
AWT. Significa Abstract Window Toolkit. Pese a ser la más antigua, también es la más
completa. Se centra en el sistema operativo (SO) para dibujar gráficos, por lo que cada
SO o plataforma tendrá su propia GUI. Esto significa que se verá diferente o tendrá u n
aspecto distinto en cada una de las plataformas.
Está diseñado para interoperar con Java, por lo tanto se puede tener módulos programados
en Java y otros módulos desarrollados en Kotlin. Estos módulos se podrían comunicar
perfectamente sin problemas, simplemente tendrían que salvar el escalón que existe entre
el desarrollo en Java y las premisas que tiene el desarrollo en Kotlin.
Kotlin es compatible con librerías ya existentes, ya que todas las librerías que existen
actualmente para Java están ya migradas o bien se pueden usar desde Kotlin. No existe
ningún problema en emplear librerías como Retrofit, Dagger 2, Realm o Joeq, por lo tanto
no es ningún inconveniente pasarse al desarrollo en Kotlin porque no se tenga librerías o
documentación.
La migración de una aplicación Java existente a Kotlin se puede realizar de manera
gradual, desarrollando el código nuevo, o cambiando gradualmente partes del código en
Kotlin mientras se mantiene el código antiguo Java.
Debido a la compatibilidad completa con Java, Kotlin ha podido ser utilizado para
desarrollar para Android desde su aparición, aunque sin soporte oficial por parte de
Google.Esto cambió en Mayo de 2017, cuando Google hizo oficial el soporte de Kotlin.
Kotlin no se limita a ofrecer simplemente la opción de cambiar código Java por Kotlin,
sino que ofrece una serie de herramientas para ofrecer funcionalidades extra:
Kotlin Android Extensions es una extensión del compilador que permite sustituir las
llamadas a findViewById() por propiedades generadas en tiempo de compilación
automáticamente.
Entre sus ventajas se mencionan: Menor cantidad de código, más claro, con menos
posibilidades de bugs, y todo con una curva de aprendizaje pequeña y gran similitud a
otros lenguajes altamente extendidos.
Anko Commons: Es una tool box que, al igual que KANdroid, facilita la
interacción con elementos del framework de Android (como Intent, Dialog o el
log de la aplicación.
Anko Layouts: Permite el diseño de interfaces gráficas de usuario de manera
programática, es decir, desde el código fuente, eliminando así la necesidad de
los archivos XML.
verticalLayout {
val name = editText ( )
button (“Say Hello”) {
onClick { toast (“Hellos, ${name.text}!”) }
}
}
Anko SQLite: Reduce drásticamente el número de elementos necesarios para
comunicarse con el repositorio y proporciona una sintaxis muy parecida a SQL.
fun getUsers (db: ManagedSQLiteOpenHelper): List = db.use {
db.select (“Users”)
.whereSimple (“family_name = ?”, “John”)
.doExec ( )
.parseList (UserParser)
}
Anko Coroutines: Las corrutinas mejoran la legibilidad del código asíncrono de
las apps. Básicamente, prescinden de los callbacks usados para notificar que una
determinada operación ha terminado de ejecutarse. En su lugar, permiten escribir
las diferentes acciones de manera secuencial. De esta manera, el orden en el que
se declaran las instrucciones determina el orden en que se ejecutarán las
operaciones.
fun getData ( ): Data {…}
fun showData (data: Data) {…}
async (UI) {
val data: Deferred = bg {
// Runs in background
getData ( )
}
// This code is executed on the UI thread
showData (data.await ( ) )
}
KAndroid. Es una librería diseñada para explorar una de las características más
importantes de Kotlin: las extensiones, que permiten añadir comportamiento a las
propiedades y métodos de cualquier clase.
/* instead of:
editText.addTextChangedListener (object : TextWatcher {
override fun beforeTextChange (s: CharSequence?, start: Int, count: Int, after: Int) {
before ( )
}
override fun onTextChanged (s: CharSequence?, start: Int, before: Int, count: Int) {
onChange ( )
}
override fun afterTextChanged (s: Editable?) {
after ( )
}
} ) */
editText.textWatcher {
beforeTextChanged { text, start, count, after - > before ( ) }
onTextChanged { text, start, before, count - > onChange ( ) }
afterTextChanged { text - > after ( ) }
}
Como se puede ver, además de ahorrar algunas valiosas líneas de código, el programa
resultante es mucho más legible, puesto que se omite toda la verbosidad típica de otros
lenguajes como, por ejemplo, Java.
Otra característica compartida entre estos lenguajes es que todos son multiplataforma, es
decir, se tiene la posibilidad de usarlos en diversos sistemas operativos, también
presentan un recolector de basura para el manejo de la memoria lo que facilita la
destrucción de los objetos que no se usan en memoria.
Caso de uso:
Entradas:
Salidas: