Ruby
Acest articol sau secțiune are mai multe probleme. Puteți să contribuiți la rezolvarea lor sau să le comentați pe pagina de discuție. Pentru ajutor, consultați pagina de îndrumări.
Nu ștergeți etichetele înainte de rezolvarea problemelor. |
Ruby | |
Ruby | |
Extensii fișiere | .rb, .rbw |
---|---|
Paradigmă | multi-paradigmă: orientat pe obiecte, imperativ, funcțional |
Apărut în | [1] |
Proiectat de | Yukihiro Matsumoto |
Dezvoltator | Yukihiro Matsumoto[*] |
Ultima versiune | 2.1.1 ( | )
Tipare | duck typing[*] dynamic typing[*] strong typing[*] |
Influențat de | Ada, C++, CLU, Dylan, Eiffel |
Influențe | D, Elixir, Falcon, Fancy |
Sistem de operare | independent de platformă |
Licență | licență Ruby sau licență BSD |
Tip MIME | application/x-ruby[2] text/x-script.ruby[3] |
Prezență online | www.ruby-lang.org |
Modifică date / text |
Ruby este un limbaj de programare generic, reflexiv, dinamic și orientat pe obiecte. A fost creat la mijlocul anilor '90 din secolul trecut de Yukihiro "Matz" Matsumoto în Japonia.
Combină elemente inspirate din Perl (sintaxa) cu caracteristici din Smalltalk, dar a fost influențat și de alte limbaje precum Eiffel și Lisp. Oferă suport pentru multiple paradigme de programare (funcțională, orientată pe obiecte, imperativă), gestiune automată a memoriei, sistem dinamic pentru tipurile de date; Ruby e similar - în grade diferite - cu Smalltalk, Python, Perl, Lisp, Dylan și CLU.
Este un limbaj orientat pe obiecte: fiecare tip de date este un obiect, inclusive clasele și tipurile pe care multe alte limbaje le consideră primitive (cum ar fi tipul întreg, boolean și “nil”). Fiecare funcție reprezintă o metodă. Variabilele desemnează referințe la obiecte, nu obiectele în sine. Ruby suportă moștenirea, dar nu moștenirea multiplă, totuși clasele pot importa module. Sintaza procedurală este acceptată, dar toate metodele definite în afara scopului unui obiect particular sunt de fapt metode ale clasei obiect. Din moment ce clasa este părinte pentru toate celelalte clase, schimbările devin vizibile pentru toate clasele și obiectele.
Istorie
[modificare | modificare sursă]Ruby este un limbaj de o aleasă balanță. Creatorul său, Yukihiro “matz” Matsumoto, a contopit părți din limbajele sale favorite (Perl, Smalltalk, Eiffel, Ada, și Lisp) pentru a forma un nou limbaj care să creeze o balanță armonioasă între programarea funcțională și cea imperativă.
El a spus adeseori că „încearcă sa facă limbajul Ruby natural, nu simplu,” într-un mod care să oglindească viața. Pornind de la aceasta, el adaugă:
- Ruby este simplu în aparență, dar foarte complex în interior, la fel ca și corpul uman.
Tabel cu versiuni
[modificare | modificare sursă]Versiune | Publicare versiune | Sfârșitul suportului | Sfârșitul suportului de securitate |
---|---|---|---|
1.0 | 1996-12-25 | NA | NA |
1.8 | 2003-08-04 | 2012-06 | 2014-07-01 |
1.9 | 2007-12-25 | 2014-02-23 | 2015-02-23 |
2.0 | 2013-02-24 | 2015-02-24 | 2016-02-24 |
2.1 | 2013-12-25 | 2016-03-30 | 2017-03-31 |
2.2 | 2014-12-25 | 2017-03-28 | 2018-03-31 |
2.3 | 2015-12-25 | 2018-06-20 | 2019-03-31 |
2.4 | 2016-12-25 | 2019-04-01 | 2020-04-01 |
2.5 | 2017-12-25 | Va fi anunțat | Va fi anunțat |
2.6 | 2018-12-25 | Va fi anunțat | Va fi anunțat |
2.7 | 2019-12-25 | Va fi anunțat | Va fi anunțat |
Despre ascensiunea Ruby
[modificare | modificare sursă]Încă de la lansarea sa publică în 1995, Ruby a atras programatori devotați din lumea întreagă. În 2006, Ruby a realizat acceptarea în masă prin grupuri active de utilizatori formate în orașele majore ale lumii și prin conferințe legate de Ruby în săli pline până la refuz. Ruby-Talk, principala listă de discuții Arhivat în , la Wayback Machine. pe tema limbajului Ruby a urcat până la o medie de 200 de mesaje pe zi.
Indexul TIOBE, care măsoară creșterea limbajelor de programare, situează Ruby pe locul #11 între limbajele din lumea întreagă. Observând creșterea sa, ei prezic, “Sunt mari șanse ca Ruby să intre între primele 10 limbaje în jumătate de an.” Mare parte din această creștere este atribuită programelor scrise în Ruby, în special framework-ului web Ruby on Rails.
Ruby este de asemenea complet liber.[4] Nu doar gratuit, ci de asemenea liber de a fi utilizat, copiat, modificat și distribuit.
Toate sunt obiecte
[modificare | modificare sursă]Inițial, Matz s-a uitat la alte limbaje pentru a găsi sintaxa ideală. Reamintindu-și căutarile sale, el spuse, “Am vrut un limbaj de tip scripting care să fie mai puternic decăt Perl, și mai orientat pe obiecte decât Python.”
În Ruby, totul este un obiect. Fiecărui bit de informație și de cod i se pot da propriile proprietăți și acțiuni. În programarea orientată pe obiecte proprietățile sunt denumite variabile de instanță iar acțiunile sunt cunoscute drept metode. Natura pur orientată pe obiecte a Ruby este cel mai adesea demonstrată de o bucată de cod ce aplică o acțiune unui număr.
5.times { print "Noi *iubim* Ruby -- este fantastic!" }
În multe limbaje, numerele și alte tipuri de date primitive nu sunt obiecte. Ruby urmează influențele limbajului Smalltalk dând metode și variabile de instanță tuturor tipurilor sale. Aceasta ușurează utilizarea Ruby deoarece regulile aplicabile obiectelor sunt aplicabile întregului Ruby.
Flexibilitatea
[modificare | modificare sursă]Ruby este privit ca un limbaj flexibil, deoarece permite utilizatorilor săi să-i modifice în mod liber părțile componente. Părți esențiale din Ruby pot fi eliminate sau redefinite după voință. Părți existente pot fi extinse. Ruby nu încearcă să-l îngrădească pe programator.
De exemplu, adăugarea este efectuată cu operatorul plus (+). Dar, dacă ați prefera să utilizați mai degrabă cuvântul plus
pentru claritate, ați putea adăuga o astfel de metodă clasei Ruby native Numeric
.
class Numeric
def plus(x)
self.+(x)
end
end
y = 5.plus 6
# y este acum egal cu 11
Operatorii în Ruby sunt aliasuri convenabile pentru metode. Îi puteți de asemenea redefini și pe aceștia.
Blocuri
[modificare | modificare sursă]Blocurile în Ruby sunt de asemenea privite ca o sursă de mare flexibilitate. Un programator poate atașa o încapsulare (closure) unei metode, descriind astfel cum ar trebui să se comporte aceasta. Încapsularea este denumită block și a devenit una din însușirile cele mai populare pentru noii veniți în Ruby dinspre alte limbaje imperative precum PHP sau Visual Basic.
Blocurile sunt inspirate de către limbajele funcționale. Matz a spus, “în încapsulările Ruby, am vrut să respect cultul Lisp.”
search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
În codul de mai sus, blocul este descris în interiorul construcției do
, end
. Metoda map
aplică blocul listei de cuvinte furnizate. Multe alte metode în Ruby lasă o portiță deschisă programatorului ca acesta să-și poată scrie propriul bloc de cod care sa clarifice ce anume trebuie să facă acea metodă.
Ruby și mixajele
[modificare | modificare sursă]Spre deosebire de multe alte limbaje de programare orientate pe obiecte, Ruby facilitează doar moștenirea simplă, „dinadins”. Dar Ruby înțelege conceptul de module (denumite Categorii în Objective-C). Modulele sunt colecții de metode.
Clasele pot mixa (include) un modul și dobândi astfel, fara nici un efort, toate metodele acestuia. De examplu, orice clasă care implementează metoda each
poate mixa modulul Enumerable
, care adaugă o grămadă de metode care folosesc each
pentru iterație.
class MyArray
include Enumerable
end
În general, Rubyiștii văd aceasta drept o cale mult mai limpede decât moștenirea multiplă, care este complexă și poate fi prea restrictivă.
Aspectul vizual
[modificare | modificare sursă]Deși Ruby adesea folosește foarte puțină punctuație și preferă îndeosebi cuvinte cheie in limba engleză, este folosită ceva punctuație pentru a decora Ruby. În Ruby nu este necesară declararea variabilelor. Folosește o serie de simple convenții pentru a marca scopul variabilelor.
var
ar putea fi o variabilă locală.@var
este o variabilă de instanță.$var
este o variabilă globală.
Aceste sigilii măresc claritatea permițândui programatorului să identifice cu ușurință rolurile variabilelor. De asemenea nu mai este necesar să fie adăugat obositorul self
. în fața fiecărui membru al instanței.
Dincolo de partea fundamentală
[modificare | modificare sursă]Ruby posedă o bogăție de alte însușiri, printre care următoarele:
- Ruby are însușirea de a capta excepțiile, precum Java sau Python, pentru a facilita tratarea erorilor.
- Ruby are un colector de memorie reziduală cu adevărat mark-and-sweep pentru toate obiectele Ruby. Nu este nici o nevoie să fie menținute contoare de referințe în biblioteci externe. După cum spune Matz, “Aceasta e mai bine pentru sănătatea ta.”
- Scrierea de extensii C în Ruby este mai facilă decât în Perl sau Python, având un API foarte elegant pentru a apela Ruby din C. Aceasta invită la încapsularea Ruby în software, pentru a fi utilizat ca un limbaj de scripting. O interfață SWIG este de asemenea disponibilă.
- Ruby poate încărca dinamic biblioteci de extensii dacă sistemul de operare o permite.
- Ruby posedă threaduri independente de OS. Astfel, pentru toate platformele pe care rulează Ruby, aveți de asemenea multithreading, indiferent dacă sistemul de operare oferă sau nu așa ceva, chiar și pe MS-DOS!
- Ruby este foarte portabil: este dezvoltat în principal pe GNU/Linux, dar rulează pe multe variante de UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.
Note
[modificare | modificare sursă]- ^ https://www.ruby-lang.org/en/about/ Lipsește sau este vid:
|title=
(ajutor) - ^ https://salsa.debian.org/debian/mime-support/blob/debian/3.61/mime.types#L492, accesat în Lipsește sau este vid:
|title=
(ajutor) - ^ https://github.com/rack/rack/blob/2.0.6/lib/rack/mime.rb#L483, accesat în Lipsește sau este vid:
|title=
(ajutor) - ^ http://preview.ruby-lang.org/ro/about/license.txt[nefuncțională]