Ruby un Python ir divas lieliskas programmēšanas valodas interpretācijas un dinamiskās rakstības ziņā. Par to pielietojumu, popularitāti un kopienu var izlasīt vienā no šī bloga ierakstiem. Šīm valodām ir daudz kopīga, bet arī daudz atšķirīga. Šajā rakstā es iepazīstināšu ar dažām no tām.
Līdzības
Tā kā šīs valodas var iekļaut vienā dinamiski tipizētu interpretēto valodu kategorijā, nav šaubu, ka tās ir līdzīgas.
Dinamiskā rakstīšana
Abi Python un Rubīns ir dinamiski tipizētas valodas. Rezultātā programmētājam, rakstot mainīgo tipu, nav jānorāda mainīgo tips. kods. To tips tiek noteikts programmas darbības laikā, un tas var mainīties. Mainīgā lieluma tipu nosaka pēc tajā saglabātās vērtības. Šajās valodās pareizi darbosies šāds kods:
mainīgais = 1
mainīgais += 2,5
mainīgais = 'parauga virkne'
mainīgais = [2, 3,5, 'parauga virkne']
Tīra sintakse
Tas cita starpā ir saistīts ar iepriekš minēto punktu. Pateicoties tam, ka nav jādeklarē tipi, apgalvojumi jābeidz ar semikolu, kā arī tam, ka tās ir skriptu valodas, gan rakstīšana, gan lasīšana ir vienkārša. Labi uzrakstītu kodu varēs izlasīt pat cilvēki, kas iepriekš nav saskārušies ar šīm valodām.
Tajos ir interaktīvi konsoles tulki
Ja vēlaties veikt vienkāršu darbību vai pārbaudīt kādu koda elementu, nav nepieciešams izveidot failu un palaist kodu, izmantojot īpašu komandu. Gan Ruby, gan Python ir interaktīvi konsoles tulki (REPL). Attiecībā uz Python mēs varam palaist šādu interpretatoru ar komandu python (vaipython3), bet Ruby gadījumā tas varētu būt, piemēram, irb:
$ irb
2.5.8 :001 > rezultāts = 2 + 1
=> 3
2.5.8 :002 > rezultāts += 3,5
=> 6.5
Atšķirības
Tā kā tie ir dažādi programmēšanas valodas, protams, viņiem ir jābūt atšķirībām (es zinu, cik atklāts apgalvojums). Attiecībā uz Python un Ruby šīs atšķirības ir daudzskaitlīgas. Aprakstīšu dažas, manuprāt, būtiskākās.
Indenti
Python ir ļoti svarīga ievilkšana. Visus koda blokus nosaka ar atkāpi. Ir svarīgi, lai katrai rindai attiecīgajā blokā būtu vienāds atkāpes atstatums. Pretējā gadījumā, mēģinot palaist kodu, mēs saņemsim IndentationError. Ruby izmanto atšķirīgu pieeju. Šeit kodu bloku ierobežo atslēgvārdi. Mēs atšķiram sākuma vārdu (piem.begin, if, klase, def) un beigu vārds beigas. Nav svarīgi, kā kods ir ievilkts koda blokā.
Mantojums
Viena no objektorientētās programmēšanas pamatiezīmēm. Pareizās rokās tā var radīt brīnumus. Python atbalsta vairāku bāzu mantošanu:
example.py
klase ClassA:
def callA(self):
print('callA')
klaseB:
def callB(self):
print('callB')
klase ClassAB(ClassA, ClassB):
pass
class_inst = ClassAB()
class_inst.callA()
class_inst.callB()
Rezultātā mēs iegūstam:
$ python3 example.py
callA
callB
Ruby pēc noklusējuma atbalsta tikai vienas bāzes mantošanu, izmantojot < operatoru. Tomēr ir iespējams simulēt vairāku bāzu mantošanu, izmantojot moduļus:
example.rb
klase ClassA
def calla
puts 'calla'
end
end
modulis ModuleB
def callb
puts 'callb'
end
end
klase ClassAB < ClassA
include ModuleB
end
classinst = ClassAB.new
classinst.calla
classinst.call_b
Kas dod mums:
$ ruby example.rb
call_a
call_b
iekļaut ir tikai viens no Ruby programmā pieejamajiem sajaukumiem. Miksīni ir veids, kā klasēm pievienot papildu funkcionalitāti. Ruby ir trīs miksīni.
Iekļaut
Kad mēs saucam iekļaut klases definīcijā iekļautais modulis kļūst par šīs klases tiešo priekšteci. Tas nozīmē, ka katra moduļa metode kļūst par šīs klases instances metodi. Mēs varam pārrakstīt tās klasē un arī izsaukt oriģinālo metodi (definētu modulī), izmantojot super atslēgvārds.
example.rb
modulis ModuleA
def print_something
puts 'Ziņojums no moduļa'
end
end
klase ClassB
include ModuleA
def print_something
puts 'Ziņojums no klases'
super
end
end
ClassB.new.print_something
Rezultāts:
$ ruby example.rb
Ziņojums no klases
Ziņojums no moduļa
Pievienojiet
Tas darbojas gandrīz kā iekļaut, bet iepriekš pievienotais modulis kļūst par tiešo klases pēcteci. Tas nozīmē, ka mēs nevaram pārrakstīt moduļa metodi klasē, bet moduļa metode var izsaukt klases metodi, izmantojotsuper atslēgvārds.
example.rb
modulis ModuleA
def print_something
puts 'Message from module'
super
end
end
klase ClassB
pievienošana modulimA
def print_something
puts 'Ziņojums no klases'
end
end
ClassB.new.print_something
Rezultāts:
$ ruby example.rb
Ziņojums no moduļa
Ziņojums no klases
Paplašināt
Tas darbojas līdzīgi kā include, tikai modulī definētās metodes kļūst par klases metodēm.
Rezultāts:
$ ruby example.rb Ziņojums no moduļa
Funkcijas un bloki
Python ir funkcijas. Ruby atbalsta tikai metodes. Ko tas nozīmē? Cita starpā Python var turēt funkciju mainīgajā un nodot to kā argumentu citai funkcijai. Ruby valodā mēs to nevaram izdarīt tik vienkārši. Tas ir saistīts arī ar iekavām. Ja Python ir dota funkcija bez argumentiem vai ar noklusējuma argumentiem, tad, izmantojot tās nosaukumu bez iekavām, funkcija tiks atgriezta. Tikai pievienojot iekavas, tā tiek izpildīta. Ruby valodā mēs varam izsaukt funkcijas bez iekavām:
example.py
def inner_function():
print('Iekšējā funkcija')
def wrapper_function(function):
print('Wrapper function')
# funkcija ir mainīgais, kas satur funkcijas objektu
function() # šeit tiek izsaukta iekšējā funkcija
wrapperfunction(innerfunction)
Rezultāts:
$ python3 example.py
Wrapper funkcija
Iekšējā funkcija
Rubīna valodā:
example.rb
def inner_function
puts 'Iekšējā funkcija'
end
def wrapper_function(function)
puts 'Apvalka funkcija'
funkcija
end
wrapperfunction(innerfunction) # šeit tiek izsaukta inner_function
Rezultāts:
$ ruby example.rb
Iekšējā funkcija
Apvalka funkcija
Protams, šajā gadījumā, lai sasniegtu vēlamo efektu, varat veikt dažus trikus ar Ruby. Pirmkārt, mēs varam izmantot objektu Proc:
example.rb
def inner_function
puts 'Iekšējā funkcija'
end
def wrapper_function(function)
puts 'ietinēja funkcija'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Rezultāts:
$ ruby example.rb
Wrapper funkcija
Iekšējā funkcija
Otra pieeja ir izmantot blokus:
example.rbdef inner_function
puts 'Iekšējā funkcija'
end
def wrapper_function
puts 'Wrapper function'
yield
end
wrapperfunction do
innerfunction
beigas
Rezultāts:
$ ruby example.rb
Wrapper funkcija
Iekšējā funkcija
Saraksta izpratne
Šī ir ļoti noderīga Python funkcija. Tā ir saraksta izveide, pamatojoties uz citu sarakstu. Pieņemsim, ka mums ir šāds uzdevums: dots skaitļu saraksts, izveidojiet nepāra skaitļu kvadrātu sarakstu. Programmā Python mēs izmantojam sarakstu izpratni:
numuri = [1, 3, 4, 7, 8, 12, 15]
rezultāts = [num*num for num in numbers if num % 2]
Priekšrocība ir tā, ka atmiņā ir tikai divi saraksti.
Ruby sistēmā viss ir nedaudz savādāk. Ir vairāki veidi, kā atrisināt šo uzdevumu. Es iepazīstināšu ar lasāmāko no tiem:
numuri = [1, 3, 4, 7, 8, 12, 15]
rezultāts = []
numbers.each { |num| result << num * num if num.odd? }
Kā redzams, to var izdarīt, taču ne tik eleganti kā Python.
Visas klases ir maināmas
Ruby valodā visas klases ir maināmas. Ko tas nozīmē? Mēs varam pievienot vai pārrakstīt metodes visām klasēm, pat iebūvētajām. Pieņemsim, ka mēs vēlamies metodi, kas virknē katru burtu an nomaina pret b. Mēs to varam izdarīt vienkāršā veidā:
example.rb
klase String
def atob!
self.gsub!(/a/, 'b')
end
end
string = 'Piemērs virknei ar daudziem a burtiem'
puts string
string.atob!
puts string
Rezultāts:
$ ruby example.rb
Piemēra virkne ar daudziem a burtiem
Piemērs virkne ar mbny b burtiem
Kopsavilkums
Tīmekļa izstrāde ir bijusi dinamiska joma, kas pastāvīgi pieņem un veido dažādus programmēšanas valodas lai atbilstu tās vajadzībām. Divas populāras izvēles šajā jomā ir Python programmēšanas valoda un Rubīns. Abi ir pierādījuši savu vērtību ēka tīmekļa vietne lietojumprogrammas un cita veida programmatūru, un katrai no tām ir savas unikālas priekšrocības un trūkumi.
Python ir augsta līmeņa programmēšanas valoda cienīts par tā vienkāršību un koda lasāmība, Šī funkcija bieži vien ir saistoša iesācējiem programmētājiem. Portāls Python programmēšanas valoda ir daudzpusīga un to var izmantot dažādiem uzdevumiem. Šis vispārējas nozīmes programmēšanas valoda bieži izmanto tādās jomās kā mašīnmācīšanās, liels dati, un jo īpaši, tīmekļa izstrāde. Plašs Python izstrādātāju kopiena veicina tās bagātīgo bibliotēku un ietvaru ekosistēmu, tādējādi uzlabojot tās piemērotību tīmekļa lietojumprogrammu veidošana. Django, Flask un Pyramid ir viens no dažādajiem Python tīmekļa ietvari ko izmanto tīmekļa izstrādātāji visā pasaulē.
No otras puses, Ruby, vēl viens augsta līmeņa, vispārējas nozīmes programmēšanas valoda., kas izceļas ar savu elastīgumu un izteiksmīgumu. Šis objektorientēta programmēšanas valoda ir daudzu tīmekļa lietojumprogrammas. Ruby burvība slēpjas tā spējā atvieglot tīmekļa izstrāde izmantojot Sliedes sistēma, kas ir spēcīgs rīks, lai tīmekļa lietojumprogrammu veidošana strauji.
Rubīns, lai gan mazāk populārs nekā Python, var lepoties ar aktīvu un mērķtiecīgu Rubīna kopiena kas nepārtraukti attīsta un uztur bibliotēku un rīku klāstu, tādējādi bagātinot lietotāju pieredzi. tīmekļa izstrādātāji izmantojot šo valodu. Kā objektorientēta valoda, Ruby tiek augstu vērtēts par tā eleganci un tīro, viegli lasāmo kodu, tāpēc tas ir piemērota izvēle gan maziem, gan lieliem lietojumiem. tīmekļa lietojumprogrammas.
Python un Ruby, kā objektorientētas programmēšanas valodas, ir daudz kopīgu iezīmju. Tās arī atbalsta funkcionālā programmēšana, kas programmētājiem piedāvā dažādus kodēšanas stilus. Python kods, jo īpaši tās vienkāršās sintakses dēļ, kas pasvītro valodas uzsvaru uz vienkāršību un vienkāršību. lasāmība.
Katrai valodai ir savas stiprās puses; Python's daudzpusība un plašs kopiena atbalsts padara to par lielisku rīku dažādu uzdevumu veikšanai, savukārt Ruby izteiksmība un Rails ietvars padara to par spēcīgu pretendentu uz tīmekļa lietotne attīstība. Tās ir unikālās vajadzības un vēlmes, ko tīmekļa izstrādātāji kas noteiks, kurš valoda vislabāk kalpo viņu projekts.
Šajā jomā operētājsistēmas, abām valodām piemīt iespaidīgs pārnesamības līmenis, kas vēl vairāk uzlabo to piemērotību daudziem uzdevumiem, ne tikai. tīmekļa izstrāde. Tāpēc šajā duelī ir grūti noteikt galīgo “uzvarētāju”.
Lai gan Python programmēšanas valoda ir plašāka darbības joma un lielāks kopiena, Ruby iespējas nevajadzētu novērtēt par zemu. Lai pilnībā novērtētu šīs valodas, tajās ir jāiedziļinās, jāizprot to nianses un jāpielieto tur, kur tās spīd visvairāk. Neatkarīgi no tā, vai esat tīmekļa lietojumprogrammu izveide ar Python vai Ruby, katrs valoda piedāvā stabilu platformu, lai nodrošinātu augstas kvalitātes tīmekļa lietojumprogrammas. Rubīns, lai gan mazāk zināms, noteikti ir pelnījis pienācīgu atzinību pasaulē. programmēšanas valodas.