Ruby teeke tuntakse nimetuse "gem" all ning programmi RubyGems abiga on neid võimalik lihtsasti käsurea kaudu installida.[8]
Ajalugu
Ruby looja Yukihiro Matsumoto
Matsumoto mõtles Ruby välja aastal 1993 ning kirjeldab Rubyt kui keelt, mis on sisemuselt justkui Lisp, objektisüsteemiga nagu Smalltalk, plokkidega, mis võtavad inspiratsiooni kõrgemat järku funktsioonidelt ning Perli praktilise kasulikkusega.[9][10]
Nimi Ruby pärineb 24. veebruaril 1993 toimunud veebivestlusest Matsumoto ja Keiju Ishitsuka vahel veel enne, kui Matsumoto oli keelt looma hakanud.[11] Algul pakkusid nad välja kaks nime: Coral ja Ruby, millest Matsumoto valis viimase.[12] Matsumoto on hiljem öelnud, et nimevalikus üks mängis rolli ühe tema kolleegi sünnikivi, milleks oli rubiin.[10][13]
Esimene avalik Ruby versioon oli 0.95, mis tuli välja 21. detsembril 1995.[14] Järgmise kahe päeva jooksul ilmus veel kolm uut Ruby versiooni.[11] Selles faasis olid Rubys juba mitmed tuttavad funktsioonid, seehulgas peamiselt objektorienteeritud disain, klassid koos pärimisega, mikserid, iteraatorid, sulundid, eranditöötlus ja mälukoristusvahendid.[15]
Esimene artikkel Ruby kohta kirjutati alles aastal 1997. Samal aastal värvati Matsumoto tööle ettevõttesse netlab.jp, et töötada Ruby kallal täiskohaga arendajana. 1998. aastal lõi Matsumoto Ruby Application Archive'i ning esimese ingliskeelse veebilehe Ruby kohta.[11] 1999. aastal loodi ka ingliskeelne Ruby postiloend kasvava huvi tõttu keele vastu väljaspool Jaapanit.[16] 1999. aastal kirjutasid Matsumoto ja Keiju Ishitsuka Ruby kohta raamatu "Objektorienteeritud skriptimiskeel Ruby" (オブジェクト指向スクリプト言語 Ruby), mis avaldati Jaapanis 1999. aasta oktoobris. 2000. aastate alguses kirjutati Ruby kohta Jaapanis veel paarkümmend raamatut.[11]
2000. aastaks oli Ruby Jaapanis populaarsem kui Python.[17] 2000. aasta septembris ilmus Ruby kohta ka ingliskeelne raamat "Programming Ruby", mis avaldati hiljem internetis tasuta, mis suurendas huvi Ruby kohta väljaspool Jaapanit veelgi rohkem.[18] 2002. aasta alguseks oli ingliskeelne Ruby postiloend tunduvalt populaarsem kui jaapanikeelne, demonstreerides Ruby kasutuse kasvu mujal maailmas.
Varased Ruby versioonid
Pärast Ruby versiooni 0.95 1995. aastal anti välja veel mitu stabiilset Ruby versiooni:
Ruby versioon 1.8 ilmus algselt 2003. aasta augustis ning oli pikka aega Ruby stabiilne versioon. Ruby 1.8 määratleti aegunud versioonina alles 2013. aasta juunis.[19] Sellest hoolimata leiab veel palju koodi, mis on kirjutatud just selles versioonis. Ruby versioonil 1.8 kirjutati algne versioon veebiraamistikust Ruby on Rails, mis aitas muuta Ruby veelgi populaarsemaks.[19][20]
Ruby 1.9
Ruby versioon 1.9 ilmus algselt 25. detsembril 2007. Versioon 1.9 erines päris palju varasematest versioonidest ning seetõttu võttis aega, et 1.9 omaks võetaks, kuna see nõudis suure osa koodi ümberkirjutamist ning ka kolmandate osapoolte kirjutatud gemide uuendamist.[21]
uue paisktabeli süntaksi: {võti:"väärtus"}=={:võti=>"väärtus"}
igale sõnele spetsiifilise tähemärgikodeeringu andmise võimaluse
uue võrgusokli rakendusliidese (koos toetusega IPv6le)
require_relative importide turvalisuse
Ruby 1.9 määratleti aegunud versioonina 23. veebruaril 2015.[23]
Ruby 2.0
Ruby versioon 2.0 ilmus 24. veebruaril 2013. Peaaegu kogu Ruby 1.9 kood sobitub automaatselt Ruby versiooniga 2.0, esineda võib vaid üksikuid probleeme.[24]
uue tava kasutada meetodit #to_h et muuta objektid paisktabeliteks[24]
Ruby 2.0 määratleti aegunud versioonina 22. veebruaril 2016.[25]
Ruby 2.1
Ruby versioon 2.1.0 ilmus 25. detsembril 2013. See versioon aitas kaasa keele optimeerimisele ning parandas mõningaid vigu.[26]
Ruby 2.1 määratleti aegunud versioonina 1. aprillil 2017, viimane versiooninumber oli 2.1.10.[27]
Ruby 2.2
Ruby versioon 2.2.0 ilmus 25. detsembril 2014. Versioon optimeeris keelt veelgi ning parandas vigu, samuti uuendati teeke ning eemaldati mõningad aegunud rakendusliidesed. Suurimad muudatused Ruby 2.2.0 puhul on seostatud mäluga, näiteks on mälukoristusvahendid nüüd inkrementaalsed ning töötavad ka sümbolitega.[28]
Ruby 2.2 määratleti aegunud versioonina 31. märtsil 2018, viimane versiooninumber oli 2.2.10.[29]
Ruby 2.3
Ruby versioon 2.3.0 ilmus 25. detsembril 2015.[30] Mõned tähtsamad muudatused versioonis 2.3:
sõneoperatsioone sõnekonstantide peal on võimalik muuta kiiremaks muutes sõnekonstandid hangunuks[31]
paisktabelite võrdlemisel on võimalik võrrelda võtmeid ja väärtusi korraga, varem sai korraga võrrelda ainult võtmeid
nagivatsioonioperaator &., mis teeb nil väärtuste käitlemise lihtsamaks (näiteks ifobj&&obj.foo&&obj.foo.bar asemel saab kasutada ifobj&.foo&.bar
did_you_mean gem on nüüd baaskoodis ning aitab automaatselt leida sarnaseid objektide nimesid NameErrori või NoMethodErrori puhul
meetod #dig järjendite ja paisktabelite jaoks, mis aitavad kergemini saada andmestruktuuridest sügavamaid väärtusi (näiteks paisktabelist profiil={sotsiaal:{vikipeedia:{nimi:'Mari Mets'}}} saab väärtuse Mari Mets kätte kasutades koodi profiil.dig(:sotsiaal,:vikipeedia,:nimi))[30]
Versioon 2.3 aitab kaasa ka keele üleüldisele optimeerimisele ning parandab muid vigu.[32]
Ruby 2.3 määratleti aegunud versioonina 31. märtsil 2019, viimane versiooninumber oli 2.3.8.[33]
Ruby 2.4
Ruby versioon 2.4.0 ilmus 25. detsembril 2016.[34] Mõned tähtsaad muudatused versioonis 2.4:
Fixnum ja Bignum objektid on nüüd mõlemad klassifitseeritud osana Integer klassist, ehk täisarvudena
uus meetod Regexp#match?, mis on kiirem versioon meetodist Regexp#match ning tagastab tõeväärtuse[34]
Ruby 2.4 on jätkuvalt toetatud versioon ning viimane versiooninumber on 2.4.8, kuid määratletakse kui aegunud versioon 1. aprillil 2020.[35]
Ruby 2.5
Ruby versioon 2.5.0 ilmus 25. detsembril 2017.[36] Mõned tähtsamad muudatused versioonis 2.5:
rescue ja ensure laused kasutavad nüüd automaatselt do-end plokki
paisktabelite muutmiseks meetodid #slice ja #transform_keys[36]
Versioon 2.5 toob kaasa ka palju parandusi keele optimeerimiseks, näiteks plokkide läbimine on 3 korda kiirem ning mõned objektide liitmismeetodid on samuti kiiremad.[36]
Ruby 2.5 on jätkuvalt toetatud versioon ning viimane versiooninumber on 2.5.7.[37]
Ruby 2.6
Ruby versioon 2.6.0 ilmus 25. detsembril 2018.[38] Ruby 2.6 on jätkuvalt toetatud versioon ning viimane versiooninumber on 2.6.5.[39]
Ruby 2.7
Ruby versioon 2.7.0 ilmus 25. detsembril 2019. Ruby 2.7 on hetkene stabiilne versioon ning viimane versiooninumber on 2.7.0.[40]
-199.abs# => 199'ruby on lahe'.length# => 12'ruby on lahe'.index('u')# => 1"Kena, kas pole?".downcase.split('').uniq.sort.join# => " ,?aeklnops"
Sisendid:
print'Palun sisesta oma nimi:'nimi=gets.chompputs"Tere, #{nimi}."
Konversioonid:
puts'Anna mulle arv:'arv=gets.chompputsarv.to_iarv_välja=arv.to_i+1putsarv_välja.to_s+' on suurem arv.'
Sõned
Rubys on sõnesid võimalik defineerida mitmel viisil. Järgnevad muutujad on sama väärtusega:
a="\nSee on jutumärkides sõne\n"b=%Q{\nSee on jutumärkides sõne\n}c=%{\nSee on jutumärkides sõne\n}d=%/\nSee on jutumärkides sõne\n/e=<<-BLOCKSee on jutumärkides sõneBLOCK
Sõnedes saab muutujaid interpoleerida:
var=3.14159"pi on #{var}"=>"pi on 3.14159"
Sõnekonstante saab defineerida järgnevalt:
a='See on ülakomades sõne'a=%q{See on ülakomades sõne}
Rubys on olemas ka sõnastiku tüüpi andmestruktuur, mida nimetatakse paisktabeliks (inglise keeles hash)
hash=Hash.new# samaväärne kui hash = {}hash={:vesi=>'märg',:tuli=>'kuum'}# defineerib hash objekti ümberputshash[:tuli]# prindib ekraanile "kuum"hash.each_pairdo|key,value|# või ka: hash.each do |key, value|puts"#{key} on #{value}"end# tagastab {:vesti =>"märg", :tuli=>"kuum"} ja prindib:# vesi on märg# tuli on kuumhash.delete:vesi# kustutab paari :vesi => 'märg' ja tagastab "märg"hash.delete_if{|key,value|value=='kuum'}# kustutab paari :tuli => 'kuum' ja tagastab {}
Tingimuslaused
If-lause:
# Genereerib suvalise arvu ning prindib välja kas tegemist on paaris- või paaritu arvugaifrand(100).even?puts"Paaris"elseputs"Paaritu"end
Järgnev kood defineerib klassi nimega Inimene. Lisaks initialize meetodile, millega klass konstrueeritakse, on sellel veel kaks meetodit: üks, mis kirjutab üle võrdlusoperaatori <=> (nii, et Array#sort saab sorteerida vanuse järgi) ja teine, mis kirjutab üle #to_s meetodi (nii, et Kernel#puts saab väljundit vormindada). attr_reader on Ruby metaprogrammeerimise näide: attr_accessor defineerib nii getteri kui ka setteri meetodid, kuid attr_reader defineerib ainult getter meetodi. Viimane lause meetodis on väärtus mille see väljastab, seega ei ole vaja defineerida return lauset.[10]
classInimeneattr_reader:nimi,:vanusdefinitialize(nimi,vanus)@nimi,@vanus=nimi,vanusenddef<=>(person)# võrdlusoperaator sorteerimiseks@vanus<=>person.vanusenddefto_s"#{@nimi} (#{@vanus})"endendgrupp=[Inimene.new("Mari",33),Inimene.new("Marina",16),Inimene.new("Martina",23)]putsgrupp.sort.reverse# prindib:# Mari (33)# Martina (23)# Marina (16)
Inimene on siin konstant ja viitab Class objektile.
Erindid
Erindeid saab tekitada raise lause abil:
raise
Erindile saab juurde lisada ka mingi sõnumi:
raise"See on sõnum"
Võimalik on defineerida ka erindi tüüpi:
raiseArgumentError,"Mittesobivad argumendid!"# või ka# raise ArgumentError.new("Mittesobivad argumendid!")
Erindeid käsitletakse rescue lausega. See lause püüab kõiki erindeid, mis pärinevad StandardError klassist. Erindite püüdmisel saab kasutada ka else ja ensure lauseid:
begin# tee midagirescue# käsitle erinditelse# tee seda juhul kui erindit ei tekkinudensure# tee seda, vahet pole kas tekkis erind või mitteend
StandardError ja Exception on Rubys eraldi klassid, StandardError pärineb Exceptionist, kuid kuna rescue käsitleb vaid erindeid, mis pärinevad StandardError klassist, ei pruugi ta alati kinni püüda kõiki erindeid. Selleks peab eraldi defineerima:
begin# tee midagirescueException# käsitle erindit end
Või kinni püüdma mõne kindla erindi:
begin# tee midagirescueRuntimeError# käsitle ainult RuntimeErrorit ja kõiki teisi sellest pärinevaid erindeidend
Erindi objekti saab kätte sedasi:
begin# tee midagirescueRuntimeError=>e# käsitle RuntimeErrorit ning tee midagi muutujaga e, näiteksputse.to_send
↑ 1,01,11,2Peter Cooper (2009). Beginning Ruby: From Novice to Professional (inglise keeles). Kd 2. Berkley: APress. Lk 101. ISBN1-4302-2363-4. To a lesser extent, Python, LISP, Eiffel, Ada, and C++ have also influenced Ruby.{{raamatuviide}}: CS1 hooldus: tundmatu keel (link)
↑"Influences". The Rust Reference (inglise keeles). Vaadatud 18. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑Chris Lattner (3. juuni 2014). "Chris Lattner's Homepage" (inglise keeles). Vaadatud 18. detsembril 2019. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"About Ruby" (inglise keeles). Vaadatud 18. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑Yukihiro Matsumoto (2000. aasta oktoober). "Programming Ruby: Forward" (inglise keeles). Vaadatud 18. detsembril 2019. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)CS1 hooldus: tundmatu keel (link)
↑ 19,019,1shyouhei (30. juuni 2013). "We retire Ruby 1.8.7". Ruby Programming Language (inglise keeles). Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑O'Reilly Media (22. märts 2007). "Web Development: Ruby on Rails". Devarticles.com (inglise keeles). Originaali arhiivikoopia seisuga 24. veebruar 2009. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 1.9.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2007. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑Sam Ruby (2008. aasta juuli). "Ruby 1.9: What to Expect". slideshow.rubyforge.org (inglise keeles). Originaali arhiivikoopia seisuga 2017-04-14. Vaadatud 19. detsembril 2019. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)CS1 hooldus: tundmatu keel (link)
↑ 24,024,1Yusuke Endoh (24. veebruar 2014). "Ruby 2.0.0-p0 is released". Ruby Programming Language (inglise keeles). Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.1.0 is released". Ruby Programming Language (inglise keeles). 25. detsember 2013. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.2.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2014. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑ 30,030,1"Ruby 2.3.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2015. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑ 34,034,1"Ruby 2.4.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2016. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.4.6 Released". Ruby Programming Language (inglise keeles). 1. aprill 2019. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.5.7 Released". Ruby Programming Language (inglise keeles). 1. oktoober 2019. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.6.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2018. Vaadatud 19. detsembril 2019.{{netiviide}}: CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.6.5 Released". Ruby Programming Language (inglise keeles). 1. oktober 2019. Vaadatud 18. detsembril 2019. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)CS1 hooldus: tundmatu keel (link)
↑"Ruby 2.7.0 Released". Ruby Programming Language (inglise keeles). 25. detsember 2019. Vaadatud 4. jaanuaril 2020.{{netiviide}}: CS1 hooldus: tundmatu keel (link)