loading presentation...
Ruby -- podstawy

język zorientowany
na programistę
Tomek "Tomash" Stachewicz
Szkolenie Ruby On Rails, 2012-04-19
Ruby jest:
- wolny: jeden z najwolniejszych na świecie
- bez kompilatora: błędy dopiero at-runtime
- bez sprawdzania typów
- bez IDE: brak podpowiadania składni
Jak to?
Zatem co powoduje, że na Ruby przesiadają się najlepsi programiści z Javy, PHP i innych języków?
Zorientowanie na programistę

Matz o Ruby
"Wierzę, że celem naszego życia jest, przynajmniej częściowo, być szczęśliwym. W oparciu o tę wiarę zaprojektowałem Ruby tak, by uczynić programowanie nie tylko łatwym, ale i przyjemnym. Pozwala on skoncentrować się na kreatywnej stronie programowania i zmniejszyć stres."
DHH o Ruby i Rails
"Ruby is, more than anything else, a language for writing beautiful code that makes programmers happy."
"Rails, then, is an attempt to mold the beauty and productiveness of Ruby into a solution for Web applications. We've sought to adhere to the same core principle that guided the development of Ruby: make the programmer happy!"
Bzdury?
"This might all sound mighty fluffy, but only until you recognize that the single-most important factor in programmer productivity is motivation. And, happy programmers are certainly motivated programmers. Thus, if you optimize for happiness, you're optimizing for motivation, which ultimately leads to an optimization for productivity."
przyjemność != prostactwo
Ruby nie jest językiem prostym.
Ruby wspiera wiele zaawansowanych technik jak metaprogramowanie czy programowanie funkcyjne.
Ruby jest językiem zbudowanym wokół "zasady najmniejszego zaskoczenia".
Ruby jest
- w pełni obiektowy
- dynamiczny (bardzo)
- refleksywny
- imperatywny
- i funkcyjny zarazem
Proof or GTFO!
IRb: Interactive Ruby
Konsola REPL dla języka Ruby
Bawimy się
- Zmienne i podstawowe obiekty (typy)
- Tablice i tablice asocjacyjne (słowniki)
- Funkcje/metody
- Bloki, iteratory, domknięcia - pr. funkcyjne
- Pętle (while, until, each, upto)
- Łańcuchy (String) i Symbole
Obiektowość
- Wszystko jest obiektem
- zmienne: lokalne, @instancyjne, @@klasowe, $globalne, Stałe
- Pole == metoda, sygnały, aliasy
- self
- Dziedziczenie, moduły i miksiny
Duck-typing
Jeśli chodzi i kaczka i kwacze jak kaczka, traktujmy to jak kaczkę
Programowanie zorientowane na interfejs, a nie typ
Enkapsulacja
zmienne instancji domyślnie prywatne
konwencja
def zm; @zm; end # getter
def zm=(x); @zm=x; end # setter
makra
attr_reader, attr_writer, attr_accessor
Dynamiczność Ruby'ego
Każdą klasę można rozszerzyć, każdą metodę można nadpisać
ryzyko: monkeypatching
Skoro mamy takie możliwości, to
Boilerplate == zło
OOP + metaprogramowanie + dynamizm ==
brak przyzwolenia na boilerplate
Boilerplate is any text that is or can be reused in new contexts or applications without being changed much from the original. Many computer programmers often use the term boilerplate code. A legal boilerplate is a standard provision in a contract.
Przykład redukcji Boilerplate
na przykładzie naszej aplikacji
Fajny software napisany w Ruby (nie Rails)
Showoff
ta prezentacja jest w Showoff
RubyRep
najprzyjemniejszy w użyciu soft do replikacji baz danych
Rake
"ruby make", automatyzacja zadań o przyjemnej składni
Sinatra
mikroframework do prostych aplikacji webowych
Backup
bezbolesne tworzenie, zarządzanie i uruchamianie przepisów backupu
That's all, folks!
pytania?