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
zamiastpydoc
). - 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ą pythonower'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
, andprotected
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
orazfalse
zamiastTrue
orazFalse
(oraznil
zamiastNone
). - Kiedy testujesz prawdziwość wyrażenia, tylko
false
inil
oznaczają nieprawdę. Wszystko inne oznacza prawdę (włączając0
,0.0
,""
oraz[]
). - Jest
elsif
zamiastelif
. - Jest
require
zamiastimport
. 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ą nanil
, umożliwiając odzyskanie pamięci po starej wartości, ale zmienna pozostanie w tabeli symboli tak długo jak jest w zasięgu.