Ruby og Python eru tvö frábær forritunarmál hvað varðar túlkun og dýnamíska gerðartilskipun. Þú getur lesið um notkun þeirra, vinsældir og samfélag í einni af færslunum á þessu bloggi. Þessi forritunarmál eiga margt sameiginlegt, en einnig margt ólíkt. Í þessari grein mun ég kynna nokkur þeirra.
Líkingar
Þar sem þessi forritunarmál falla undir sama flokk dýnamískt týpuðra túlkunarforritunarmála, er enginn vafi á því að þau séu svipuð.
Dýnamísk gerðargreining
Bæði Python og Rúbín eru dýnamískt týpuð forritunarmál. Af þeim sökum þarf forritarinn ekki að tilgreina tegund breyta þegar hann skrifar the kóði. Tegund þeirra er ákveðin á meðan forritið keyrir og hún getur breyst. Tegund breytu ákvarðast af gildinu sem er vistað í henni. Eftirfarandi kóði mun keyra rétt í þessum forritunarmálum:
`variable = 1`
`variable += 2.5`
`variable = 'sample string'`
`variable = [2, 3.5, 'sample string']`Hljóðskrift
Hreinn málfræði
Þetta tengist meðal annars ofangreindum punkti. Vegna þess að ekki þarf að tilgreina gerðir, að loka yfirlýsingum með semíkóloni og þess að um skriptmál er að ræða, er bæði auðvelt að skrifa og lesa kóðann. Vel skrifaður kóði verður auðlesanlegur jafnvel fyrir þá sem hafa engan fyrri kynni af þessum forritunarmálum.
Þau hafa gagnvirkar túlkana í skráarskjólinu.
Þegar þú vilt framkvæma einfalda aðgerð eða prófa kóðabrot þarftu ekki að búa til skrá og keyra kóðann með sérstökum skipun. Bæði Ruby og Python hafa gagnvirka konsólutúlka (REPL). Fyrir Python getum við keyrt slíkan túlk með skipuninni pýþon (eðapýþon3), en fyrir Ruby gæti það verið, til dæmis, Siðanefndarrannsókn:
$ irb
2.5.8 :001 > result = 2 + 1
=> 3
2.5.8 :002 > result += 3.5
=> 6.5Hljóðskrift
Mismunur
Þar sem þessir eru mismunandi forritunarmál, Auðvitað verða þær að hafa mismun (ég veit, hvað afhjúpandi yfirlýsing). Í tilviki Python og Ruby eru þessir munir fjölmargir. Ég mun lýsa nokkrum þeirra sem mér finnst mikilvægustir.
Innskot
Innstigning er mjög mikilvæg í Python. Allir kóðablokkir eru skilgreindir með innstigningunni. Mikilvægt er að hver lína í tilteknum blokki hafi sömu innstigninguna. Annars, þegar við reynum að keyra kóðann, fáum við IndentationError. Ruby notar annan nálgun. Hér er kóðablokkurinn afmarkaður með lykilorðum. Við greinum upphafsorðið (t.d.byrja, ef, flokkur, skilgreina) og lokaorðið enda. Það skiptir ekki máli hvernig kóðinn er innskotinn innan kóðabloksins.
Arfleifð
Ein af grunnatriðum hlutbundinnar forritunar. Í réttu höndum getur það gert kraftaverk. Python styður margra undirstöðuatriða erfðir:
example.py
class ClassA:
def callA(self):
print('callA')
class ClassB:
def callB(self):
print('callB')
class ClassAB(ClassA, ClassB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()HljóðskriftHljóðskrift
Í kjölfarið fáum við:
$ python3 example.py
callA
callBHljóðskrift
Ruby styður aðeins eintaks arfgengi með <-reiknivísi sem sjálfgefna stillingu. Hins vegar er hægt að herma eftir margtaks arfgengi með modulum:
example.rb
class ClassA
def calla
puts 'calla'
end
end
module ModuleB
def callb
puts 'callb'
end
end
class ClassAB < ClassA
include ModuleB
end
classinst = ClassAB.new
classinst.calla
classinst.call_b
Hvað veldur? okkur:
$ ruby example.rb
call_a
call_bHljóðskrift
innifela er bara einn af mixinum sem eru í boði í Ruby. Mixins eru leið til að bæta við aukna virkni í klassa. Í Ruby eru þrír mixins.
Innifela
Þegar við hringjum innifela Í skilgreiningu bekkjarins verður innifalið modúlið bein forveri þessa bekkjar. Þetta þýðir að allar aðferðir modúlsins verða aðferðir dæmisins í þessum bekk. Við getum skrifað yfir þær í bekknum og einnig kallað upp upprunalegu aðferðina (sem er skilgreind í modúlinu) með því að nota frábært lykillorð.
example.rb
module ModuleA
def print_something
puts 'Skilaboð frá móðurnum'
end
end
class ClassB
include ModuleA
def print_something
puts 'Skilaboð frá flokknum'
super
end
end
ClassB.new.print_something
Niðurstaða:
$ ruby example.rb
Skilaboð frá class
Skilaboð frá module
Hljóðskrift
Bæta við fyrir framan
Það virkar nánast eins og innifela, En þegar forskotinn módel er bætt við verður hann beinn arftaki bekkjarins. Það þýðir að við getum ekki yfirritað aðferð módelins í bekknum, en aðferð í módelinu getur kallað á aðferð bekkjarins með því að notafrábært lykillorð.
example.rb
module ModuleA
def print_something
puts 'Skilaboð frá módúlinum'
super
end
end
class ClassB
prepend ModuleA
def print_something
puts 'Skilaboð frá klasanum'
end
end
ClassB.new.print_something
Niðurstaða:
$ ruby example.rb
Skilaboð frá einingu
Skilaboð frá bekkHljóðskrift
Stækka
Það virkar svipað og include, nema að aðferðirnar sem skilgreindar eru í móðlinum verði aðferðir bekkjarins.
Niðurstaða:
$ rúbín dæmi.rb Skilaboð frá einingunniHljóðskriftHljóðskrift
Aðgerðir og blokkir
Python hefur fall. Ruby styður aðeins aðferðir. Hvað þýðir það? Meðal annars getur Python geymt fall í breytu og sent það sem rök í annað fall. Í Ruby er það ekki eins einfalt. Þetta tengist einnig svigum. Ef í Python er fall án rökstafa, eða með sjálfgefnum rökstafum, er nafnið notað án sviga, er fallið skilað. Aðeins með svigum er það keyrt. Í Ruby getum við kallað fall án sviga:
example.py
def inner_function():
print('Inngangsfall')
def wrapper_function(function):
print('Hylkisfall')
# function er breyta sem inniheldur fall-hlut
function() # innra fallið er kallað hér
wrapperfunction(innerfunction)
Niðurstaða:
$ python3 example.py
Hylkisfall
Innra fallHljóðskrift
Í Ruby:
example.rb
def inner_function
puts 'Inner function'
end
def wrapper_function(function)
puts 'Wrapper function'
function
end
wrapperfunction(innerfunction) # inner_function er kallað hér
Niðurstaða:
$ ruby example.rb
Innri fall
UmbúðarfallHljóðskrift
Auðvitað geturðu í þessu tilfelli notað nokkur brellur í Ruby til að ná æskilegum áhrifum. Fyrst getum við notað Proc-hlutinn:
example.rb
def inner_function
puts 'Innihlutfall'
end
def wrapper_function(function)
puts 'Hylkið hlutfall'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Niðurstaða:
$ ruby example.rb
Hylkisfall
Innra fallHljóðskrift
Önnur nálgun er að nota blokkir:
dæmi.rbdef inner_function
puts 'Innarfall'
end
def wrapper_function
puts 'Viðarfall'
yield
end
wrapperfunction do
innerfunction
endHljóðskrift
Niðurstaða:
$ ruby example.rb
Hylkisfall
Innra fallHljóðskrift
Lista skilningur
Þetta er mjög gagnleg Python-eiginleiki. Hann felst í því að búa til lista út frá öðrum lista. Segjum að við höfum verkefni sem felur í sér að, gefið lista af tölum, búa til lista yfir ferningsrætur oddatala. Í Python notum við listaskilning:
tölur = [1, 3, 4, 7, 8, 12, 15]
niðurstaða = [num*num for num in tölur if num % 2]HljóðskriftHljóðskrift
Kosturinn er sá að við höfum aðeins tvo lista í minni.
Í Ruby er þetta aðeins öðruvísi. Það eru nokkrar leiðir til að leysa þetta verkefni. Ég mun kynna þá læsilegustu þeirra:
tölur = [1, 3, 4, 7, 8, 12, 15]
niðurstaða = []
tölur.each { |tala| niðurstaða << tala * tala if tala.odd? }HljóðskriftHljóðskriftHljóðskrift
Eins og við sjáum er hægt að gera það, en ekki alveg eins fágað og í Python.
Allir flokkar eru breytanlegir
Í Ruby eru allir klasar breytanlegir. Hvað þýðir það? Við getum bætt við eða yfirritað aðferðir allra klasa, jafnvel innbyggðu. Segjum að við viljum aðferð sem breytir öllum stöfum "a" í "b" í strengi. Við getum gert það á einfaldan hátt:
example.rb
class String
def atob!
self.gsub!(/a/, 'b')
end
end
string = 'Dæmi strengur með mörgum a-stöfum'
puts string
string.atob!
puts string
Niðurstaða:
$ ruby example.rb
Dæmastrengur með mörgum a stöfum
Exbmple strengur með mbny b stöfumHljóðskrift
Yfirlit
Vefþróun hefur verið kraftmikið svið sem sífellt tekur upp og mótar ýmislegt forritunarmál til að henta þörfum sínum. Tvær vinsælar valkostir á þessu sviði eru Python forritunarmál og Ruby. Báðar hafa sannað gildi sitt í bygging vefur forrit og aðrar gerðir hugbúnaðar, hver með sína einstöku kosti og galla.
Python er hástigs forritunarmál heiðrað fyrir einfaldleika sinn og Lestrarhæfni kóða, eiginleiki sem oft höfðar til byrjenda í forritun. The Python forritunarmál er fjölhæfur og má nota við fjölbreytt verkefni. Þetta alhliða forritunarmál er oft notað á sviðum eins og vélanám, stór gögn, og, einkum, vefþróun. Breitt samfélag Python-þróunaraðila framlagar til ríks vistkerfis bókasafna og ramma, eykur hentugleika þess fyrir byggja vefumsóknir. Django, Flask og Pyramid eru meðal hinna ýmsu Python vefgrindverkið nýtt af vefþróunaraðilar um hnöttinn.
Á hinn bóginn, Ruby, annar hágæða, alhliða forritunarmál, skín af sveigjanleika sínum og tjáningarhæfni. Þetta hlutbundið forritunarmál er hryggurinn í mörgum vefumsóknir. Heill Ruby felst í hæfileika hennar til að auðvelda vefþróun í gegnum Relsar rammi, öflugt tæki fyrir byggja vefumsóknir hratt.
Ruby, þó ekki eins vinsæl og Python, státa af virkum og áhugasömum Rúbínsamfélagið sem stöðugt þróar og viðheldur úrval bókasafna og verkfæra, og auðgar þannig upplifunina af vefþróunaraðilar með því að nota þetta tungumál. Sem hlutbundið forritunarmál, Rúbín er metin fyrir fágun sína og hreinan, læsilegan kóða sem hún framleiðir, sem gerir hana að hentugri lausn bæði í smáum og stórum verkefnum vefumsóknir.
Python og Ruby, eins og hlutbundin forritunarmál, deila mörgum svipmótum. Þau styðja einnig virkniskrift, sem býður forriturum upp á ýmsa stíla til kóðunar. Python kóði, einkum, er þakkað fyrir beina málfar sitt, sem undirstrikar áherslu tungumálsins á einfaldleika og lestrarhæfi.
Hvert tungumál hefur sína styrkleika; Python-anna fjölhæfni og vítt samfélag stuðningur gerir það að frábæru tæki fyrir ýms verkefni, á meðan tjáningarhæfileikar Ruby og Rails-rammi gerir það að sterkum keppnisaðila fyrir vefforrit þróun. Það eru einstakar þarfir og óskir um vefþróunaraðilar sem mun ákvarða hvaða mál þjónar best þeirra verkefni.
Í ríki stýrikerfi, bæði forritunarmálin sýna áhrifamikla flytjanleika, sem eykur enn frekar hentugleika þeirra fyrir fjölmörg verkefni, ekki takmörkuð við vefþróun. Þess vegna er erfitt að tilnefna endanlegan “sigurvegara” í þessum einvígi.
Á meðan Python forritunarmál hefur víðtækari náð og stærri samfélag, Ekki skal vanmeta getu Ruby. Til að meta þessi forritunarmál til fulls þarf að kafa ofan í þau, skilja flækjur þeirra og beita þeim þar sem þau skara fram úr. Hvort sem þú ert að búa til vefumsóknir með Python eða Ruby, hver mál Býður upp á traustan vettvang til að skila hágæða vefforrit. Rúbín, þó hún sé minna þekkt, á vissulega skilið viðeigandi viðurkenningu í heimi forritunarmál.