Ruby och Python är två fantastiska programmeringsspråk tolknings- och dynamiskt typningsmässigt. Du kan läsa om deras tillämpningar, popularitet och gemenskap i ett av inläggen på den här bloggen. Dessa språk har många saker gemensamt, men också många skillnader. I den här artikeln kommer jag att presentera några av dem.
Likheter
Eftersom dessa språk kan ingå i samma kategori av dynamiskt typade tolkade språk råder det ingen tvekan om att de liknar varandra.
Dynamisk typning
Båda Python och Ruby är dynamiskt typade språk. Detta innebär att programmeraren inte behöver ange typen av variabler när han eller hon skriver kod. Deras typ bestäms medan programmet körs och den kan ändras. Typen av en variabel härleds från det värde som lagras i den. Följande kod kommer att köras korrekt i dessa språk:
variabel = 1
variabel += 2,5
variabel = "provsträng
variabel = [2, 3,5, 'provsträng']
Ren syntax
Detta hänger bland annat samman med punkten ovan. På grund av att det inte finns något behov av att deklarera typer, avsluta satser med semikolon, och även det faktum att de är skriptspråk, är det enkelt att både skriva och läsa det. Välskriven kod kommer att vara läsbar även för personer som inte har haft någon tidigare kontakt med dessa språk.
De har interaktiva konsoltolkar
När du vill utföra en enkel operation eller testa en kod behöver du inte skapa en fil och köra koden med ett speciellt kommando. Både Ruby och Python har interaktiva konsoltolkar (REPL). För Python kan vi köra en sådan tolk med kommandot python
(ellerpython3
), medan det för Ruby kan vara t.ex, irb:
$ irb
2.5.8 :001 > resultat = 2 + 1
=> 3
2.5.8 :002 > resultat += 3,5
=> 6.5
Skillnader
Eftersom dessa är olika programmeringsspråk, naturligtvis måste de ha skillnader (Jag vet, vilket avslöjande uttalande). När det gäller Python och Ruby är dessa skillnader många. Jag kommer att beskriva några av de mest betydelsefulla enligt min mening.
Indenter
Indragning är mycket viktigt i Python. Alla kodblock definieras av indrag. Det är viktigt att varje rad i ett givet block har samma indrag. Annars kommer vi att få IndentationError när vi försöker köra koden. Ruby använder ett annat tillvägagångssätt. Här begränsas kodblocket av nyckelord. Vi skiljer på det inledande ordet (t.ex.börja, om, klass, def
) och det avslutande ordet slut.
Det spelar ingen roll hur koden är indragen i kodblocket.
Ärftlighet
En av de grundläggande funktionerna i objektorienterad programmering. I rätt händer kan den göra underverk. Python stöder multi-base arv:
exempel.py
klass KlassA:
def callA(self):
print('callA')
klass KlassB:
def callB(self):
print('callB')
klass ClassAB(ClassA, ClassB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
Som ett resultat får vi:
$ python3 exempel.py
anropA
anropB
Ruby stöder endast enbasarv med hjälp av operatorn < som standard. Det är dock möjligt att simulera flerbasigt arv med hjälp av moduler:
exempel.rb
klass ClassA
def calla
sätter 'calla'
slut
slut
Modul ModulB
def callb
sätter 'callb'
slut
slut
klass ClassAB < ClassA
inkluderar ModulB
slut
classinst = ClassAB.new
classinst.calla
klassinst.anrop_b
Vad ger oss:
$ ruby exempel.rb
anrop_a
anrop_b
inkludera
är bara en av de mixins som finns i Ruby. Mixins är ett sätt att lägga till extra funktionalitet i klasser. Det finns tre mixins i Ruby.
Inkludera
När vi ringer inkludera
i klassdefinitionen blir den inkluderade modulen direkt förfader till denna klass. Det betyder att varje metod i modulen blir en instansmetod i den här klassen. Vi kan åsidosätta dem i klassen och även anropa den ursprungliga metoden (definierad i modulen) med hjälp av super
nyckelord.
exempel.rb
modul ModulA
def skriva ut_något
puts 'Meddelande från modul'
slut
slut
klass KlassB
include ModulA
def tryck_något
puts 'Meddelande från klassen'
super
slut
slut
ClassB.new.print_something
Resultat:
$ ruby exempel.rb
Meddelande från klass
Meddelande från modul
Prepend
Det fungerar nästan som inkludera
men den prependierade modulen blir en direkt ättling till klassen. Det betyder att vi inte kan åsidosätta modulens metod i klassen, men metoden i modulen kan anropa klassens metod med hjälp avsuper
nyckelord.
exempel.rb
modul ModulA
def skriva ut_något
puts 'Meddelande från modul'
super
slut
slut
klass KlassB
prepend ModulA
def skriva ut_något
puts 'Meddelande från klassen'
slut
slut
KlassB.ny.print_something
Resultat:
$ ruby exempel.rb
Meddelande från modul
Meddelande från klass
Förlängning
Det fungerar på samma sätt som include, förutom att de metoder som definieras i modulen blir klassmetoder i klassen.
Resultat:
$ ruby exempel.rb Meddelande från modul
Funktioner och block
Python har funktioner. Ruby stöder endast metoder. Vad innebär det? Bland annat kan Python hålla en funktion i en variabel och skicka den som ett argument till en annan funktion. I Ruby kan vi inte göra det så enkelt. Detta är också relaterat av parenteserna. Med tanke på en funktion utan argument i Python, eller med standardargument, om du använder dess namn utan parenteser, kommer funktionen att returneras. Att bara lägga till parenteserna leder till att den körs. I Ruby kan vi anropa funktioner utan parenteser:
exempel.py
def inner_funktion():
print('Inre funktion')
def wrapper_function(funktion):
print('Omslagsfunktion')
# function är en variabel som innehåller funktionsobjektet
function() # inre funktion anropas här
wrapperfunktion(inre funktion)
Resultat:
$ python3 exempel.py
Omslagsfunktion
Inre funktion
I Ruby:
exempel.rb
def inre_funktion
puts 'Inre funktion'
slut
def wrapper_function(funktion)
sätter 'Omslagsfunktion'
funktion
slut
wrapperfunction(innerfunction) # inner_function anropas här
Resultat:
$ ruby exempel.rb
Inre funktion
Omslagsfunktion
Naturligtvis kan du i det här fallet göra några knep i Ruby för att uppnå önskad effekt. Först kan vi använda Proc-objektet:
exempel.rb
def inre_funktion
puts 'Inre funktion'
slut
def wrapper_function(funktion)
sätter 'Omslagsfunktion'
funktion.anrop
slut
func = Proc.new { innerfunktion }
omslagsfunktion(func)
Resultat:
$ ruby exempel.rb
Omslagsfunktion
Inre funktion
Det andra tillvägagångssättet är att använda block:
exempel.rb
def inre_funktion
puts 'Inre funktion'
slut
def wrapper_funktion
sätter 'Omslagsfunktion'
avkastning
slut
omslagsfunktion do
innerfunktion
slut
Resultat:
$ ruby exempel.rb
Omslagsfunktion
Inre funktion
Förståelse av lista
Detta är en mycket användbar funktion i Python. Den går ut på att skapa en lista baserad på en annan lista. Låt oss anta att vi har en sådan uppgift: givet en lista med tal, skapa en lista med kvadrater av udda tal. I Python använder vi listförståelse:
siffror = [1, 3, 4, 7, 8, 12, 15]
resultat = [num*num för num i numbers om num % 2]
Fördelen är att vi bara har två listor i minnet.
I Ruby är saker och ting lite annorlunda. Det finns flera sätt att lösa den här uppgiften. Jag kommer att presentera den mest läsbara av dem:
tal = [1, 3, 4, 7, 8, 12, 15]
resultat = []
numbers.each { |num| result << num * num if num.odd? }
Som vi kan se går det att göra, men inte riktigt lika elegant som i Python.
Alla klasser är mutabla
I Ruby är alla klasser mutabla. Vad innebär detta? Vi kan lägga till eller åsidosätta metoder för alla klasser, även de inbyggda. Antag att vi vill ha en metod som ändrar varje bokstav an till b i strängen. Vi kan göra det på ett enkelt sätt:
exempel.rb
klass Sträng
def atob!
self.gsub!(/a/, 'b')
slut
slut
string = 'Exempelsträng med många a-bokstäver'
sätter sträng
sträng.atob!
sätter sträng
Resultat:
$ ruby exempel.rb
Exempel på sträng med många a-bokstäver
Exempel på sträng med många b-bokstäver
Sammanfattning
Webbutveckling har varit ett dynamiskt område som kontinuerligt antar och formar olika programmeringsspråk för att passa dess behov. Två populära val inom detta område är Python programmeringsspråk och Ruby. Båda har bevisat sitt värde i bygga webbapplikationer och andra former av programvara, som alla har sina unika fördelar och nackdelar.
Python är en programmeringsspråk på hög nivå vördad för sin enkelhet och kodläsbarheten funktion som ofta tilltalar nybörjarprogrammerare. Den Python programmeringsspråk är mångsidig och kan användas för en mängd olika uppgifter. Denna programmeringsspråk för allmänna ändamål används ofta inom områden som maskininlärning, big data och, inte minst, webbutveckling. En bred gemenskap av Python-utvecklare bidrar till dess rika ekosystem av bibliotek och ramverk, vilket förbättrar dess lämplighet för bygga webbapplikationer. Django, Flask och Pyramid är några av de olika Python webbramverk med hjälp av Webbutvecklare runt om i världen.
Å andra sidan är Ruby, en annan programmeringsspråk för allmänt bruk på hög nivåbriljerar med sin flexibilitet och uttrycksfullhet. Detta objektorienterat programmeringsspråk är ryggraden i många webbapplikationer. Rubys charm ligger i dess förmåga att underlätta webbutveckling genom Rails ramverkett kraftfullt verktyg för bygga webbapplikationer snabbt.
Ruby, även om det är mindre populärt än Pythonhar en aktiv och engagerad Ruby gemenskap som kontinuerligt utvecklar och underhåller ett sortiment av bibliotek och verktyg och därigenom berikar upplevelsen av Webbutvecklare med hjälp av detta språk. Som en objektorienterat språkRuby är uppskattat för sin elegans och den rena, läsbara kod det producerar, vilket gör det till ett lämpligt val för både små och stora webbapplikationer.
Python och Ruby, som objektorienterade programmeringsspråkhar många likheter. De stöder också funktionell programmeringoch erbjuder programmerare olika stilar att koda i. Python kodär särskilt uppskattat för sin enkla syntax, som understryker språkets betoning på enkelhet och användarvänlighet. läsbarhet.
Varje språk har sina styrkor; Python:s mångsidighet och bredd samhälle stöd gör det till ett utmärkt verktyg för olika uppgifter, medan Rubys uttrycksfullhet och Rails ramverk gör den till en stark utmanare för webbapp utveckling. Det är de unika behoven och preferenserna hos Webbutvecklare som kommer att avgöra vilken språk bäst tjänar deras projekt.
Inom området OperativsystemBåda språken har en imponerande portabilitet, vilket ytterligare förbättrar deras lämplighet för en mängd olika uppgifter, inte bara webbutveckling. Därför är det svårt att utse en definitiv "vinnare" i den här duellen.
Även om Python programmeringsspråk har en bredare räckvidd och är större samhällebör Rubys kapacitet inte underskattas. För att fullt ut uppskatta dessa språk måste man fördjupa sig i dem, förstå deras invecklade egenskaper och tillämpa dem där de lyser som mest. Oavsett om du är skapa webbapplikationer med Python eller Ruby, vardera språk erbjuder en robust plattform för att leverera högkvalitativa webbappar. Ruby, även om den är mindre känd, förtjänar verkligen sin uppskattning i världen av programmeringsspråk.