Ruby je dobro poznati programski jezik. Cilj mu je poboljšati jednostavnost i produktivnost. Također je potpuno objektno orijentirani programski jezik. Osim toga, Ruby dolazi s elegantnom sintaksom koja je prirodna za čitanje i jednostavna za pisanje.
Svako programiranje zahtijeva upravljanje različitim tipovima podataka. Tip podataka opisuje određenu klasu podataka. On govori stroju kako bi trebao rukovati podacima u programu. Tipovi podataka ključni su za određivanje onoga što se može učiniti s podacima (uključujući operacije koje se mogu izvesti). U ovom vodiču ćemo zaroniti dublje u tipove podataka dostupne u Rubyju. Također ćemo istražiti dinamičko tipiziranje. Koristeći ovu značajku, Ruby može automatski odrediti tip podataka varijable bez njezinog eksplicitnog deklariranja. Počnimo!
Preduvjeti
Za vježbanje i implementaciju koraka prikazanih u ovom vodiču, trebat će vam sljedeće komponente:
- Ispravno konfiguriran Linux sustav. Saznajte više o postavljanju osobnog Ubuntu poslužitelja na CloudSigma.
- Ispravno konfigurirano Ruby razvojno okruženje. Pogledajte službenu dokumentaciju o instaliranju Rubyja na Ubuntu (pomoću APT-a).
Tipovi podataka u Rubyju
Ruby sadrži sve uobičajene tipove podataka na koje ćete naići u bilo kojem programskom jeziku: cijele brojeve, decimalne brojeve, nizove znakova, polja, simbole, hasheve itd. Zatim ćemo pružiti pregled rada s različitim tipovima podataka u Rubyju.
Korak 1 – Cijeli brojevi
Slično kao u matematici, cijeli brojevi u računalnom programiranju su cijeli brojevi. Vrijednost može biti pozitivna, negativna ili 0. Raspon vrijednosti je sljedeći:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
Vrijeme je da isprobate cijele brojeve u Rubyju. Prvi primjer je ispisivanje jednostavnog cijelog broja na ekranu:
|
1 2 |
print 99 print "\n" |
Zatim ćemo raditi s varijablom cijelog broja. Ovdje varijabla sample_int sadrži vrijednost cijelog broja (99) i print funkcija ispisuje vrijednost varijable na ekranu:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
Također možemo raditi matematičke operacije s cijelim brojevima. Sljedeći primjer prikazuje jednostavno zbrajanje dvaju cijelih brojeva:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
Kada radimo s velikim brojevima, često koristimo zareze (,) kako bismo ih lakše čitali. Na primjer, jedan milijun (1000000) piše se kao 1,000,000 radi bolje čitljivosti. Iako je korištenje zareza zabranjeno, Ruby dopušta korištenje podvlaka ( _) kao graničnika. Pogledajte sljedeći primjer:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
Korištenje podvlaka poboljšava čitljivost koda, posebno kada se radi o velikim vrijednostima cijelih brojeva.
Korak 2 – Brojevi s pomičnim zarezom
Broj s pomičnim zarezom (ili skraćeno float) predstavlja realni broj. Slično matematičkoj definiciji, realni brojevi mogu biti racionalni ili iracionalni. U Rubyju, float je u osnovi broj koji sadrži decimalnu točku.
Pokušajmo ispisati float vrijednost na ekranu:
|
1 2 |
print 55.66 print "\n" |
Sljedeći primjer prikazuje deklariranje float varijable:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
Također možemo izvoditi različite matematičke operacije na float vrijednostima i varijablama. Sljedeći primjer prikazuje jednostavno zbrajanje dvaju float brojeva:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
Što ako zbrojimo float i cijeli broj? Rezultirajuća vrijednost bit će float. U sljedećem primjeru, unatoč tome što je 55.0 cijeli broj, tretira se kao float:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
Korak 3 – Boolean
Booleove vrijednosti predstavljaju istinitosne vrijednosti logičke grane matematike. U Rubyju su Boolean tipovi podataka predstavljeni dvjema vrijednostima: true i false:
-
Veće od
-
100 > 99: true
-
99 > 100: false
-
-
Manje od
-
500 < 999: true
-
999 < 500: false
-
-
Jednako
-
10 == 10: true
-
9 == 99: false
-
Slično brojevima, također možemo pohraniti true ili false vrijednost u varijablu. Sljedeći primjer prikazuje ovu značajku:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
Step 4 – Stringovi
U programiranju, string je predstavljen kao slijed znakova (slova, brojevi i simboli). U Rubyju, stringovi postoje unutar jednostrukih navodnika ( ') ili dvostrukih navodnika ( "). Već smo detaljno pokrili korištenje stringova u Rubyju, pa će ovo biti kratak odjeljak.
Sljedeći primjer je osnovni hello world program u Rubyju:
|
1 |
print "hello world!\n" |
Također možemo pohraniti stringove u varijable. Sljedeći primjer također uključuje spajanje stringova:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
Step 5 – Polja
Polje je struktura podataka koja može pohraniti zbirku elemenata istog tipa podataka fiksne veličine. Također se može zamisliti kao zbirka varijabli istog tipa podataka. To je jedna od najtemeljnijih struktura podataka u većini modernih programskih jezika.
U Rubyju, polje se definira na sljedeći način:
|
1 |
[value_1, value_2, …, value_N] |
Moguće je stvoriti polje bilo kojih drugih tipova podataka o kojima smo do sada raspravljali (cijeli broj, decimalni broj i stringovi). Evo nekoliko primjera:
-
Cijeli broj: [-5, 0, 5]
-
Decimalni broj: [-9.99, -6.99, -3.99, 0, 3.99]
-
String: [“the”, “quick”, “brown”, “fox”]
Sljedeći primjer implementira sve ove vrste polja:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
Imajte na umu da kada funkcija print naiđe na polje, ispisuje cijelo polje na ekranu. Radi veće praktičnosti, često ćete naići na polja kao varijable. Ažurirajmo kod:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
Sada možemo raditi s pojedinačnim elementima polja:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
Imajte na umu da u Rubyju vrijednost indeksa polja počinje s 0.
Radi praktičnosti, polja u Rubyju dolaze s metodama .first i .last koje ispisuju prvi i zadnji element:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
U Rubyju polja imaju još jednu zanimljivu značajku. Mogu sadržavati različite vrste podataka u isto vrijeme. Na primjer, možete pohraniti stringove, simbole, pa čak i druga polja:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
Korak 6 – Simboli
U Rubyju, simbol je posebna vrsta podataka koja se ponaša kao oznaka ili identifikator. Simboli su nepromjenjivi, što znači da se ne mogu mijenjati. Simboli izgledaju kao da deklarirate varijable bez ikakve vrijednosti.
Evo primjera simbola:
|
1 |
:time_zone |
Općenito, simboli se koriste za identifikaciju nečeg važnog. Za druge situacije, međutim, nizovi znakova su više nego dovoljni.
Ruby, kao objektno orijentirani jezik, tretira sve kao objekt (uključujući nizove znakova) s jedinstvenom memorijskom lokacijom, čak i ako su nizovi identični. Međutim, kada referencirate simbol, to je isti objekt svugdje u programu, ista memorijska lokacija.
Korak 7 – Hashevi
Hash je zbirka ključeva i vrijednosti slična rječniku. Često se hashevi koriste za pohranu povezanih podataka, na primjer, informacija o korisniku.
Evo brzog primjera hasha. Stvorili smo hash user_info koji sadrži korisničko ime i lozinku korisnika:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
Da bismo dohvatili vrijednosti para ključ-vrijednost, moramo koristiti ključ. Sljedeći primjer prikazuje taj postupak:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
Ruby također omogućuje definiranje hasha pomoću malo drugačije sintakse ( : umjesto =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
Ova struktura sintakse slična je sintaksi koja se koristi u drugim jezicima, na primjer, JavaScript. U ovoj strukturi sintakse, ključevi su definirani kao simboli. Zato umjesto korištenja "username", koristimo: username za pristup vrijednosti.
Dinamičko tipiziranje
Možda ste već primijetili da prilikom deklariranja varijable ne moramo eksplicitno dodijeliti tip podataka. Umjesto toga, vrijednost varijable određuje tip podataka. Ruby koristi dinamičko tipiziranje gdje se provjera tipova vrši u vrijeme izvođenja. Nasuprot tome, tipovi podataka se određuju tijekom kompilacije u statički tipiziranim programskim jezicima (C/C++, na primjer).
U sljedećem primjeru, sve vrijednosti dodijeljene varijabli dyn_var su valjane:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
U dinamički tipiziranim jezicima slobodni smo ponovno upotrijebiti postojeću varijablu za pohranu različitih tipova podataka. Ovdje je prethodni primjer ažuriran kako bi se prikazao ovaj fenomen:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
Kao što ovaj primjer pokazuje, svaki put kada se dodijeli nova vrijednost, to mijenja tip podataka varijable dyn_var u hodu. To je korisno pri pretvaranju jednog tipa podataka u drugi. Sljedeći primjer to pokazuje:
|
1 2 3 4 |
print "enter length: " length = gets.chop length = length.to_f puts length |
Ovdje,
-
Budući da su unosi s tipkovnice nizovi znakova, length je isprva niz znakova.
-
Budući da je naša željena vrijednost decimalni broj (float), pretvaramo vrijednost niza znakova u float pomoću to_f metode.
-
Zbog promjene vrijednosti, varijabli length se dodjeljuje float tip podataka. To je ono što vidimo kada ispisujemo njezinu vrijednost na ekranu.
Što bi se dogodilo ako bismo pokušali pomiješati dva različita tipa podataka? Ruby će javiti pogrešku. Pogledajte:
|
1 |
print 9 + "77" |
Identifikacija tipa podataka
U Rubyju se sve tretira kao objekt. Svaki objekt u Rubyju dolazi s metodom class. Kada se pozove, ova metoda govori koji je tip podataka izvor. Evo nekoliko primjera korištenja class metode:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
Drugi način za određivanje tipa podataka je korištenje kind_of? metode. Ona provjerava tip podataka objekta u odnosu na traženi tip podataka i vraća Booleovu vrijednost. Pogledajte to u sljedećem primjeru:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
Slično tome, postoji još jedna metoda is_a? koja uspoređuje tip podataka i vraća Booleovu vrijednost. Jedina razlika je naziv metode. Međutim, možda je poželjnija jer ju je programerima malo lakše čitati i razumjeti. Ažurirajte prethodni primjer s is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
Završne misli
Rad s bilo kojim programskim jezikom zahtijeva dobro razumijevanje tipova podataka koje on podržava. U ovom smo vodiču istražili najčešće tipove podataka koji se koriste u programiranju u Rubyju. Raspravili smo i demonstrirali cijele brojeve, decimalne brojeve, stringove, simbole, Booleove vrijednosti i hasheve (uz primjere).
Pogledajte još vodiča s našeg bloga koji će vam pomoći istražiti Ruby:
- Instalacija Ruby on Rails s RVM-om na Ubuntu 20.04
- Postavljanje Ruby on Rails s PostgreSQL-om
- Korištenje MySQL-a s Ruby on Rails aplikacijom na Ubuntu 21.04
- Istraživanje CloudSigma PaaS-a: Kako iskoristiti Ruby PaaS usluge hostinga?
Sretno kodiranje!




































Komentari
Još nema komentara. Budite prvi.