Ruby i Python to dwa świetne języki programowania pod względem interpretacji i dynamicznego typowania. O ich zastosowaniach, popularności i społeczności można przeczytać w jednym z wpisów na tym blogu. Języki te mają wiele cech wspólnych, ale także wiele różnic. W tym artykule przedstawię niektóre z nich.
Podobieństwa
Ponieważ języki te można zaliczyć do tej samej kategorii dynamicznie typowanych języków interpretowanych, nie ma wątpliwości, że są one podobne.
Dynamiczne pisanie
Oba Python i Ruby są językami dynamicznie typowanymi. W rezultacie programista nie musi określać typu zmiennych podczas pisania kodu kod. Ich typ jest określany podczas działania programu i może ulec zmianie. Typ zmiennej jest pochodną przechowywanej w niej wartości. Poniższy kod będzie działał poprawnie w tych językach:
variable = 1
variable += 2.5
variable = 'przykładowy ciąg znaków'
variable = [2, 3.5, 'sample string']
Czysta składnia
Jest to związane między innymi z punktem powyżej. Ze względu na brak konieczności deklarowania typów, kończenia wypowiedzi średnikiem, a także fakt, że są to języki skryptowe, zarówno pisanie, jak i czytanie jest proste. Dobrze napisany kod będzie czytelny nawet dla osób, które nie miały wcześniej styczności z tymi językami.
Posiadają one interaktywne interpretery konsolowe
Gdy chcesz wykonać prostą operację lub przetestować fragment kodu, nie musisz tworzyć pliku i uruchamiać kodu za pomocą specjalnego polecenia. Zarówno Ruby jak i Python posiadają interaktywne interpretery konsolowe (REPL). W przypadku Python możemy uruchomić taki interpreter poleceniem pyton
(lubpython3
), podczas gdy dla Ruby może to być np, irb:
$ irb
2.5.8 :001 > result = 2 + 1
=> 3
2.5.8 :002 > result += 3.5
=> 6.5
Różnice
Ponieważ są one różne języki programowaniaOczywiście muszą mieć różnice (wiem, co za odkrywcze stwierdzenie). W przypadku Python i Ruby tych różnic jest sporo. Opiszę kilka moim zdaniem najistotniejszych.
Wcięcia
Wcięcia są bardzo ważne w Python. Wszystkie bloki kodu są zdefiniowane przez wcięcia. Ważne jest, aby każda linia w danym bloku miała takie samo wcięcie. W przeciwnym razie, gdy spróbujemy uruchomić kod, otrzymamy IndentationError. Ruby przyjmuje inne podejście. Tutaj blok kodu jest ograniczony słowami kluczowymi. Wyróżniamy początkowe słowo (np.begin, if, class, def
) i słowo kończące koniec.
Nie ma znaczenia, w jaki sposób kod jest wcięty wewnątrz bloku kodu.
Dziedziczenie
Jedna z podstawowych cech programowania obiektowego. We właściwych rękach może zdziałać cuda. Python obsługuje dziedziczenie wielobazowe:
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()
W rezultacie otrzymujemy:
$ python3 example.py
callA
callB
Ruby domyślnie obsługuje tylko dziedziczenie jednobazowe przy użyciu operatora <. Możliwe jest jednak symulowanie dziedziczenia wielobazowego przy użyciu modułów:
example.rb
class ClassA
def calla
puts 'calla'
end
end
moduł ModuleB
def callb
puts 'callb'
end
end
class ClassAB < ClassA
include ModuleB
end
classinst = ClassAB.new
classinst.calla
classinst.call_b
Co nam daje:
$ ruby example.rb
call_a
call_b
zawierać
jest tylko jednym z miksów dostępnych w Rubim. Mixiny to sposób na dodanie dodatkowej funkcjonalności do klas. W Rubim dostępne są trzy mixiny.
Zawierać
Kiedy dzwonimy zawierać
w definicji klasy, dołączony moduł staje się bezpośrednim przodkiem tej klasy. Oznacza to, że każda metoda modułu staje się metodą instancji tej klasy. Możemy nadpisać je w klasie, a także wywołać oryginalną metodę (zdefiniowaną w module) za pomocą super
słowo kluczowe.
example.rb
moduł ModuleA
def print_something
puts 'Wiadomość z modułu'
end
end
class ClassB
include ModuleA
def print_something
puts 'Wiadomość od klasy'
super
end
end
ClassB.new.print_something
Wynik:
$ ruby example.rb
Wiadomość od klasy
Wiadomość z modułu
Prepend
Działa prawie jak zawierać
ale poprzedzony moduł staje się bezpośrednim potomkiem klasy. Oznacza to, że nie możemy nadpisać metody modułu w klasie, ale metoda w module może wywołać metodę klasy za pomocąsuper
słowo kluczowe.
example.rb
moduł ModuleA
def print_something
puts 'Wiadomość z modułu'
super
end
end
class ClassB
prepend ModuleA
def print_something
puts 'Wiadomość od klasy'
end
end
ClassB.new.print_something
Wynik:
$ ruby example.rb
Wiadomość z modułu
Wiadomość od klasy
Rozszerzenie
Działa podobnie do include, z wyjątkiem tego, że metody zdefiniowane w module stają się metodami klasy.
Wynik:
$ ruby example.rb Wiadomość z modułu
Funkcje i bloki
Python posiada funkcje. Ruby obsługuje tylko metody. Co to oznacza? Między innymi, Python może przechowywać funkcję w zmiennej i przekazywać ją jako argument do innej funkcji. W Ruby nie możemy tego zrobić tak łatwo. Jest to również związane z nawiasami. Biorąc pod uwagę funkcję bez argumentów w Python lub z domyślnymi argumentami, jeśli użyjesz jej nazwy bez nawiasów, funkcja zostanie zwrócona. Tylko dodanie nawiasów prowadzi do jej wykonania. W Rubim możemy wywoływać funkcje bez nawiasów:
example.py
def inner_function():
print('Funkcja wewnętrzna')
def wrapper_function(function):
print('Wrapper function')
# function jest zmienną zawierającą obiekt funkcji
function() Tutaj wywoływana jest funkcja wewnętrzna #
wrapperfunction(innerfunction)
Wynik:
$ python3 example.py
Funkcja opakowująca
Funkcja wewnętrzna
W Ruby:
example.rb
def inner_function
puts 'Funkcja wewnętrzna'
end
def wrapper_function(function)
puts 'Funkcja opakowująca'
function
end
wrapperfunction(innerfunction) # inner_function jest wywoływana tutaj
Wynik:
$ ruby example.rb
Funkcja wewnętrzna
Funkcja opakowująca
Oczywiście w tym przypadku można zastosować kilka sztuczek w Rubim, aby osiągnąć pożądany efekt. Po pierwsze, możemy użyć obiektu Proc:
example.rb
def inner_function
puts 'Funkcja wewnętrzna'
end
def wrapper_function(function)
puts 'Funkcja opakowująca'
function.call
end
func = Proc.new { innerfunction }
wrapperfunction(func)
Wynik:
$ ruby example.rb
Funkcja opakowująca
Funkcja wewnętrzna
Drugim podejściem jest użycie bloków:
example.rb
def inner_function
puts 'Funkcja wewnętrzna'
end
def wrapper_function
puts 'Funkcja opakowująca'
yield
end
wrapperfunction do
innerfunction
koniec
Wynik:
$ ruby example.rb
Funkcja opakowująca
Funkcja wewnętrzna
Zrozumienie listy
Jest to bardzo przydatna funkcja Python. Polega ona na tworzeniu listy na podstawie innej listy. Załóżmy, że mamy takie zadanie: mając listę liczb, utwórz listę kwadratów liczb nieparzystych. W Python używamy funkcji rozumienia listy:
numbers = [1, 3, 4, 7, 8, 12, 15]
result = [num*num for num in numbers if num % 2]
Zaletą jest to, że w pamięci mamy tylko dwie listy.
W Rubim sprawy mają się nieco inaczej. Istnieje kilka sposobów na rozwiązanie tego zadania. Przedstawię najbardziej czytelny z nich:
numbers = [1, 3, 4, 7, 8, 12, 15]
result = []
numbers.each { |num| result << num * num if num.odd? }
Jak widać, da się to zrobić, ale nie tak elegancko jak w Python.
Wszystkie klasy są mutowalne
W Rubim wszystkie klasy są mutowalne. Co to oznacza? Możemy dodawać lub nadpisywać metody wszystkich klas, nawet tych wbudowanych. Załóżmy, że chcemy metodę, która zamienia każdą literę an na b w łańcuchu znaków. Możemy to zrobić w prosty sposób:
example.rb
class String
def atob!
self.gsub!(/a/, 'b')
end
end
string = 'Przykładowy ciąg z wieloma literami a'
puts string
string.atob!
puts string
Wynik:
$ ruby example.rb
Przykładowy ciąg z wieloma literami a
Przykładowy ciąg z wieloma literami b
Podsumowanie
Tworzenie stron internetowych jest dynamiczną dziedziną, która nieustannie przyjmuje i kształtuje różne języki programowania do swoich potrzeb. Dwa popularne wybory w tym obszarze obejmują Język programowania Python i Ruby. Oba sprawdziły się w tworzenie aplikacji internetowych i inne formy oprogramowania, z których każda ma swoje unikalne zalety i wady.
Python jest język programowania wysokiego poziomu czczony za swoją prostotę i czytelność kodufunkcja, która często przemawia do początkujących programistów. The Język programowania Python jest wszechstronny i może być używany do różnych zadań. To język programowania ogólnego przeznaczenia jest często wykorzystywana w obszarach takich jak uczenie maszynowe, big data i, w szczególności, tworzenie stron internetowych. Szeroki Społeczność deweloperów Python przyczynia się do jego bogatego ekosystemu bibliotek i frameworków, zwiększając jego przydatność dla tworzenie aplikacji internetowych. Django, Flask i Pyramid są jednymi z różnych Python frameworki internetowe wykorzystywany przez twórcy stron internetowych na całym świecie.
Z drugiej strony, Ruby, kolejny wysokopoziomowy język programowania ogólnego przeznaczeniawyróżnia się elastycznością i ekspresyjnością. To obiektowy język programowania jest podstawą wielu aplikacje internetowe. Urok Ruby polega na jego zdolności do ułatwiania tworzenie stron internetowych przez Framework Railspotężne narzędzie do tworzenie aplikacji internetowych szybko.
Ruby, choć mniej popularny niż Pythonmoże pochwalić się aktywnym i oddanym Społeczność Ruby która nieustannie rozwija i utrzymuje asortyment bibliotek i narzędzi, wzbogacając w ten sposób doświadczenia użytkowników. twórcy stron internetowych używając tego języka. Jako język zorientowany obiektowoRuby jest ceniony za swoją elegancję i czysty, czytelny kod, który tworzy, co czyni go odpowiednim wyborem zarówno dla małych, jak i dużych przedsiębiorstw. aplikacje internetowe.
Python i Ruby, jak obiektowe języki programowaniamają wiele podobieństw. Wspierają również programowanie funkcjonalneoferując programistom różne style kodowania. Kod Pythonw szczególności jest ceniony za prostą składnię, która podkreśla nacisk, jaki język kładzie na prostotę i łatwość obsługi. czytelność.
Każdy język ma swoje mocne strony; Python wszechstronność i szeroki społeczność wsparcie sprawiają, że jest to doskonałe narzędzie do różnych zadań, podczas gdy ekspresyjność Rubiego i Framework Rails czyni go silnym pretendentem do aplikacja internetowa rozwój. To właśnie unikalne potrzeby i preferencje twórcy stron internetowych który określi, które język najlepiej służy ich projekt.
W dziedzinie systemy operacyjneOba języki wykazują imponujący poziom przenośności, co dodatkowo zwiększa ich przydatność do wielu zadań, nie ograniczając się do tworzenie stron internetowych. Dlatego trudno jest ogłosić ostatecznego "zwycięzcę" w tym pojedynku.
Podczas gdy Język programowania Python ma szerszy zasięg i większy społecznośćNie należy lekceważyć możliwości Ruby. Aby w pełni docenić te języki, należy zagłębić się w nie, zrozumieć ich zawiłości i zastosować je tam, gdzie są najbardziej przydatne. Niezależnie od tego, czy jesteś tworzenie aplikacji internetowych z Python lub Ruby, każdy język oferuje solidną platformę do dostarczania wysokiej jakości aplikacje internetowe. Ruby, choć mniej znany, z pewnością zasługuje na należne mu uznanie w świecie języki programowania.