Ruby e Python sono due ottimi linguaggi di programmazione dal punto di vista dell'interpretazione e della tipizzazione dinamica. Potete leggere le loro applicazioni, la loro popolarità e la loro comunità in una delle voci di questo blog. Questi linguaggi hanno molte cose in comune, ma anche molte differenze. In questo articolo ne presenterò alcune.
Somiglianze
Poiché questi linguaggi possono essere inclusi nella stessa categoria di linguaggi interpretati tipizzati dinamicamente, non c'è dubbio che siano simili.
Digitazione dinamica
Entrambi Python e Ruby sono linguaggi tipizzati dinamicamente. Di conseguenza, il programmatore non deve specificare il tipo di variabili durante la stesura del programma. codice. Il loro tipo viene determinato durante l'esecuzione del programma e può cambiare. Il tipo di una variabile deriva dal valore in essa memorizzato. Il codice seguente verrà eseguito correttamente in questi linguaggi:
variabile = 1
variabile += 2,5
variabile = 'stringa campione'
variabile = [2, 3.5, 'stringa campione']
Sintassi pura
Questo è legato al punto precedente, tra l'altro. Grazie al fatto che non è necessario dichiarare i tipi, terminare le istruzioni con un punto e virgola e al fatto che si tratta di linguaggi di scripting, sia la scrittura che la lettura sono facili. Un codice ben scritto sarà leggibile anche da chi non ha mai avuto contatti con questi linguaggi.
Dispongono di interpreti interattivi per console
Quando si vuole eseguire una semplice operazione o testare un pezzo di codice, non è necessario creare un file ed eseguire il codice con un comando speciale. Sia Ruby che Python dispongono di interpreti interattivi per console (REPL). Per Python, possiamo eseguire tale interprete con il comando pitone
(opitone3
), mentre per Ruby potrebbe essere, ad esempio, irb:
$ irb
2.5.8 :001 > risultato = 2 + 1
=> 3
2.5.8 :002 > risultato += 3.5
=> 6.5
Differenze
Poiché si tratta di diversi linguaggi di programmazioneNaturalmente devono avere delle differenze (lo so, che affermazione rivelatrice). Nel caso dell'Python e del Ruby, queste differenze sono numerose. Ne descriverò alcune tra le più significative a mio parere.
Rientri
L'indentazione è molto importante nell'Python. Tutti i blocchi di codice sono definiti dall'indentazione. È importante che ogni riga di un determinato blocco abbia la stessa indentazione. Altrimenti, quando si cerca di eseguire il codice, si ottiene un IndentationError. Ruby adotta un approccio diverso. Qui il blocco di codice è limitato da parole chiave. Distinguiamo l'inizio della parola (ad es.begin, if, class, def
) e la parola finale fine.
Non importa come il codice sia indentato all'interno del blocco di codice.
Eredità
Una delle caratteristiche fondamentali della programmazione orientata agli oggetti. Nelle mani giuste, può fare miracoli. Python supporta l'ereditarietà multi-base:
esempio.py
classe ClassA:
def callA(self):
print('callA')
classe ClasseB:
def callB(self):
print('callB')
classe ClassAB(ClasseA, ClasseB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
Di conseguenza, si ottiene:
$ python3 example.py
chiamareA
chiamareB
Ruby supporta solo l'ereditarietà a base singola utilizzando l'operatore < per impostazione predefinita. Tuttavia, è possibile simulare l'ereditarietà multi-base utilizzando i moduli:
esempio.rb
classe ClassA
def calla
mette 'calla'
fine
fine
modulo ModuloB
def callb
mette 'callb'
fine
fine
classe ClassAB < ClassA
includere ModuloB
fine
classinst = ClassAB.new
classinst.calla
classinst.call_b
Cosa ci dà:
$ ruby example.rb
chiamare_a
chiamare_b
includere
è solo uno dei mixin disponibili in Ruby. I mixin sono un modo per aggiungere funzionalità aggiuntive alle classi. In Ruby esistono tre mixin.
Includere
Quando chiamiamo includere
nella definizione della classe, il modulo incluso diventa l'antenato diretto di questa classe. Ciò significa che ogni metodo del modulo diventa un metodo di istanza di questa classe. Possiamo sovrascriverli nella classe e anche chiamare il metodo originale (definito nel modulo) usando super
parola chiave.
esempio.rb
modulo ModuloA
def print_something
mette 'Messaggio dal modulo'
fine
fine
classe ClassB
include ModuloA
def print_something
mette 'Messaggio dalla classe'
super
fine
fine
ClassB.new.print_something
Risultato:
$ ruby example.rb
Messaggio dalla classe
Messaggio dal modulo
Prepagare
Funziona quasi come includere
ma il modulo anteposto diventa discendente diretto della classe. Ciò significa che non possiamo sovrascrivere i metodi dei moduli nella classe, ma il metodo del modulo può chiamare il metodo della classe usandosuper
parola chiave.
esempio.rb
modulo ModuloA
def print_something
mette 'Messaggio dal modulo'
super
fine
fine
classe ClasseB
prepende il moduloA
def print_something
mette 'Messaggio dalla classe'
fine
fine
ClasseB.new.print_something
Risultato:
$ ruby example.rb
Messaggio dal modulo
Messaggio dalla classe
Estendere
Funziona in modo simile a include, ma i metodi definiti nel modulo diventano metodi della classe.
Risultato:
$ ruby esempio.rb Messaggio dal modulo
Funzioni e blocchi
Python ha funzioni. Ruby supporta solo i metodi. Che cosa comporta? Tra le altre cose, l'Python può contenere una funzione in una variabile e passarla come argomento a un'altra funzione. In Ruby non è così semplice. Anche questo è legato alle parentesi. Data una funzione senza argomenti in Python, o con argomenti predefiniti, se si usa il suo nome senza parentesi, la funzione verrà restituita. Solo l'aggiunta delle parentesi porta alla sua esecuzione. In Ruby, possiamo chiamare le funzioni senza parentesi:
esempio.py
def inner_function():
print('Funzione interna')
def wrapper_function(funzione):
print('Funzione wrapper')
# function è una variabile che contiene l'oggetto function
function() # la funzione interna viene chiamata qui
wrapperfunction(innerfunction)
Risultato:
$ python3 example.py
Funzione wrapper
Funzione interna
In Ruby:
esempio.rb
def inner_function
mette 'Funzione interna'
end
def wrapper_function(funzione)
mette 'Funzione wrapper'
funzione
fine
wrapperfunction(innerfunction) # inner_function viene chiamato qui
Risultato:
$ ruby example.rb
Funzione interna
Funzione wrapper
Naturalmente, in questo caso, si possono adottare alcuni trucchi in Ruby per ottenere l'effetto desiderato. Innanzitutto, possiamo usare l'oggetto Proc:
esempio.rb
def inner_function
mette 'Funzione interna'
end
def wrapper_function(funzione)
mette 'Funzione wrapper'
funzione.chiamata
fine
func = Proc.new { innerfunction }
wrapperfunction(func)
Risultato:
$ ruby example.rb
Funzione wrapper
Funzione interna
Il secondo approccio consiste nell'utilizzare i blocchi:
esempio.rb
def inner_function
mette 'Funzione interna'
fine
def wrapper_function
mette 'Funzione wrapper'
rendimento
fine
wrapperfunction do
funzione interna
fine
Risultato:
$ ruby example.rb
Funzione wrapper
Funzione interna
Comprensione dell'elenco
Si tratta di una funzione Python molto utile. Consiste nel creare un elenco basato su un altro elenco. Supponiamo di avere un compito di questo tipo: dato un elenco di numeri, creare un elenco di quadrati di numeri dispari. In Python utilizziamo la comprensione delle liste:
numeri = [1, 3, 4, 7, 8, 12, 15]
risultato = [num*num per num in numeri if num % 2]
Il vantaggio è che abbiamo solo due elenchi in memoria.
In Ruby le cose sono un po' diverse. Esistono diversi modi per risolvere questo compito. Presenterò il più leggibile di essi:
numeri = [1, 3, 4, 7, 8, 12, 15]
risultato = []
numeri.each { |num| risultato << num * num if num.odd? }
Come possiamo vedere, si può fare, ma non è così elegante come nell'Python.
Tutte le classi sono mutabili
In Ruby, tutte le classi sono mutabili. Che cosa significa? Possiamo aggiungere o sovrascrivere i metodi di tutte le classi, anche di quelle integrate. Supponiamo di volere un metodo che cambi ogni lettera an in b nella stringa. Possiamo farlo in modo semplice:
esempio.rb
classe Stringa
def atob!
self.gsub!(/a/, 'b')
fine
fine
stringa = 'Esempio di stringa con molte lettere a'
mette stringa
stringa.atob!
mette stringa
Risultato:
$ ruby example.rb
Esempio di stringa con molte lettere a
Stringa di esempio con molte lettere b
Sintesi
Sviluppo web è stato un campo dinamico che adotta e modella continuamente vari tipi di linguaggi di programmazione per soddisfare le proprie esigenze. Due scelte popolari in quest'area includono il Linguaggio di programmazione Python e Ruby. Entrambi hanno dimostrato il loro valore in costruire applicazioni web e altre forme di software, ognuna delle quali presenta vantaggi e svantaggi specifici.
Python è un linguaggio di programmazione di alto livello venerato per la sua semplicità e leggibilità del codiceuna caratteristica che spesso piace ai programmatori principianti. Il Linguaggio di programmazione Python è versatile e può essere utilizzato per una varietà di compiti. Questo linguaggio di programmazione generico è spesso utilizzato in settori come l'apprendimento automatico, i big data e, in particolare, sviluppo web. Un'ampia comunità di sviluppatori Python contribuisce al suo ricco ecosistema di librerie e framework, migliorando la sua idoneità per costruire applicazioni web. Django, Flask e Pyramid sono tra le varie soluzioni Python strutture web sfruttato da sviluppatori web in tutto il mondo.
D'altra parte, Ruby, un altro linguaggio di programmazione di alto livello e di uso generale, brilla per la sua flessibilità ed espressività. Questo linguaggio di programmazione orientato agli oggetti è la spina dorsale di molti applicazioni web. Il fascino di Ruby risiede nella sua capacità di facilitare sviluppo web attraverso il Struttura Rails, un potente strumento per costruire applicazioni web rapidamente.
Ruby, anche se meno popolare di Pythonvanta un team attivo e dedicato Comunità Ruby che sviluppa e mantiene continuamente un assortimento di biblioteche e strumenti, arricchendo così l'esperienza di sviluppatori web utilizzando questo linguaggio. In quanto linguaggio orientato agli oggettiRuby è apprezzato per la sua eleganza e per il codice pulito e leggibile che produce, il che lo rende una scelta appropriata sia per le piccole che per le grandi imprese. applicazioni web.
Python e Ruby, come linguaggi di programmazione orientati agli oggetticondividono molte analogie. Inoltre, supportano programmazione funzionale, che offre ai programmatori diversi stili di codice. Codice Pythonin particolare, è apprezzato per la sua sintassi semplice, che sottolinea l'enfasi posta dal linguaggio sulla semplicità e sulla leggibilità.
Ogni lingua ha i suoi punti di forza; Python versatilità e ampiezza comunità lo rendono uno strumento eccellente per vari compiti, mentre l'espressività di Ruby e il supporto di Struttura Rails lo rende un forte concorrente per applicazione web sviluppo. Sono le esigenze e le preferenze uniche di sviluppatori web che determinerà quale lingua meglio servire i loro progetto.
Nel regno di sistemi operativiEntrambi i linguaggi presentano un livello di portabilità impressionante, che ne aumenta ulteriormente l'idoneità per una moltitudine di attività, tra cui sviluppo web. Pertanto, è difficile dichiarare un "vincitore" definitivo in questo duello.
Mentre il Linguaggio di programmazione Python ha una portata più ampia e una maggiore comunitàLe capacità di Ruby non devono essere sottovalutate. Per apprezzare appieno questi linguaggi, è necessario approfondirli, comprenderne le complessità e applicarli dove sono più brillanti. Sia che si tratti di creazione di applicazioni web con Python o Ruby, ciascuno lingua offre una solida piattaforma per la fornitura di prodotti di alta qualità applicazioni web. Ruby, anche se meno conosciuto, merita sicuramente il giusto apprezzamento nel mondo del linguaggi di programmazione.