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+
Teraz porozmawiamy sobie o kolejnej rzeczy czyli o operacjach na plikach bardzo
często jest tak że chcemy skorzystać z danych które nie są dostępne w naszym programie chcemy je
sobie pobrać z pliku na początku tej lekcji stworzyłam sobie
plik który zawiera jakieś przykładowe zdania po prostu prosto z generatora lorem
ipsum stworzyłam sobie kilka zdań i pierwsza rzecz jaką
wam pokażę to otwieranie pliku możemy sobie stworzyć zmienną f która
będzie za pomocą już gotowej klasy file otwierała
nam plik i mogę podać nazwę file
kropka txt kiedy
spróbuję sobie zobaczyć ten plik to
pojawi mi się klasa file po prostu żyję sobie taki
wystąpienie obiekt klasy file no dobrze no
to chciałam tak na prawdę odczytać zawartość tego pliku w tym celu musiałabym na
tym obiekcie wykonać metodę read i
teraz kiedy uruchomię ten kod zobaczę
kolejne zdania oczywiście też znaki specjalne tutaj
się pojawiają gdybym z kolei użyła puts zamiast metody p uruchamiamy
plik to zobaczę kolejne zdania bez żadnych znaków specjalnych
jeżeli w ten sposób otwieram plik muszę
pamiętać żeby go zamknąć dlatego w kolejnej linii dodaję f kropka
close żeby
uniknąć takiej sytuacji i nie zapomnieć o zamknięciu pliku warto sobie
otworzyć plik za pomocą całego bloku czyli prostu zrobić
file kropka open nazwa naszego pliku w
moim wypadku jest to file kropka txt następnie
robię do tu wstawiam zmienną
sterującą która będzie pamiętała o otrzymaniu pliku w
środku mogę ten plik sobie wyświetlić czyli zrobić puts f read
i mam end jak pamiętamy z poprzedniej lekcji tutaj
się kończy zasięg zmiennej f więc za nas blok już zamknie
ją i nie musimy pamiętać o żadnym zamykaniu i teraz znowu wyświetliło
nam zawartość naszego pliku możemy użyć kilku
różnych trybów odczytu pliku zazwyczaj jeżeli nie podam żadnej
tutaj wartości oznacza to że po prostu otwieram plik do odczytu możemy
jednak też otworzyć do zapisu do dodania kolejnej wartości mamy kilka takich trybów
utwórzmy sobie przykładowy plik do zapisu znowu
używam file open podaję nazwę pliku który chcę otworzyć ponieważ
nie chcę nadpisać mojego poprzedniego pliku stworzę sobie new file
z rozszerzeniem txt stworzę znowu tą
zmienną która będzie mi sterować ale
tutaj po przecinku muszę dostarczyć informacje w jakim trybie będzie
będzie używany ten plik więc używam w jak write i znaczy
to tyle że jeżeli ten plik istnieje zastąp jego zawartość
nowym tekstem który ja zapiszę a jeżeli nie istnieje to utwórz taki plik
takiego pliku nie ma więc plik mi się otworzy i mogę tutaj zrobić
f kropka puts tak jakbym chciała wyświetlać ale
to wyświetlanie zadziała inaczej po prostu wyślę nam ten plik do tą
zawartość te zdania prosto do pliku czyli zrobię sobie jakieś zdanie na
przykład hello world następnie
f puts hello
ruby a następnie jeszcze może jedno
puts programming is
awesome teraz po wykonaniu tego
bloku cała zawartość zapisze nam się do nowego pliku jeżeli
bym go wykonała to tutaj nic mi się nie wyświetli tylko
wszystko zostało zapisane do pliku mogę ten plik teraz odczytać
znowu za pomocą file kropka open podaj
nazwę tego nowego pliku new file jeżeli
nie podam żadnego sposobu na odczyt normalnie byłoby to r ale r jest wartością
domyślną więc możemy ją pominąć wezmę sobie tą
zmienną sterującą mogę teraz inaczej nazwać to jest tylko nazwa dla nas i
file.read tu oczywiście
muszę to w jakiś sposób wyświetlić to wyświetlę sobie metodą p ach
new file miałam o nazwie txt jeśli nie podałam tego no to
takiego pliku nie ma nie było co otworzyć teraz już widzimy hello
world hello ruby programming is awesome czyli nasz plik
zapisał się prawidłowo warto
pamiętać że jeżeli wykonujemy naszą metodę write
a nasz plik istnieje to używając tylko i
wyłącznie litery w nadpiszemy sobie zawartość tego pliku czyli jeśli
teraz zrobię hello world to
wykonując ten kod stracę całą zawartość poprzedniego pliku i
znowu robiąc odczyt open mój
new file po prostu robiąc
file.read
nasz plik został skrócony jeżeli chcemy uniknąć
sytuacji w której nadpiszemy sobie plik możemy użyć
dodatkowo modyfikatora x który oznacza exclusive i w momencie w którym już ten plik istnieje
new file pojawi nam się błąd że nie można takiej
operacji wykonać bo inaczej nadpiszemy plik czyli wykonajmy plik zobaczymy
że jest rzeczywiście błąd widać file exist czy nie pozwala
nam utworzyć takiego pliku możemy
odczytać całą zawartość za jednym zamachem czyli możemy na przykład utworzyć zmienną
content która będzie otwierała nam plik od
razu do odczytu czyli zróbmy sobie file read zamiast open i
podamy plik do odczytu u mnie to będzie file txt w którym przechowuje
jakiś przykładową jakąś przykładową treść i
teraz muszę tą zmienną jeszcze wyświetlić content i
pojawia mi się w tej lorem ipsum które mam w środku mogę
też ten sam plik otworzyć inaczej czyli po prostu zrobić file kropka
open podać nazwę file
txt w sposób który już był widziany oczywiście odczytaj tą zawartość
w ten sam sposób czyli f
w środku zrobić p f read
ten sposób jest dobry jeden i drugi jeżeli mówimy o małych plikach plikach
które mają kilka kilkanaście linii są nie za duże co
jeśli jednak będziemy chcieli pracować z plikiem o naprawdę dużym rozmiarze w takim
wypadku potrzebujemy pętli for each czyli chcielibyśmy
sobie żeby duży plik jakiś file otworzyć i wyświetlać
kolejne linie zamiast całego pliku na raz czyli możemy dać for each
na pliku podać nazwę naszego pliku załóżmy
że to byłby bardzo długi plik zawierający bardzo wiele
linii tekstu czy byłby to po prostu ogromny plik z kolejnymi wierszami tabeli
jakiejś w csv więc u mnie na razie to będzie ten nadal ten testowy
plik file txt i teraz dla
każdej linii nawet sobie tak nazwę tą zmienną lokalną dla
każdej linii wykonuje jakąś operację czy to będę ją sczytywać czy będę ją
w jakiś sposób obrabiać dzielić na kolejne tablice w
tym wypadku będziemy otwierać ale po prostu w tym bloku tutaj chcielibyśmy
wykonać jak najwięcej operacji żeby całego pliku nie wczytywać do pamięci komputera
żeby móc to wykonać jak najbardziej optymalnie
czyli ja tu sobie po prostu będę wyświetlać line kolejną i rzeczywiście
kolejne linijki mi się wyświetliły taka
ciekawostka że w ruby mogę też wykonać for each with
index czyli dla każdego elementu mogę sprawdzić też indeks
linii czyli która to jest linijka czyli line muszę podać też id może
czy tam numer i teraz mogę wyświetlić sobie coś
takiego zacznę od numeru linii czyli
numer i dalej dopiero będzie moja
linia teraz
jak ten kod wykonam to zobaczymy sobie że pierwsza linia jest pusta
ponieważ tak jak może pamiętacie kiedy wyświetlałam za pomocą metody
p pojawił mi się najpierw znak enter w pliku potem pierwsza linia
to jest lorem druga jakieś kolejne zdanie trzecia i tak po kolei możemy
to zrobić jeszcze prościej bez with index chociaż ta metoda jest jak najbardziej
rubiowa i można z niej korzystać jest czytelna ale ruby też posiada
pewną zmienną która niektórym może przypominać perla
ja sobie dolar kropka i potem możemy
wymienić naszą linię line tutaj ten ta spacja
nie jest potrzebna chciałam tylko żeby była widoczna kropka więc jeżeli tą zmienną tą spację
usunę to oczywiście nadal to będzie jak najbardziej dla ruby zrozumiałe że to
jest specjalna zmienna która przechowuje numer linii no i mamy
w tym wypadku on nam wraca od jedynki czyli jeden druga
linia trzecia linia czwarta linia i tak po kolei tutaj jeszcze
dla upewnienia się pokaże to p chyba rzeczywiście przechowuje specjalny
znacznik nowej linii rzeczywiście mój plik zaczął się od entera a nie od zdania to
takie totalne podstawy pracy z plikami pliki csv zresztą można traktować zupełnie
tak samo czyli jako zwykłe pliki tekstowe tutaj gdyby był csv a
mielibyśmy taki plik to można by go spokojnie otworzyć i
zobaczyć w rubym
odczyt
f = File.open('file.txt')
puts f.read
f.closezapis · 1 min
File.open("new_file.txt", "w") do |f|
f.puts "Hello world"
f.puts "Hello Ruby"
f.puts "Programming is awesome"
end
File.open("new_file.txt") do |file|
p file.read
endexclusive · 2 min
File.open("new_file.txt", "wx") do |f|
f.puts "Hello world"
end
File.open("new_file.txt") do |file|
p file.read
endforeach · 3 min
File.foreach("file.txt") do |line|
puts line
end
File.foreach("file.txt").with_index do |line, num|
puts "#{num} - #{line}"
end
File.foreach("file.txt") do |line|
p $., line
end