Sari la conținut

Ruby

De la Wikipedia, enciclopedia liberă
Pentru alte sensuri, vedeți Ruby (dezambiguizare).
Ruby
Ruby
Extensii fișiere.rb, .rbw
Paradigmămulti-paradigmă: orientat pe obiecte, imperativ, funcțional
Apărut în[1]  Modificați la Wikidata
Proiectat deYukihiro Matsumoto
DezvoltatorYukihiro Matsumoto[*][[Yukihiro Matsumoto (Japanese computer scientist who created the Ruby programming language)|​]]  Modificați la Wikidata
Ultima versiune2.1.1 (  (2014-02-24))
Tipareduck typing[*][[duck typing (style of dynamic, structural typing with lazy checking of objects' attributes)|​]]
dynamic typing[*][[dynamic typing (type system paradigm in which objects' types are enforced at runtime)|​]]
strong typing[*][[strong typing (specificity of a programming language's syntax when manipulating types of data)|​]]  Modificați la Wikidata
Influențat deAda, C++, CLU, Dylan, Eiffel
InfluențeD, Elixir, Falcon, Fancy
Sistem de operareindependent de platformă
Licențălicență Ruby sau licență BSD
Tip MIMEapplication/x-ruby[2]
text/x-script.ruby[3]  Modificați la Wikidata
Prezență onlinewww.ruby-lang.org

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.

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.

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.
  1. ^ https://www.ruby-lang.org/en/about/  Lipsește sau este vid: |title= (ajutor)
  2. ^ https://salsa.debian.org/debian/mime-support/blob/debian/3.61/mime.types#L492, accesat în   Lipsește sau este vid: |title= (ajutor)
  3. ^ https://github.com/rack/rack/blob/2.0.6/lib/rack/mime.rb#L483, accesat în   Lipsește sau este vid: |title= (ajutor)
  4. ^ http://preview.ruby-lang.org/ro/about/license.txt[nefuncțională]

Legături externe

[modificare | modificare sursă]