Ruby y Python son dos grandes lenguajes de programación en cuanto a interpretación y tipado dinámico. Puedes leer sobre sus aplicaciones, popularidad y comunidad en una de las entradas de este blog. Estos lenguajes tienen muchas cosas en común, pero también muchas diferencias. En este artículo, presentaré algunas de ellas.
Similitudes
Dado que estos lenguajes pueden incluirse en la misma categoría de lenguajes interpretados de tipado dinámico, no cabe duda de que son similares.
Tipificación dinámica
Ambos Python y Ruby son lenguajes de tipado dinámico. Como resultado, el programador no tiene que especificar el tipo de las variables mientras escribe el archivo código. Su tipo se determina mientras se ejecuta el programa y puede cambiar. El tipo de una variable se deriva del valor almacenado en ella. El siguiente código se ejecutará correctamente en estos lenguajes:
variable = 1
variable += 2.5
variable = 'cadena de muestra'
variable = [2, 3.5, 'cadena de muestra']
Sintaxis pura
Esto está relacionado, entre otras cosas, con el punto anterior. Debido al hecho de que no hay necesidad de declarar tipos, terminar las sentencias con punto y coma, y también al hecho de que son lenguajes de scripting, tanto escribirlo como leerlo es fácil. Un código bien escrito será legible incluso por personas que no hayan tenido ningún contacto previo con estos lenguajes.
Disponen de intérpretes de consola interactivos
Cuando quieras realizar una operación sencilla o probar un fragmento de código, no necesitas crear un archivo y ejecutar el código mediante un comando especial. Tanto Ruby como Python disponen de intérpretes interactivos de consola (REPL). En el caso de Python, podemos ejecutar dicho intérprete con el comando python
(opitón3
), mientras que para Ruby podría ser, por ejemplo, irb:
$ irb
2.5.8 :001 > resultado = 2 + 1
=> 3
2.5.8 :002 > resultado += 3.5
=> 6.5
Diferencias
Como son diferentes lenguajes de programaciónPor supuesto, deben tener diferencias (lo sé, qué afirmación tan reveladora). En el caso de Python y Ruby, estas diferencias son numerosas. Describiré algunas de las más significativas en mi opinión.
Guiones
La sangría es muy importante en Python. Todos los bloques de código están definidos por la sangría. Es importante que todas las líneas de un bloque tengan la misma sangría. De lo contrario, cuando intentemos ejecutar el código, obtendremos IndentationError. Ruby adopta un enfoque diferente. Aquí, el bloque de código está limitado por palabras clave. Distinguimos la palabra inicial (por ejemplobegin, if, class, def
) y la palabra final fin.
No importa cómo esté sangrado el código dentro del bloque de código.
Herencia
Una de las características básicas de la programación orientada a objetos. En las manos adecuadas, puede hacer maravillas. Python admite la herencia multibase:
ejemplo.py
clase ClaseA:
def llamadaA(self):
print('callA')
clase ClassB:
def callB(self):
print('callB')
clase ClassAB(ClassA, ClassB):
pass
class_inst = ClaseAB()
class_inst.callA()
class_inst.callB()
Como resultado, obtenemos:
$ python3 ejemplo.py
callA
callB
Ruby sólo admite por defecto la herencia monobase utilizando el operador <. Sin embargo, es posible simular la herencia multibase utilizando módulos:
ejemplo.rb
clase ClaseA
def calla
puts 'calla
end
end
módulo ModuleB
def callb
puts 'callb'
end
end
clase ClassAB < ClaseA
include MóduloB
end
classinst = ClaseAB.nuevo
classinst.calla
classinst.call_b
Lo que nos da:
$ ruby ejemplo.rb
call_a
call_b
incluir
es sólo uno de los mixins disponibles en Ruby. Los mixins son una forma de añadir funcionalidad extra a las clases. Hay tres mixins en Ruby.
Incluya
Cuando llamamos incluir
en la definición de la clase, el módulo incluido se convierte en el ancestro directo de esta clase. Esto significa que cada método del módulo se convierte en un método de instancia de esta clase. Podemos anularlos en la clase y también llamar al método original (definido en el módulo) usando super
palabra clave.
ejemplo.rb
módulo ModuleA
def imprimir_algo
puts 'Mensaje del módulo'
end
end
clase ClassB
include MóduloA
def imprimir_algo
puts 'Mensaje de la clase'
super
end
end
ClaseB.nueva.imprimir_algo
Resultado:
$ ruby ejemplo.rb
Mensaje de la clase
Mensaje del módulo
Añadir
Funciona casi como incluir
pero el módulo agregado se convierte en descendiente directo de la clase. Esto significa que no podemos anular el método del módulo en la clase, pero el método del módulo puede llamar al método de la clase usandosuper
palabra clave.
ejemplo.rb
módulo ModuleA
def imprimir_algo
puts 'Mensaje del módulo'
super
end
end
clase ClassB
prepend MóduloA
def imprimir_algo
puts 'Mensaje de la clase'
end
end
ClaseB.nueva.imprimir_algo
Resultado:
$ ruby ejemplo.rb
Mensaje del módulo
Mensaje de la clase
Ampliar
Funciona de forma similar a include, salvo que los métodos definidos en el módulo se convierten en métodos de la clase.
Resultado:
$ ruby ejemplo.rb Mensaje del módulo
Funciones y bloques
Python tiene funciones. Ruby sólo admite métodos. ¿Qué implica esto? Entre otras cosas, Python puede guardar una función en una variable y pasarla como argumento a otra función. En Ruby, no podemos hacerlo tan fácilmente. Esto también está relacionado por los paréntesis. Dada una función sin argumentos en Python, o con argumentos por defecto, si utilizas su nombre sin paréntesis, se devolverá la función. Sólo añadiendo los paréntesis se ejecuta. En Ruby, podemos llamar a funciones sin paréntesis:
ejemplo.py
def función_interna():
print('Función interna')
def función_envolvente(función):
print('Función envolvente')
# función es una variable que contiene el objeto función
function() # la función interna se llama aquí
wrapperfunction(funcióninterna)
Resultado:
$ python3 ejemplo.py
Función envolvente
Función interna
En Ruby:
ejemplo.rb
def función_interna
puts 'Función interna
end
def función_envolvente(función)
puts 'Función envolvente'
función
end
wrapperfunction(innerfunction) # aquí se llama a inner_function
Resultado:
$ ruby ejemplo.rb
Función interna
Función envolvente
Por supuesto, en este caso, puedes hacer algunos trucos en Ruby para conseguir el efecto deseado. En primer lugar, podemos utilizar el objeto Proc:
ejemplo.rb
def función_interna
puts 'Función interna
end
def función_envolvente(función)
puts 'Función envolvente'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Resultado:
$ ruby ejemplo.rb
Función envolvente
Función interna
El segundo enfoque consiste en utilizar bloques:
ejemplo.rb
def función_interna
puts 'Función interna
end
def función_envolvente
puts 'Función envolvente'
yield
end
wrapperfunction do
innerfunction
end
Resultado:
$ ruby ejemplo.rb
Función envolvente
Función interna
Comprensión de la lista
Se trata de una función Python muy útil. Consiste en crear una lista a partir de otra lista. Supongamos que tenemos una tarea de este tipo: dada una lista de números, hacer una lista de cuadrados de números impares. En Python, utilizamos la comprensión de listas:
números = [1, 3, 4, 7, 8, 12, 15]
resultado = [num*num para num en números si num % 2]
La ventaja es que sólo tenemos dos listas en memoria.
En Ruby, las cosas son un poco diferentes. Hay varias formas de resolver esta tarea. Voy a presentar el más legible de ellos:
números = [1, 3, 4, 7, 8, 12, 15]
resultado = []
numbers.each { |num| result << num * num if num.odd? }
Como vemos, se puede hacer, pero no tan elegante como en Python.
Todas las clases son mutables
En Ruby, todas las clases son mutables. ¿Qué significa esto? Podemos añadir o anular métodos de todas las clases, incluso de las incorporadas. Supongamos que queremos un método que cambie cada letra an por b en la cadena. Podemos hacerlo de una manera sencilla:
ejemplo.rb
clase String
¡def atob!
self.gsub!(/a/, 'b')
end
end
string = 'Ejemplo de cadena con muchas letras a'
puts cadena
¡cadena.atob!
puts cadena
Resultado:
$ ruby ejemplo.rb
Ejemplo de cadena con muchas letras a
Ejemplo cadena con mbny letras b
Resumen
Desarrollo web ha sido un campo dinámico que adopta y da forma continuamente a diversas lenguajes de programación que se adapte a sus necesidades. Dos opciones populares en este ámbito son el Lenguaje de programación Python y Ruby. Ambos han demostrado su valía en creación de aplicaciones web y otras formas de software, cada una con sus ventajas e inconvenientes.
Python es un lenguaje de programación de alto nivel venerado por su sencillez y legibilidad del códigouna función que suele atraer a los programadores principiantes. El sitio Lenguaje de programación Python es versátil y puede utilizarse para diversas tareas. Este lenguaje de programación de uso general se utiliza a menudo en ámbitos como el aprendizaje automático, los macrodatos y, sobre todo, desarrollo web. Una amplia comunidad de desarrolladores Python contribuye a su rico ecosistema de bibliotecas y marcos, mejorando su idoneidad para creación de aplicaciones web. Django, Flask y Pyramid se encuentran entre las diversas Python marcos web aprovechado por desarrolladores web en todo el mundo.
Por otra parte, Ruby, otra lenguaje de programación de alto nivel y propósito generalbrilla por su flexibilidad y expresividad. Este lenguaje de programación orientado a objetos es la columna vertebral de muchos aplicaciones web. El encanto de Ruby reside en su capacidad para facilitar desarrollo web a través de la Marco Railsuna potente herramienta para creación de aplicaciones web rápidamente.
Ruby, aunque menos popular que Pythoncuenta con un equipo activo y dedicado Comunidad Rubí que desarrolla y mantiene continuamente un surtido de bibliotecas y herramientas, enriqueciendo así la experiencia de desarrolladores web utilizando este lenguaje. Como lenguaje orientado a objetosRuby es apreciado por su elegancia y por el código limpio y legible que produce, lo que lo convierte en una opción adecuada tanto para pequeñas como para grandes empresas. aplicaciones web.
Python y Ruby, como lenguajes de programación orientados a objetoscomparten muchas similitudes. También apoyan programación funcionalofreciendo a los programadores varios estilos para codificar. Código Pythones especialmente apreciado por su sintaxis sencilla, que subraya el énfasis del lenguaje en la simplicidad y la facilidad de uso. legibilidad.
Cada lengua tiene sus puntos fuertes; Python's versatilidad y amplitud comunidad lo convierten en una herramienta excelente para diversas tareas, mientras que la expresividad de Ruby y la Marco Rails lo convierte en un firme aspirante a aplicación web desarrollo. Son las necesidades y preferencias únicas de desarrolladores web que determinará qué idioma que mejor sirva a sus proyecto.
En el ámbito de sistemas operativosambos lenguajes presentan un impresionante nivel de portabilidad, lo que aumenta aún más su idoneidad para multitud de tareas, entre ellas desarrollo web. Por lo tanto, es difícil declarar un "ganador" definitivo en este duelo.
Mientras que el Lenguaje de programación Python tiene un alcance más amplio y comunidadNo hay que subestimar las capacidades de Ruby. Para apreciar plenamente estos lenguajes, hay que profundizar en ellos, comprender sus entresijos y aplicarlos donde más brillan. Tanto si creación de aplicaciones web con Python o Ruby, cada uno idioma ofrece una plataforma sólida para ofrecer aplicaciones web. Ruby, aunque menos conocido, merece sin duda el aprecio que merece en el mundo del lenguajes de programación.