Ruby a Python

Python jest kolejnym bardzo przyjaznym językiem programowania ogólnego zastosowania. Przechodząc z Pythona na Rubiego, odkryjesz, że do nauczenia jest trochę więcej składni niż w Pythonie.

Podobieństwa

Podobnie jak w Pythonie, w Rubim,…

  • Jest interaktywna konsola (nazywa się irb).
  • Możesz czytać dokumentację z linii poleceń (używając komendy ri zamiast pydoc).
  • Nie ma specjalnych znaków oznaczających koniec linii (poza zwykłym znakiem nowej linii).
  • Tekst zawarty w literałach może zajmować wiele linii, podobnie jak tekst zaznaczony potrójnym cudzysłowem
  • Nawiasy oznaczają listy, klamry oznaczają słowniki (w Rubim słowniki nazywa się “haszami” ang. Hash)
  • Tablice (Array) zachowują się tak samo – dodanie dwóch tablic tworzy jedną długą tablicę, złożenie dwóch tablic np. tak: a3 = [ a1, a2 ] daje tablicę tablic.
  • Obiekty są typowane ściśle i dynamicznie.
  • Wszystko jest obiektem, zmienne są po prostu referencjami do obiektów.
  • Pomimo tego, że wyjątki różnią się słowami kluczowymi, działają bardzo podobnie.
  • Masz dostęp do wbudowanego narzędzia dokumentującego (rdoc).

Różnice

W odróżnieniu od Pythona, w Rubim,…

  • Stringi są mutowalne (modyfikowalne).
  • Możesz tworzyć stałe (zmienne, których wartości nie zamierzasz zmieniać).
  • Istnieje kilka narzuconych konwencji (np. nazwy klas zaczynają się z dużej litery, nazwy zmiennych zaczynają się z małej litery).
  • Istnieje tylko jeden rodzaj kontenera list, jest nim tablica (Array), która jest modyfikowalna.
  • Stringi zawarte w podwójnych cudzysłowach umożliwiają składnię parsującą wyrażenia Rubiego, których wynik jest włączany do reszty zawartości stringa i łączenia z oddzielnych fragmentów ( "add " + "strings " + "together") Odpowiednikiem pojedynczych cudzysłowów są pythonowe r'raw strings'.
  • Nie ma klas w “starym” i “nowym” stylu, jest tylko jeden rodzaj klas. (Python 3+ nie ma tego problemu, ale nie jest w pełni kompatybilny z Pythonem 2).
  • Nigdy bezpośrednio nie masz dostępu do atrybutów. W Rubim wszystko to wywołania metod.
  • Nawiasy w wywołaniach metod są zazwyczaj opcjonalne.
  • There’s public, private, and protected to enforce access, instead of Python’s _voluntary_ underscore __convention__.
  • Istnieją słowa kluczowe public, private, protected aby określić zakres dostępu do metod, w odróżnieniu od Pythonowych konwencji z podkreśleniami _voluntary_, __convention__.
  • Zamiast dziedziczenia wielobazowego stosuje się domieszkowanie klas (mixin).
  • Możesz dodawać lub modyfikować metody wbudowanych klas. Oba języki pozwalają ci otwierać i modyfikować klasy w dowolnym momencie, ale Python nie pozwala na modyfikowanie klas wbudowanych, a Ruby nie zabrania.
  • Jest true oraz false zamiast True oraz False (oraz nil zamiast None).
  • Kiedy testujesz prawdziwość wyrażenia, tylko false i nil oznaczają nieprawdę. Wszystko inne oznacza prawdę (włączając 0, 0.0, "" oraz []).
  • Jest elsif zamiast elif.
  • Jest require zamiast import. Użycie jest to samo.
  • Komentarze umieszczone nad fragmentem kodu (Pythonowe docstringi umieszcza się pod nazwą metody) są używane do generowania dokumentacji.
  • Istnieje wiele skrótów, które pomimo tego że wymagają się nauczenia i zapamiętania, sprawiają, że praca z Rubim jest przyjemna i produktywna.
  • Nie ma możliwości do wycofania ustawionej raz zmiennej (jak Pythonowe wyrażenie del). Możesz zresetować zmienną na nil, umożliwiając odzyskanie pamięci po starej wartości, ale zmienna pozostanie w tabeli symboli tak długo jak jest w zasięgu.