Ruby og Python er to fantastiske programmeringssprog, hvad angår fortolkning og dynamisk typning. Du kan læse om deres anvendelsesmuligheder, popularitet og fællesskab i et af indlæggene på denne blog. Disse sprog har mange ting til fælles, men også mange forskelle. I denne artikel vil jeg introducere nogle af dem.
Ligheder
Da disse sprog kan inkluderes i den samme kategori af dynamisk typede fortolkede sprog, er der ingen tvivl om, at de ligner hinanden.
Dynamisk typografering
Begge dele Python og Ruby er dynamisk typede sprog. Derfor behøver programmøren ikke at angive typen af variabler, når han skriver en Kode. Deres type bestemmes, mens programmet kører, og den kan ændre sig. Typen af en variabel er afledt af den værdi, der er gemt i den. Følgende kode vil køre korrekt i disse sprog:
variabel = 1
variabel += 2,5
variabel = 'prøvestreng'
variabel = [2, 3,5, 'prøvestreng']
Ren syntaks
Det hænger blandt andet sammen med punktet ovenfor. Da der ikke er behov for at deklarere typer og afslutte udsagn med semikolon, og da det er scriptingsprog, er det nemt både at skrive og læse. Velskrevet kode vil kunne læses selv af folk, der ikke tidligere har været i kontakt med disse sprog.
De har interaktive konsolfortolkere
Når du vil udføre en simpel handling eller teste et stykke kode, behøver du ikke at oprette en fil og køre koden ved hjælp af en særlig kommando. Både Ruby og Python har interaktive konsolfortolkere (REPL). For Python kan vi køre en sådan fortolker med kommandoen python
(ellerpython3
), mens det for Ruby f.eks. kunne være irb:
$ irb
2.5.8 :001 > resultat = 2 + 1
=> 3
2.5.8 :002 > resultat += 3,5
=> 6.5
Forskelle
Da disse er forskellige programmeringssprogSelvfølgelig må de have forskelle (jeg ved det, sikke en afslørende udtalelse). I tilfældet med Python og Ruby er disse forskelle mange. Jeg vil beskrive nogle af de mest betydningsfulde efter min mening.
Indrykninger
Indrykning er meget vigtig i Python. Alle kodeblokke er defineret ved indrykning. Det er vigtigt, at hver linje i en given blok har samme indrykning. Ellers får vi IndentationError, når vi prøver at køre koden. Ruby har en anden tilgang. Her er kodeblokken begrænset af nøgleord. Vi skelner mellem det første ord (f.eks.begin, if, class, def
) og det afsluttende ord slut.
Det er ligegyldigt, hvordan koden er indrykket i kodeblokken.
Nedarvning
En af de grundlæggende funktioner i objektorienteret programmering. I de rette hænder kan det gøre underværker. Python understøtter multi-base nedarvning:
eksempel.py
klasse ClassA:
def callA(self):
print('callA')
klasse ClassB:
def callB(self):
print('callB')
klasse ClassAB(ClassA, ClassB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
Som et resultat får vi:
$ python3 example.py
kaldA
kaldB
Ruby understøtter som standard kun single-base-arv ved hjælp af <-operatoren. Det er dog muligt at simulere multi-base-arv ved hjælp af moduler:
eksempel.rb
klasse ClassA
def calla
sætter 'calla'
slut
slut
modul ModulB
def callb
sætter 'callb'
end
slut
klasse ClassAB < ClassA
inkluderer ModulB
end
classinst = ClassAB.new
classinst.calla
classinst.call_b
Hvad giver os:
$ ruby eksempel.rb
kald_a
call_b
inkludere
er blot et af de mixins, der findes i Ruby. Mixins er en måde at tilføje ekstra funktionalitet til klasser. Der er tre mixins i Ruby.
Inkludere
Når vi ringer inkludere
i klassedefinitionen, bliver det inkluderede modul en direkte forfader til denne klasse. Det betyder, at hver metode i modulet bliver en instansmetode i denne klasse. Vi kan tilsidesætte dem i klassen og også kalde den oprindelige metode (defineret i modulet) ved hjælp af super
Nøgleord.
eksempel.rb
modul ModulA
def print_noget
puts 'Besked fra modul'
slut
slut
klasse ClassB
inkluderer ModulA
def print_noget
puts 'Besked fra klassen'
super
slut
slut
ClassB.new.print_something
Resultat:
$ ruby eksempel.rb
Besked fra klassen
Besked fra modul
Prepend
Det fungerer næsten som inkludere
men det foranstillede modul bliver direkte efterkommer af klassen. Det betyder, at vi ikke kan tilsidesætte modulets metode i klassen, men metoden i modulet kan kalde klassens metode ved hjælp afsuper
Nøgleord.
eksempel.rb
modul ModulA
def print_noget
puts 'Besked fra modul'
super
slut
slut
klasse ClassB
tilføj ModulA
def print_noget
puts 'Besked fra klassen'
slut
slut
ClassB.new.print_something
Resultat:
$ ruby eksempel.rb
Besked fra modul
Besked fra klasse
Forlæng
Det fungerer på samme måde som include, bortset fra at de metoder, der er defineret i modulet, bliver klassemetoder i klassen.
Resultat:
$ ruby eksempel.rb Besked fra modulet
Funktioner og blokke
Python har funktioner. Ruby understøtter kun metoder. Hvad indebærer det? Blandt andet kan Python holde en funktion i en variabel og sende den som argument til en anden funktion. I Ruby kan vi ikke gøre det så let. Dette hænger også sammen med parenteserne. Hvis du bruger en funktion uden argumenter i Python eller med standardargumenter, vil funktionen blive returneret, hvis du bruger dens navn uden parenteser. Kun tilføjelse af parenteser fører til dens udførelse. I Ruby kan vi kalde funktioner uden parenteser:
eksempel.py
def inner_function():
print('Indre funktion')
def wrapper_function(function):
print('Wrapper-funktion')
#-funktion er en variabel, der indeholder funktionsobjektet
function() # indre funktion kaldes her
wrapperfunction(indrefunktion)
Resultat:
$ python3 example.py
Indpakningsfunktion
Indre funktion
I Ruby:
eksempel.rb
def indre_funktion
puts 'Indre funktion'
slut
def wrapper_function(funktion)
puts 'Indpakningsfunktion'
funktion
slut
wrapperfunction(innerfunction) # inner_function kaldes her
Resultat:
$ ruby eksempel.rb
Indre funktion
Indpakningsfunktion
I dette tilfælde kan man selvfølgelig lave nogle tricks i Ruby for at opnå den ønskede effekt. For det første kan vi bruge Proc-objektet:
eksempel.rb
def indre_funktion
puts 'Indre funktion'
slut
def wrapper_function(funktion)
sætter 'Indpakningsfunktion'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Resultat:
$ ruby eksempel.rb
Wrapper-funktion
Indre funktion
Den anden tilgang er at bruge blokke:
eksempel.rb
def indre_funktion
puts 'Indre funktion'
slut
def wrapper_function
puts 'Indpakningsfunktion'
udbytte
slut
wrapperfunction do
innerfunction
end
Resultat:
$ ruby eksempel.rb
Wrapper-funktion
Indre funktion
Forståelse af listen
Dette er en meget nyttig Python-funktion. Den består i at skabe en liste baseret på en anden liste. Lad os antage, at vi har en sådan opgave: Ud fra en liste med tal skal du lave en liste med kvadrater af ulige tal. I Python bruger vi listeforståelse:
tal = [1, 3, 4, 7, 8, 12, 15].
resultat = [num*num for num i numbers if num % 2]
Fordelen er, at vi kun har to lister i hukommelsen.
I Ruby er tingene lidt anderledes. Der er flere måder at løse denne opgave på. Jeg vil præsentere den mest læsevenlige af dem:
tal = [1, 3, 4, 7, 8, 12, 15].
resultat = []
numbers.each { |num| result << num * num if num.odd? }
Som vi kan se, kan det lade sig gøre, men ikke helt så elegant som i Python.
Alle klasser er foranderlige
I Ruby er alle klasser foranderlige. Hvad betyder det? Vi kan tilføje eller overskrive metoder i alle klasser, selv de indbyggede. Forestil dig, at vi vil have en metode, der ændrer hvert bogstav an til b i strengen. Det kan vi gøre på en enkel måde:
eksempel.rb
klasse String
def atob!
self.gsub!(/a/, 'b')
end
end
string = 'Eksempel på streng med mange a-bogstaver'
sætter streng
streng.atob!
sætter streng
Resultat:
$ ruby eksempel.rb
Eksempel på streng med mange a-bogstaver
Eksempel på streng med mange b-bogstaver
Sammenfatning
Webudvikling har været et dynamisk felt, der løbende har vedtaget og formet forskellige programmeringssprog der passer til dens behov. To populære valg på dette område omfatter Python programmeringssprog og Ruby. Begge har bevist deres værd i opbygning af webapplikationer og andre former for software, der hver især har sine unikke fordele og ulemper.
Python er en programmeringssprog på højt niveau æret for sin enkelhed og læsbarhed af kodeen funktion, der ofte appellerer til nybegyndere. Den Python programmeringssprog er alsidig og kan bruges til mange forskellige opgaver. Denne Programmeringssprog til generelle formål bruges ofte inden for områder som maskinlæring, big data og meget andet, webudvikling. En bred fællesskab af Python-udviklere bidrager til dets rige økosystem af biblioteker og frameworks, hvilket gør det bedre egnet til opbygning af webapplikationer. Django, Flask og Pyramid er blandt de forskellige Python web-frameworks udnyttet af webudviklere rundt omkring på kloden.
På den anden side er Ruby, en anden programmeringssprog til generelle formål på højt niveauDen brillerer med sin fleksibilitet og udtryksfuldhed. Denne objektorienteret programmeringssprog er rygraden i mange webapplikationer. Rubys charme ligger i dens evne til at lette webudvikling gennem Rails-rammeværket kraftfuldt værktøj til opbygning af webapplikationer hurtigt.
Ruby er dog mindre populær end Pythonhar en aktiv og dedikeret Ruby-fællesskabet der løbende udvikler og vedligeholder et udvalg af biblioteker og værktøjer og derved beriger oplevelsen af webudviklere ved hjælp af dette sprog. Som en objektorienteret sprogRuby er værdsat for sin elegance og den rene, læsbare kode, den producerer, hvilket gør den til et passende valg til både små og store projekter. webapplikationer.
Python og Ruby, som objektorienterede programmeringssproghar mange ligheder. De støtter også funktionel programmeringog tilbyder programmører forskellige stilarter at kode i. Python-kodeer især værdsat for sin ligefremme syntaks, som understreger sprogets vægt på enkelhed og læsbarhed.
Hvert sprog har sine styrker; Python's alsidighed og bredde samfund understøttelse gør det til et fremragende værktøj til forskellige opgaver, mens Rubys udtryksfuldhed og Rails-rammeværk gør den til en stærk kandidat til web-app udvikling. Det er de unikke behov og præferencer hos webudviklere der vil afgøre, hvilken sprog tjener bedst deres projekt.
I verden af OperativsystemerBegge sprog udviser en imponerende grad af bærbarhed, hvilket yderligere forbedrer deres egnethed til en lang række opgaver, ikke begrænset til webudvikling. Derfor er det en udfordring at udråbe en endelig "vinder" i denne duel.
Mens Python programmeringssprog har en bredere rækkevidde og er større samfundskal Rubys evner ikke undervurderes. For at værdsætte disse sprog fuldt ud skal man fordybe sig i dem, forstå deres finurligheder og anvende dem, hvor de skinner mest. Uanset om du er skabe webapplikationer med Python eller Ruby, hver sprog tilbyder en robust platform til at levere høj kvalitet web-apps. Selv om Ruby er mindre kendt, fortjener den bestemt at blive værdsat i verden. programmeringssprog.