Ruby ir Python yra dvi puikios programavimo kalbos interpretacijos ir dinaminio rašymo požiūriu. Apie jų taikymą, populiarumą ir bendruomenę galite paskaityti viename iš šio tinklaraščio įrašų. Šios kalbos turi daug bendrų dalykų, bet ir daug skirtumų. Šiame straipsnyje supažindinsiu su kai kuriais iš jų.
Panašumai
Kadangi šias kalbas galima priskirti tai pačiai dinamiškai tipizuojamų interpretuojamų kalbų kategorijai, nėra abejonių, kad jos yra panašios.
Dinaminis rašymas
Abu Python ir Ruby yra dinamiškai tipuojamos kalbos. Dėl to programuotojui nereikia nurodyti kintamųjų tipo rašant kodas. Jų tipas nustatomas programos veikimo metu ir gali keistis. Kintamojo tipas nustatomas pagal jame saugomą reikšmę. Toliau pateikiamas kodas šiomis kalbomis veiks teisingai:
kintamasis = 1
kintamasis += 2,5
kintamasis = 'sample string'
kintamasis = [2, 3,5, 'sample string']
Grynoji sintaksė
Tai, be kita ko, susiję su pirmiau minėtu punktu. Dėl to, kad nereikia deklaruoti tipų, teiginių užbaigti kabliataškiu, taip pat dėl to, kad tai yra skriptų kalbos, tiek rašyti, tiek skaityti lengva. Gerai parašytą kodą perskaitys net ir tie žmonės, kurie anksčiau nėra susidūrę su šiomis kalbomis.
Jie turi interaktyvius konsolinius vertėjus
Kai norite atlikti paprastą operaciją arba išbandyti kodo dalį, nereikia kurti failo ir paleisti kodo naudojant specialią komandą. Ir "Ruby", ir Python turi interaktyvius konsolinius interpretatorius (REPL). Python atveju tokį interpretatorių galime paleisti komanda python (arbapython3), o "Ruby" atveju tai gali būti, pvz.,, irb:
$ irb
2.5.8 :001 > rezultatas = 2 + 1
=> 3
2.5.8 :002 > rezultatas += 3,5
=> 6.5
Skirtumai
Kadangi tai yra skirtingi programavimo kalbos, žinoma, jie turi turėti skirtumų (žinau, koks atviras teiginys). Python ir "Ruby" atveju šių skirtumų yra daug. Aprašysiu keletą, mano nuomone, svarbiausių.
Intarpai
Python labai svarbus įdubimas. Visi kodo blokai apibrėžiami įtrauka. Svarbu, kad kiekviena tam tikro bloko eilutė būtų vienodai įtraukta. Priešingu atveju, bandydami paleisti kodą, gausime IndentationError. "Ruby" naudoja kitokį požiūrį. Čia kodo blokas ribojamas raktiniais žodžiais. Išskiriame pradžios žodį (pvz.begin, if, class, def) ir baigiamąjį žodį pabaiga. Nesvarbu, kaip kodas yra įterptas kodo bloke.
Paveldėjimas
Viena iš pagrindinių objektinio programavimo ypatybių. Tinkamose rankose ji gali daryti stebuklus. Python palaiko kelių bazių paveldėjimą:
example.py
klasė ClassA:
def callA(self):
print('callA')
klasėB:
def callB(self):
print('callB')
ClassAB(ClassA, ClassB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
Todėl gauname:
$ python3 example.py
callA
callB
Pagal numatytuosius nustatymus "Ruby" palaiko tik vieno pagrindo paveldėjimą naudojant < operatorių. Tačiau naudojant modulius galima imituoti kelių bazių paveldėjimą:
example.rb
klasė ClassA
def calla
puts 'calla'
end
end
modulis ModuleB
def callb
puts 'callb'
end
end
klasė ClassAB < ClassA
include ModuleB
end
classinst = ClassAB.new
classinst.calla
classinst.call_b
Kas suteikia mus:
$ ruby example.rb
call_a
call_b
įtraukti yra tik vienas iš "Ruby" mišinių. Miksinai - tai būdas klasėms pridėti papildomų funkcijų. Ruby yra trys mišiniai.
Įtraukite
Kai skambiname įtraukti klasės apibrėžime, įtrauktas modulis tampa tiesioginiu šios klasės protėviu. Tai reiškia, kad kiekvienas modulio metodas tampa šios klasės egzemplioriaus metodu. Mes galime juos perrašyti klasėje ir taip pat iškviesti pradinį metodą (apibrėžtą modulyje) naudodami super raktažodis.
example.rb
modulis ModuleA
def print_something
puts 'Pranešimas iš modulio'
end
end
ClassB klasė
include ModuleA
def print_something
puts 'Pranešimas iš klasės'
super
end
end
ClassB.new.print_something
Rezultatas:
$ ruby example.rb
Pranešimas iš klasės
Pranešimas iš modulio
Priedas
Jis veikia beveik kaip įtraukti, tačiau iš anksto pridėtas modulis tampa tiesioginiu klasės palikuoniu. Tai reiškia, kad mes negalime perrašyti modulių metodų klasėje, tačiau modulio metodas gali iškviesti klasės metodą naudodamassuper raktažodis.
example.rb
modulis ModuleA
def print_something
puts 'Pranešimas iš modulio'
super
end
end
ClassB klasė
prepend ModulisA
def print_something
puts 'Pranešimas iš klasės'
pabaiga
pabaiga
ClassB.new.print_something
Rezultatas:
$ ruby example.rb
Pranešimas iš modulio
Pranešimas iš klasės
Pratęsti
Jis veikia panašiai kaip include, išskyrus tai, kad modulyje apibrėžti metodai tampa klasės metodais.
Rezultatas:
$ ruby example.rb Pranešimas iš modulio
Funkcijos ir blokai
Python turi funkcijas. Ruby palaiko tik metodus. Ką tai reiškia? Be kitų dalykų, Python gali laikyti funkciją kintamajame ir perduoti ją kaip argumentą kitai funkcijai. Ruby kalboje to padaryti taip lengvai negalime. Tai taip pat susiję su skliaustais. Jei Python duota funkcija be argumentų arba su numatytaisiais argumentais, panaudojus jos pavadinimą be skliaustų, funkcija bus grąžinta. Tik pridėjus skliaustelius ji bus vykdoma. Ruby kalboje funkcijas galime iškviesti be skliaustų:
example.py
def inner_function():
print('Vidinė funkcija')
def wrapper_function(funkcija):
print('Apgaubiančioji funkcija')
# funkcija yra kintamasis, kuriame yra funkcijos objektas
function() # čia kviečiama vidinė funkcija
wrapperfunction(innerfunction)
Rezultatas:
$ python3 example.py
Apvyniojanti funkcija
Vidinė funkcija
"Ruby" kalba:
example.rb
def inner_function
puts 'Vidinė funkcija'
end
def wrapper_function(function)
puts 'Wrapper function'
funkcija
end
wrapperfunction(innerfunction) # čia iškviečiama inner_function
Rezultatas:
$ ruby example.rb
Vidinė funkcija
Apvyniojamoji funkcija
Žinoma, šiuo atveju galite atlikti keletą triukų "Ruby" programoje, kad pasiektumėte norimą efektą. Pirma, galime naudoti objektą Proc:
example.rb
def inner_function
puts 'Vidinė funkcija'
end
def wrapper_function(function)
puts 'Wrapper function'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Rezultatas:
$ ruby example.rb
Apvyniojanti funkcija
Vidinė funkcija
Antrasis būdas - naudoti blokus:
example.rbdef inner_function
puts 'Vidinė funkcija'
end
def wrapper_function
puts 'Wrapper function'
yield
end
wrapperfunction do
innerfunction
end
Rezultatas:
$ ruby example.rb
Apvyniojanti funkcija
Vidinė funkcija
Sąrašo supratimas
Tai labai naudinga Python funkcija. Ją sudaro sąrašo sukūrimas pagal kitą sąrašą. Tarkime, kad turime tokią užduotį: turėdami skaičių sąrašą, sudarykite nelyginių skaičių kvadratų sąrašą. Programoje Python naudojame sąrašų supratimą:
numeriai = [1, 3, 4, 7, 8, 12, 15]
rezultatas = [num*num for num in numbers if num % 2]
Privalumas tas, kad atmintyje turime tik du sąrašus.
"Ruby" sistemoje viskas yra šiek tiek kitaip. Šį uždavinį galima išspręsti keliais būdais. Pateiksiu skaitlingiausią iš jų:
numeriai = [1, 3, 4, 7, 8, 12, 15]
rezultatas = []
numbers.each { |num| result << num * num if num.odd? }
Kaip matome, tai galima padaryti, tačiau ne taip elegantiškai, kaip Python.
Visos klasės yra keičiamos
Ruby kalboje visos klasės yra keičiamos. Ką tai reiškia? Galime pridėti arba perrašyti visų klasių, net ir integruotų, metodus. Tarkime, norime metodo, kuris eilutėje kiekvieną raidę an pakeistų į b. Tai galime padaryti paprastai:
example.rb
klasė String
def atob!
self.gsub!(/a/, 'b')
pabaiga
end
string = 'Pavyzdinė eilutė su daug a raidžių'
puts string
string.atob!
puts string
Rezultatas:
$ ruby example.rb
Pavyzdys eilutė su daug a raidžių
Pavyzdys eilutė su mbny b raidėmis
Santrauka
Interneto svetainių kūrimas yra dinamiška sritis, kurioje nuolat priimami ir formuojami įvairūs programavimo kalbos kad atitiktų jos poreikius. Šioje srityje populiarūs du pasirinkimai Python programavimo kalba ir "Ruby". Abi jos įrodė savo vertę pastatas žiniatinklio svetainė programos ir kitų formų programinė įranga, kurių kiekviena turi unikalių privalumų ir trūkumų.
Python yra aukšto lygio programavimo kalba gerbiamas dėl savo paprastumo ir kodo įskaitomumas, funkcija, kuri dažnai patinka pradedantiesiems programuotojams. Svetainė Python programavimo kalba yra universalus ir gali būti naudojamas įvairioms užduotims atlikti. Šis bendrosios paskirties programavimo kalba dažnai naudojamas tokiose srityse kaip mašininis mokymasis, didelis duomenys, ir ypač, žiniatinklio kūrimas. Platus Python kūrėjų bendruomenė prisideda prie turtingos bibliotekų ir struktūrų ekosistemos, todėl ji tampa tinkamesnė žiniatinklio programų kūrimas. Django, "Flask" ir "Piramidė" - tai įvairios Python žiniatinklio karkasai pasinaudojo žiniatinklio kūrėjai visame pasaulyje.
Kita vertus, "Ruby", kitas aukšto lygio, bendrosios paskirties programavimo kalba., išsiskiria lankstumu ir išraiškingumu. Šis į objektus orientuota programavimo kalba. yra daugelio žiniatinklio programos. Ruby žavesys slypi jo gebėjime palengvinti žiniatinklio kūrimas per Bėgiai sistema, galingas įrankis, skirtas žiniatinklio programų kūrimas greitai.
"Ruby", nors ir mažiau populiarus nei Python, gali pasigirti aktyviu ir atsidavusiu "Ruby" bendruomenė nuolat kuria ir prižiūri bibliotekų ir įrankių asortimentą, taip praturtindama žiniatinklio kūrėjai naudojant šią kalbą. Kaip į objektus orientuota kalba, "Ruby" vertinamas dėl savo elegancijos ir švaraus, lengvai skaitomo kodo, todėl yra tinkamas pasirinkimas tiek mažiems, tiek dideliems žiniatinklio programos.
Python ir "Ruby", nes į objektus orientuotos programavimo kalbos., turi daug panašumų. Jie taip pat palaiko funkcinis programavimas, programuotojams siūloma įvairių stilių kodų. Python kodas, ypač vertinama dėl paprastos sintaksės, kuri pabrėžia kalbos paprastumą ir paprastumą. skaitomumas.
Kiekviena kalba turi savų privalumų; Python's universalumas ir platus bendruomenė palaikymas daro jį puikiu įrankiu įvairioms užduotims atlikti, o "Ruby" išraiškingumas ir "Rails" sistema tai yra stiprus pretendentas į žiniatinklio programa plėtra. Būtent unikalūs poreikiai ir pageidavimai žiniatinklio kūrėjai kuris nustatys, kuris kalba geriausiai tarnauja jų projektas.
Šioje srityje operacinės sistemos, abi kalbos pasižymi įspūdingu perkeliamumo lygiu, o tai dar labiau padidina jų tinkamumą įvairioms užduotims, pvz. žiniatinklio kūrimas. Todėl šioje dvikovoje sunku nustatyti galutinį nugalėtoją.
Nors Python programavimo kalba turi platesnę aprėptį ir didesnę bendruomenė, nereikėtų nuvertinti "Ruby" galimybių. Norint visapusiškai įvertinti šias kalbas, reikia į jas įsigilinti, suprasti jų subtilybes ir taikyti jas ten, kur jos labiausiai spindi. Nesvarbu, ar esate žiniatinklio programų kūrimas su Python arba "Ruby", kiekvienas kalba siūlo patikimą platformą aukštos kokybės žiniatinklio programos. Rubinas, nors ir mažiau žinomas, neabejotinai nusipelno deramo įvertinimo pasaulyje. programavimo kalbos.