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+
W trakcie działania kodu na pewno zauważyliście że pojawiały nam się
błędy albo jakieś wyjątki i w ruby mamy generalnie
dwa typy błędów błąd składni i wyjątek błędy
składni są zrobione na poziomie kodu i nie możemy uruchomić kodu
jeśli taki błąd powstał załóżmy że stworzy
sobie jakieś jakąś pętlę each która
coś będzie robiła na przykład będzie wyświetlała i
ale nie domknę jej czyli nie dam enda
dam end ale tutaj go wykomentuję czyli on będzie zupełnie niedostępny uruchomię
ten kod i dostanę syntax error
unexpected end of input tu
expecting end mamy tutaj że oczekiwał jakiegoś zakończenia czyli ten
kod po prostu się nie uruchomi bo syntax error nam na to nie pozwala ale
są pewne błędy których nie jesteśmy w stanie wykryć
wcześniej one są wykrywane dopiero w trakcie działania kodu i niespodziewanie
w jakiś sposób przerywają nam działanie kodu zróbmy sobie coś takiego
że x wynosi 10 podzielone przez 0 możemy
uruchomić kod ale dostaniemy pierwszy nasz taki błąd który
jest wyjątkiem czyli że divided by zero tak mamy błąd dzielenia
przez 0 w tej chwili mieliśmy jedną linijkę nie zauważyliśmy że kod
się w sumie wykonywał ale gdybyśmy na przykład zrobili
x równa się gets to i
i poprosilibyśmy użytkownika by podał nam
jakieś x no to zrobimy sobie puts give me
number następnie zrobili że chcemy
wyświetlić wynik dzielenia czyli na przykład 10
przez to x to kod się zacznie wykonywać normalnie
podamy jakąś liczbę niestety to nasze 0 i teraz
dopiero dostaniemy ten wyjątek że nie wolno dzielić przez zero dlatego
powinniśmy taki błąd obsłużyć i do tego służy blok begin
rescue i end czyli zaczynamy od begin
to nam podpowiada ale ja sobie skorzystam tylko w takiej prostej
składni begin tutaj zrobię 10 podzielone przez x
i tutaj puts sobie zrobię albo może w ogóle zrobię
sobie jakąś nową zmienną typu a jest wynik 10 podzielone przez
x od użytkownika i tu mogę zrobić
rescue i po prostu wyświetlić put
can't invite przez
0 tutaj o nawet
może go uruchomimy ten kod najpierw i teraz jeśli podam 0
to się pojawi błąd can't divide by
0 teraz chciałabym jednak dokładnie podać
jaki błąd wystąpi jakiego błędu się spodziewam no bo dosyć
celowo obsłużyłam can divide by 0 czyli będzie to 0
division error
jeśli taki błąd się pojawi zresztą możemy
go sobie przypomnieć że się pojawia jeżeli wyciągnę to z powrotem przed
wykonywanie kodu jak dam 0 to
zobaczymy zero division error czyli dokładnie ten błąd chcę tutaj
mieć zero division error czyli
teraz mój kod dokładnie się spodziewa że ma zadziałać jeżeli będzie tu podany
po prostu będzie tu podane 0 czyli tu zero
rzeczywiście nadal ten rescue złapał nam ten konkretny błąd
którego się spodziewamy a co jeżeli zapomnę to i czyli
po prostu wezmę sam gets no dobra to weźmy sobie jakąś liczbę nawet
poprawną na przykład jeden dostaje nowy błąd jest to type
error że string no nie można podzielić dziesiątki przez wartość typu string
type error mogę tutaj dodać jako kolejny rescue
error i nowy komunikat na
przykład format kiedy
ten kod uruchomię ponownie dam jakąś wartość dostanę
błąd dokładnie ten który obsłużyłam type error dodatkowo
mogę sobie te różne błędy obsługiwać
w taki sposób że jeśli takiego błędu jeszcze nie będę znała to wykona
się po prostu else i w tym elsie czy
po prostu w samym resque może nawet bardziej o tak tu będzie rescue
rescue wszystko inne i tu na przykład puts
new error i gdybym nie miała tego
type error znowu to nasz błąd dotyczący typu
po uruchomieniu kodu i podaniu wartości trafi
do po prostu tego ostatniego bloku który łapie wszystko co
więcej nasze błędy możemy wymieniać po prostu po przecinku więc
tu sobie type error wymienię w jednej linii a tu
dam po prostu just error i kiedy
wykonam znowu ten kod podam jakąś liczbę na przykład jedynkę
dostanę just error po prostu obsłużyłam dwa błędy na
raz zostawię sobie tu jeszcze kod że mam rescue
puts new exception tylko
co właściwie robi nam ten exception tutaj otóż jeżeli
nie wiemy jakiego błędu się spodziewamy to dostaniemy błąd z
tak zwanej standard error klasy i
to nie jest za dobre to znaczy powinniśmy raczej z góry zakładać albo z góry przynajmniej
przewidywać z jakimi błędami się spotkamy a najlepiej w ogóle te błędy wcześniej
obsłużyć spójrzmy jeszcze na jedną rzecz możemy
też uzyskać wiadomość jaka pojawia się przy pojawieniu błędu czyli
wrócę sobie do etapu w którym miałam zero division error tu
miałam zamianę na liczby całkowite i
tu za pomocą operatora takiego strzałkowego mogę
oczekiwać jakiegoś błędu konkretnego i ten błąd sobie do zmiennej
e przypisać a następnie zrobić puts e kropka
message i
w ten sposób kiedy pojawi się ten błąd to zobaczę
co konkretnie mi się zdarzyło z tym błędem czyli jak tutaj będę
miała 0 to pojawi mi się błąd divided by zero
taki który ja go nie napisałam a który pojawia
się w wyniku zapytania jaki tu jest błąd jaką ma wiadomość
spróbujmy kolejną rzecz zróbmy sobie jakąś prostą funkcję
i od razu zróbmy w niej obsługę błędu czyli stworzyć sobie funkcję która będzie
się nazywa divide divide i
będzie przyjmowała jakiś parametr numer oraz jakiś
element przez który dzielimy dwa takie parametry następnie
zróbmy blok który będzie obsługiwał błędy czyli ja sobie robię begin tutaj
sobie zrobię numer podzielony przez ten div
następnie nie podam do
końca jaką konkretną chcę złapać klasę błędu a
zamiast tego tutaj exception pobiorę od razu wiadomość to
jest dowolna zmienna możemy ją zapisać e ja osobiście lubię ten zapis e bo jest bardzo
krótki ale exception też jest w porządku i tak akurat podpowiedział mi edytor
więc zostaniemy na moment z zmienną exeption i zrobię sobie tak tak puts
podam divide numer
10/3 na przykład pod spodem zrobię sobię puts divide
na przykład 12 przez 0 i na końcu jeszcze
inny żeby kolejny błąd się pojawił divide na przykład 12
podzielone przez 2 ale w stringu więc zapisuje
uruchamiam nasz kod i tutaj ach
no tak takiego błędu w ogóle nie obsłużyłam a
nasza funkcja oczekuje dwa argumenty a nie od razu dzielenie
więc teraz uruchamiam i w
pierwszym wypadku 10/3 zwracam 3 w kolejnym
po prostu dostaniemy divide by zero a w ostatnim string can't be
tutaj zmieniony na liczbę całkowitą to
nam pokazuje że w sumie wypadałoby sobie to message zamienić
też na 1 styl czyli na przykład tutaj capitalize
teraz te wszystkie metody będą
z dużej litery w miarę spójnie wyglądać jeśli mamy jakiś błąd zobaczmy
sobie jeszcze jedną rzecz wspominałam wam że jeśli nie podajemy z jakiej
klasy oczekujemy błędu to będzie to tak zwany standard error w
ogóle łapanie takiego błędu nie jest najlepszą praktyką dobrze
jest spodziewać się z jakiego typu błędem mamy do czynienia i
dopiero już naprawdę ewentualnie robić łapanie ostatecznego efektu tutaj
jeszcze chciałabym wam pokazać że jeśli rzeczywiście chcemy złapać
wyjątek którego się nie spodziewamy no to możemy zrobić to w jednej
linii na przykład error zróbmy sobie each
jakiś blok i puts i
no i tutaj mamy jakiś błąd no
na 100% nie mamy tej tablicy więc spróbuję sobie złapać
jeszcze ten błąd puts
nope no to zobaczmy widzimy
że błąd wynikający z tego że ta tablica nie jest w ogóle utworzona i nie możemy wykonać
tego bloku został złapany i wyświetlił napis nope żeby
to widzieć że ten kod w ogóle dalej poleciał to jeszcze dodam yay
my code is running czyli
kod dalej się wykonuje możemy jeszcze
sobie zobaczyć coś takiego jak podnoszenie wyjątku znaczy sami możemy zmusić
kod żeby wywołał wyjątek więc ja stworzę sobie
może tą powyżej część kodu zakomentuję
żeby nam nie przeszkadzała stworzę sobie na jakiś tam
tekst start program trzy
kropki a następnie za pomocą raise wywołam
błąd będzie to standard error co
więcej mogę też podać z jakim komunikatem ma się wywołać więc ja sobie podam
your code is invalid to
będzie bardzo miły błąd by się uśmiecha i teraz puts
end to zobaczmy jak to się wykona wykona nam
się start programu podniesiemy wyjątek ale podnieśmy wyjątek więc już
żadne puts end się nie pojawi nie pojawi nam się żaden kod poniżej ponieważ ten
wyjątek zachowuje się jak każdy inny błąd który jest wyjątkiem czyli przerywa działanie
programu mimo tego że dostaliśmy komentarz którego się całkowicie spodziewaliśmy
czyli your code is invalid więcej o wyjątkach możecie
poczytać w dokumentacji do czego was gorąco zachęcam
kilka_bledow · 1 min
puts "Give me number"
x = gets
begin
a = 10/x
rescue ZeroDivisionError, TypeError
puts "Just error"
rescue
puts "New Exeption"
endblad_wiadomość · 2 min
puts "Give me number"
x = gets.to_i
begin
a = 10/x
rescue ZeroDivisionError => e
puts e.message
endblad_funkcja · 3 min
def divide(num, div)
begin
num/div
rescue => exception
exception.message.capitalize
end
end
puts divide(10, 3)
puts divide(12, 0)
puts divide(12, "2")blad_w_jednej_linii · 4 min
arr.each { |i| puts i } rescue puts 'NOPE!'
puts "Yay, my code is running"podnoszenie_wyjatku · 5 min
puts "Start program..."
raise StandardError, "Your code is invalid :D"
puts "End"zlapanie_wyjatku
puts "Give me number"
x = gets.to_i
begin
a = 10/x
rescue ZeroDivisionError
puts "Can't divide by 0"
end