ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 148
Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 37
Abonament PDF

Scurtul ghid al unicornului din Ruby on Rails

Emil Luța
Developer @ Yonder



PROGRAMARE


Ruby on Rails începe treptat să iasă din aria de influență a hipsterilor. Cu siguranță vei fi numit "unicorn" dacă programezi în Ruby on Rails - toată lumea a auzit de existența acestor developeri, dar nimeni nu a văzut unul în realitate. Dar, înainte de a ne afunda în subiect, hai să vedem de ce ai avea nevoie de acest 'rubin pe șine':

Observăm un început modest în 1995 ca limbaj de programare foarte obscur și putem deduce că popularitatea vine de la framework-ul Rails, care a creat o comunitate efervescentă. Rails a fost conceput și creat de David Heinemeier Hansson în vara lui 2004. Pentru mai multe informații specifice despre Ruby(1) și Rails(2) vă invit să consultați referințele de la finalul articolului.

Analizând diagrama de mai sus remarcăm câteva lucruri interesante: Ruby este mult mai puternic decât PHP și Javascript și este foarte aproape de C#.

Impresionează gradul său ridicat de viabilitate comparativ cu alte opțiuni populare folosite la momentul curent în mediul de dezvoltare.Enumerăm mai jos minicolecția de website-uri, care oferă o mărturie clară a potențialului framework-ului Rails pentru aplicații de tip web:

În continuare vom prezenta particularitățile lui Rails.
Beneficiile lui Ruby on Rails

1. Convention over Configuration

Această mică funcționalitate face Rails nu numai unic ci și formidabil. Având la dispoziție această unealtă, un programator se poate concentra asupra codului într-o manieră pragmatică, în loc să își irosească energia și atenția asupra fișierelor de configurare. Acest aspect poate fi urmărit cel mai bine în arhitectura de tip Model-View-Controller pe care limbajul o impune. Maniera în care acesta gestionează este suficient de interesantă să stârnească zâmbete pe fața oricărui programator.

Așadar, în loc să fii nevoit să îți configurezi care Model (unitatea atomică de stocare în baza de date) merge în care tabel din baza ta de date, Rails îți oferă o regulă foarte simplă: să presupunem că ai un model numit User, în acest caz vei ști cu siguranță ce va fi asociat cu un tabel numit Users ( pluralul lui user). Mai mult, logica responsabilă pentru codul ce se va ocupa de model va fi regăsit în controller-ul numit UsersController, care va fi mapat la un set de rute predefinite de resursa numita users (endpoint-uri de tip RESTful sunt oferite - index/ show/ new/ create/ edit/ update/ delete) care vor corespunde metodelor cu aceleași nume definite în controller ca puncte de acces. Apoi, desigur, view-urile render-uite de aceste metode se vor afla în folder-ul views, în sub-folder-ul users, având fiecare .html același nume ca și endpoint-ul.

Acum, cum ar fi dacă toate astea s-ar genera cu o singură comandă?

Scaffolding-ul îți conferă această posibilitate, având la dispoziție o aplicație care rulează în doar câteva secunde (având deja Rails instalat). Nu știu ce părere aveți voi, dar mie mi se pare folositor și rapid! De notat este faptul că și convențiile pot fi schimbate dacă este dorită situația, însă Rails întărește ideea de a te folosi de ele așa cum sunt date.

Încă un motiv pentru care vei iubi această practică este ușurința pe care o dă utilizatorilor de a se plimba prin orice proiect. Dacă ai învățat o dată aceste convenții și trebuie să te muți la un alt proiect Rails, există șanse extrem de mari ca să înțelegi logica din spatele acțiunilor doar dintr-un UML. Ba mai mult, vei putea manipula codul fără a mai fi nevoit să primești informații de la developer-ii anteriori. Acum vă întreb din nou, așa-i că e grozav? Și mai există și alte puncte forte!

2. Comunitatea

Din acest punct de vedere, se poate spune că ești de-a dreptul cu picioarele înfipte în pământ. Există o bibliotecă uriașă de tip open source disponibilă pentru Ruby on Rails. În plus, majoritatea surselor sunt foarte bine documentate(4) și exemplificată(5) peste tot.

Oricând ai nevoie de ceva, există un gem (voi adresa acest concept în rândurile ce urmează) special construit, care îți va rezolva problema în 'stilul Rails'.

Cât despre gem-uri - le poți considera librăriile sau plug-in-urile din alte limbaje. Pentru a folosi gem-urile prin aplicație, există un fișier numit gemfile care îți permite să adaugi sau să ștergi după bunul plac orice bibliotecă prin url. Pentru a te asigura că nu îți poluezi mașina sau alte proiecte cu diferite gem-uri fiecare având diferite versiuni, există mai multe abordări. Eu sugerez cu încredere folosirea rvm-ului(6) ( ruby-versioning-manager ).

Iar ultimul bonus al comunității este faptul că este proactivă. În general, comunitățile lâncezesc, îmbătrânesc sau chiar se împiedică în proiectele de tip boom. Dar nu este cazul și aici. Ba chiar mai mult, se poate spune că este mai efervescentă ca atunci când totul a început!

Iar ca ultim aspect - dacă vreodată ai nevoie să rezolvi o anumită problemă și nu știi cum, railscasts(7). te va indruma/ inspira de cele mai multe ori în a găsi o rezolvare.

3. Te face fericit!

