od Podstaw
5 godz. 10 min · Ruby · Full-stack i Programowanie
Małgorzata ŁyczywekSoftware engineerW pierwszych lekcjach Kursu przejdziemy do omówienia konfiguracji środowiska, by następnie poznać tryb interaktywny Rubiego. Stworzymy pierwsze programy oraz poznamy składnię języka. Dowiesz się między innymi tego, czym są zmienne, jakie istnieją typy danych, jak przekazywać własne dane do programu i jak na nich operować.
Programy oraz instrukcje potrafią w znaczny sposób przyspieszyć i ułatwić pracę w Ruby. Mogą wykonywać za nas powtarzające się czynności i podejmować decyzje. Dlatego też kolejnym, naturalnym krokiem nauki języka Ruby jest poznanie struktur sterujących kodem, takich jak instrukcje warunkowe if, case, pętle while, until, for, each czy inne iteratory.
W kolejnych lekcjach poznasz następne, bardziej rozbudowane zagadnienia. Będziemy korzystać z zaawansowanych struktur danych i metod, jakie możemy na nich wykonywać. Są to metody wbudowane, a więc dostępne domyślnie w Ruby. Przejdziemy do pisania własnych metod dbając, by nasz kod był zgodny z regułą DRY. Poznamy zagadnienia związane ze strukturami specyficznymi dla języka Ruby a także praktykami, jakie są w tym języku stosowane.
Dane do programów najczęściej dotaczane są z zewnętrznego źródła, jak na przykład pobierane z pliku. Przekonasz się jak wykonywać operację na plikach w Ruby - odczytywać, zapisywać, a także w jaki sposób radzić sobie z dużymi plikami w wydajny sposób. Dowiemy się również co zrobić, gdy nasz program spotka niespodziewany błąd. Zajmiemy się przewidywaniem i zapobieganiem błędów w kodzie.
Kolejna, najbardziej obszerna część kursu to dokładne omówienie podstaw paradygmatu programowania obiektowego. Nawet jeżeli wydaje Ci się to bardzo skomplikowane - niedługo wszystko stanie się jasne. Programowanie obiektowe pozwala nam na lepsze odwzorowanie rzeczywistości, czyli tworzenie bardziej praktycznego kodu. Przyjrzymy się jak obiektowość jest realizowana w Ruby oraz jak tworzyć obiekty, klasy i jakich zasad warto przestrzegać. Na koniec dowiemy się jak rozszerzać funkcjonalność istniejących klas za pomocą modułów.
Ten kurs został przygotowany z myślą o wszystkich, którzy chcą zacząć naukę programowania Ruby od podstaw. Stworzono go szczególnie dla osób, które z pisaniem kodu nie miały jeszcze styczności. Nie jest wymagana żadna wcześniejsza wiedza na temat programowania. Jeśli chcesz szybko nauczyć się programowania i myślisz, że twoim kierunkiem jest tworzenie aplikacji webowych, to Ruby jest świetnym wyborem na start.
2.6+
Naszą poprzednią lekcję skończyliśmy z takim kodem mamy klasę student
accessor widzimy tutaj konstruktor nasze dwie metody
instancji co by było gdybym chciała ten numer karty
stworzyć jako osobną metodę instancji która generuje nam ten kod stworzę
sobie taką metodę która będzie się nazywała powiedzmy
generate card number stworzę ją card
number nawet napiszę pełną nazwę i będzie
się składała może po pierwsze z dwóch albo
w jednej litery na start więc sobie zrobię jakieś tam start wykorzystam
sobie nasze zakresy czyli sobie wygeneruje zakres od a do
dużego z następnie oczywiście to
array żeby mieć całą naszą tablice z literami od a do z i
metodę którą możliwe widzimy tutaj pierwszy raz czyli shuffle to
po prostu przesortuje te litery a my weźmiemy tylko pierwsze czy
jak one będą już pozmieniane tutaj w
losowej kolejności ustawione weźmiemy sobie pierwszą literę z tego losowania następnie dodamy sobie
naszą sekwencję tak jak ona to była wcześniej generowana czy jakąś tam wyciętą sekwencję
tutaj sobie zrobię numbers i nasz
numer może znowu będzie się kończył jakimś stopem tym razem kodem
literowym z małych zrobię sobie od a do z
do tablicy i znowu shuffle
pierwszy element czyli teraz nasz
numer karty będzie miał jakąś tam strukturę chcemy to sobie zwrócić
jako całość czyli sobie zrobię start o tak całość
po prostu jako jeden długi ciąg znaków jako string czyli będzie
sobie to start potem
od razu b bez żadnej spacji numbers i
na końcu albo będą z podkreślnikami
o żeby było widać że to są osobne różne części i na końcu dostępny będzie hash
stop w ten sposób nasz numer karty będzie składał
się z tych elementów start numer stop no i musimy tutaj
do numeru karty to wygenerowanie przypisać kiedy
zapiszę sprawdzę sobie naszego johna uruchomię
a jeszcze nic nie zrobiłam wyświetlania to może zrobimy john kropka
show i od razu john weźmiemy
jego numer karty czyli numer
karty i wygeneruje my widzimy że tutaj karta zaczyna
się od g potem mamy nasz ciąg cyfry i na końcu literkę
i ta metoda jest też dostępna w ogóle jako
metoda klasy john więc mogłabym sobie metoda obiektu john oczywiście
zrobić po prostu generate number i wyświetlić
nowo wygenerowany jakiś drugi numer taka metoda
nie powinna być dla nas dostępna z zewnątrz tak jak nie chcemy by numer karty był
do odczytu tak utworzyliśmy tylko i wyłącznie reader tak metoda która
tutaj jest dostępna nie chcemy by była zupełnie publiczna do
tej pory wszystkie nasze metody w klasie są po prostu publiczne jeżeli
chcemy ograniczyć ich widoczność musimy skorzystać z mechanizmu nazywanego hermetyzacją
inaczej enkapsulacja czy kapsułkowanie po prostu
ukrywanie części jakiejś implementacji części naszego kodu taki mechanizm
jest w ogóle bardzo przydatny w życiu codziennym czy w zyciu takim codziennym
programisty oczywiście żeby stworzyć klasy które
mają konkretne zastosowania konkretne metody mają zastosowanie i nie chcemy
by były dla nas zawsze dostępne chcę by ta metoda pod
spodem była dla nas prywatna więc korzystamy ze słowa kluczowego provate tutaj
sobie zrobimy enter i teraz ta metoda nie będzie już z zewnątrz widoczna
tutaj zapisuje jak widzicie pojawił mi się błąd ponieważ
próbuję się dostać do prywatnej metody która generuje
nam numer karty nadal jednak
sam numer karty jest widoczny ponieważ korzystamy z atrybutora read
oprócz słowa kluczowego private mamy bardzo podobne słowo kluczowe protected
mechanizm jest bardzo podobny jak private chcemy mieć
dostęp do metody ale nie chcemy mieć jego dostępnego publicznie chcemy
żeby drugi obiekt mógł również coś odczytać z danej metody czyli załóżmy
że chciałabym by mój użytkownik czy mój student miał jakiś wyniki egzaminu
i mógł być porównany z drugim studentem zrób więc małpa
exam result nasza zmienna instancji
i będzie one losowana w zakresie od
zera do 100 czyli nasz egzamin jakieś tam procentowo
od 0 do 100 można wygrać i tutaj ten wynik chcemy żeby
nie był tak po prostu do odczytu chcemy żeby był tylko widoczny wewnątrz
tej klasy więc dodam go tutaj jako też reader
że można go odczytać nie można go modyfikować i
sobie zrobię exam result teraz będziemy mogli go odczytać
ale nie będziemy mogli go zmodyfikować no bo to powinno być gdzieś z zewnątrz przypisane
u nas akurat jest losowane w kolejnym kroku definiuję sobie metodę
która pozwala porównać dwóch studentów czyli compare i
podać drugiego użytkownika drugą osobę drugiego studenta więc ja zrobię po prostu drugi
user będzie compare user i będzie można wziąć małpa
exam result właśnie sprawdzanego studenta i porównaj ten wynik
z egzaminem drugiego użytkownika czyli user kropka exam
result bo drugi obiekt też powinien mieć jakiś wynik i
teraz mogłabym tu dać oczywiście if if user aktualny
student jego wynik jest wyższy niż
naszego drugiego przypisanego to ja sobie zrobię zwróć imię małpa
name i else możemy
zwrócić tego drugiego username i
end no ten zapis jest dosyć długi a my chcemy tu zrobić sobie krócej
więc skorzystamy z operatora trójargumentowego czyli
sobie zrobię małpa exam result jest większy niż user
exam result i daje tutaj znak zapytania
jeżeli rzeczywiście ten wynik egzaminu właśnie
sprawdzonego studenta jest lepszy no to zwracam jego
imię w przeciwnym wypadku zwracam user name teraz
tą metodę mogę sobie wykonać sprawdzić czy
john w porównaniu do anny
miał lepszy wynik tak tutaj mamy dostępność tu
widzimy mamy dla każdego tego obiektu powstanie jakiś wylosowany
wynik egzaminu te dwa obiekty możemy porównać bo na john wywołamy metodę compare
z podanym userem jako user trafi nam anna no
to zapisuje uruchamiam widzimy że anna miała
lepszy wynik może przyda nam się podejrzeć kto miał jaki wynik
czyli sobie sprawdzę john kropka exam
result tylko do odczytu nie możemy go w ogóle napisać i od razu annę
też zobaczę zapiszę ponownie tutaj oczywiście od nowa się wygenerowały te liczby
i zobaczymy że studentka
anna ma wynik 73 a
a nie wyświetliłam johna a johna wyświetliłam wyżej tylko i wyłącznie exam result
no to widzimy 50 i 73 tutaj jakbym zrobiła kropka
exam result zapiszę uruchomię ponownie to teraz mamy że john
był lepszy a anna miała 27
wydaje mi się że jednak taka metoda nie powinno być widoczna po prostu
na zewnątrz ona powinna być jednak ukryta i być dostępna tylko dla wybranych użytkowników
dlatego nasz exam result powinien się pojawić jako
metoda protected czyli owszem inny obiekt może
sobie sprawdzić nawzajem wynik ale
my z zewnątrz nie powinniśmy móc tego zrobić czyli exam
result zapiszę sobie jako protected czyli protected
i tutaj dam definicje exam
result i będę zwracała exam
result kiedy ktoś mnie zapyta o wynik egzaminu zapiszę
wykonam porównanie nadal się wykonało czyli zwróciło nam
że anna ma lepszy wynik ale już nie zrobię john kropka exam
result ponieważ pojawia mi się że protected
method exam result jest nam po prostu niedostępna ale drugi
obiekt może jak najbardziej odpytać czyli john
pytając drugi obiekt dwa obiekty mogą się ze sobą skomunikować a my z zewnątrz publicznie
sobie wyniku egzaminu nie wyświetlimy one są w pewien sposób utajnione
ale nadal dostępne między obiektami mam nadzieję że różnica między private
a protected jest dosyć jasna private jest
wyłącznie dostępny w danej instancji w danym obiekcie protected
pozwala na zobaczenie danej metody między dwoma obiektami
tej samej klasy