Nu, nu e un slogan publicitar! Țelul lui Ruby, după cum subliniază creatorul ei, a fost cel de a face programatorii fericiți. Acesta este de fapt aspectul care l-a atras pe David de la început. După ce s-a îndrăgostit literar de sintaxă, el a decis că Ruby este baza pe care își va întemeia framework-ul. Și, pentru a continua tradiția, l-a optimizat chiar mai mult pentru a aduce programatorilor cât mai multă fericire și cât mai puțină bătaie de cap.Pe lângă faptul că poți scrie codul în engleză aproape pură, mai ai și beneficiul de a scăpa de cele mai plicticoase părți ale web development-ului (evitând fișierele de configurare!), toate acestea fiindu-ți accesibile în cea mai rapidă manieră. Din punctul meu de vedere, aceasta ar face și pe cel mai înrăit programator să dea din coadă.

4. Nu ești nevoit să ai cod duplicat.

Această filosofie este puternic impregnată în ADN-ul Rails-ului. După metodologia în care codul este împărțit în modele, controller-e și helper-e, niciodată nu vei avea nevoie să îți duplici codul. Ba mai mult, logica este deja extrasă în gem-uri de către comunitate (vedeți cum interacționează?! ) și le poți folosi doar inserându-le în gemfile-ul tău. Prin urmare, dacă ai nevoie de un panou de administrator, poți oricând să imporți iactiveadmin care este atât minimalist cât și stilat. La toate acestea se adaugă faptul că este configurabil. Dacă ai nevoie de soluții de autentificare, devise o va face pentru tine. Apoi, probabil vei avea nevoie de autorizare- ținând cont că ai user-i, vei avea tipuri de user-i, care se autentifică pentru a vedea conținut diferit)- cancan reușește asta pentru tine. Iar lista(8) continuă...

5. Expresivitatea

Convenția e folositoare pentru că se bazează pe fișierele de configurare și pe relațiile pe care tu le memorezi. Acesta este beneficiul numărul 1. Apoi există al doilea și anume expresivitatea lui Ruby, care reprezintă principalul motiv pentru care David a ales Ruby în favoarea oricărui alt limbaj. Dacă te întrebi cum e folositor?

Pentru început, când scrii cod te simți bine. Nu numai că nu îți setezi totul la fiecare pas prin aplicație, dar pur și simplu poți să deduci niște funcții care există deja implementate. Ca exemplu, când am început eu să învăț Rails, la un moment dat aveam nevoie să știu dacă într-o listă de string-uri include un string particular pe care l-am calculat eu. Și, desigur, există mereu cele două opțiuni: iterezi prin el, clasic și verific la fiecare pas, sau, îl cauți pe Google. Așa că, uite-mă, căutând pe Google "find string in strings array Rails" - iar acesta e primul link(9) pe care l-am accesat. Vă las pe voi să descoperiți care mi-a fost surpriza când l-am deschis.

Iar acest lucru mi s-a întâmplat de mai multe ori când codam. Ba chiar am ajuns la punctul în care ghiceam ce verb sau combinație de verb și adverb îmi va da răspunsul corect, iar în caz că nu mergea, căutam pe Google (sort_by, .present? .empty?).

Și, poate că încă nu sunteți impresionați. Așa că, am să vă mai prezint un mic secret. Rails seamănă atât de mult cu engleza deoarece folosește un DSL(10) intern. Cum e asta bun pentru noi? Ei bine, permiteți-mi să scriu un code snippet pentru voi, apoi vă rog să-l citiți:

class User < ActiveRecord::Base
  devise :confirmable, :registerable

  validates_presence_of :name, :day_of_birth, :email

  before_save :compute_age

  has_many :books

  has_attached_file :avatar, :styles => {:small => "240x240>"}

Dacă nu sunteți convinși, încercăm altfel. Arată această bucățică unuia din prietenii tăi și întreabă-l care e cel mai ușor de citit:

Ruby

return Fridge.get_beer_if_available

PHP

$result = $fridge->getBeerIfAvailable($beers);

Java

return Fridge.getBeerIfAvailable()

Principalul avantaj este că vă puteți exprima cu ușurință gândurile folosind limba engleză, fără a fi nevoie de un nivel de abstractizare suplimentar. În plus, codul este simplu astfel încât îl puteți citi ca limbă engleză.

Concluzii și rezoluții

Așadar, se pare că am ajuns la finalul articolului. Sunt sigur că nu v-am convins să îl întrebați pe șeful vostru dacă nu ar vrea să schimbe profilul firmei spre Rails… Dar….de acum înainte, consider că nu mai există niciun motiv să aveți itemi care stau pe lista de idei bune de implementat. Aveți unealta pentru a face schimbări rapide unei aplicații și să vă alimentați curiozitatea în a vedea cum ar putea funcționa. Așa că, de ce să nu o faceți? Ca încheiere, vreau să vă sublinez că RoR vă va face atât fericiți cât și proprietari ai propriului vostru produs.

Resurse utile:

  1. Getting started with Rails tutorial.(11)
  2. Deployment options.(12)
  3. Official documentation.(13)
  4. Official tutorial.(14)

Linkuri de informații:

  1. https://en.wikipedia.org/wiki Ruby_(programming_language)
  2. https://en.wikipedia.org/wiki/Ruby_on_Rails
  3. http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html
  4. http://api.rubyonrails.org/
  5. http://guides.rubyonrails.org/getting_started.html
  6. https://rvm.io/
  7. http://railscasts.com/
  8. https://rubygems.org/
  9. http://stackoverflow.com/questions/1986386/check-if-a-value-exists-in-an-array-in-ruby
  10. http://en.wikipedia.org/wiki/Domain-specific_language
  11. http://12devs.co.uk/articles/writing-a-web-application-with-ruby-on-rails/
  12. https://www.heroku.com/
  13. http://api.rubyonrails.org/
  14. http://guides.rubyonrails.org/getting_started.html

Conferință TSM

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects