RUBY programmeerimiskeel. Rubiin algajatele: miks see keel on huvitav ja kuidas seda tõhusalt õppida

Ruby programmeerimiskeel on puhtalt objektorienteeritud programmeerimiskeel, mis oli algselt loodud skriptimiseks. See ühendab süntaksi, mis laenab Ada ja Perli ja Smalltalki objektorienteeritud funktsioone ning jagab ühiseid funktsioone Pythoni, Lispi ja käsurea utiliidiga – pluss programmeerimise põhitõdede õpetamisel.
Ruby programmeerimiskeelel on praegu ainult üks Ruby tõlgi teostus, kuigi Parroti virtuaalmasina jaoks tehakse jõupingutusi Ruby liidese (nn "Cardinal") juurutamiseks.
Ruby programmeerimiskeelel on palju kasulikke funktsioone. Ruby toetab ka operaatori ülekoormust ja erandite käsitlemist. Praegu puudub Ruby programmeerimiskeelel Unicode'i tugi. Rubyl on iteraatorid (mis meenutavad CLU-d ja Satherit). Ruby toetab funktsioonide abstraktseid esitusi (nagu ka Smalltalk ja paljud algajatele mõeldud funktsionaalsed programmeerimiskeeled). Rubyl on sisseehitatud süntaktiline tugi Perli regulaaravaldistele keele tasemel (mitte ainult teekides, nagu Pythonis ja paljudes teistes keeltes). Ruby toetab automaatset prügikoristust ja moodulite dünaamilist laadimist/linkimist (olenevalt arhitektuurist) Microsoft Windowsis. Ruby on üle viidud paljudele platvormidele, sealhulgas Unix, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga ja palju muud.
Ruby on puhtalt objektorienteeritud: iga objektiandmete bitt, sealhulgas tüübid, mis on teistes keeltes määratletud kui "primitiivsed". Iga funktsioon on meetod. See sarnaneb Smalltalkiga, kuid erineb põhimõtteliselt Javast ja Pythonist. Iga väärtuse nimi (muutuja nimi) Ruby programmis määrab viite objektile, mitte objektile endale. Ruby toetab pärimist dünaamilise lähetamise, Mixini ja Singletoni meetoditega. Ruby ei toeta mitut pärimist, kuid klassid saavad mooduleid importida. Kuigi Rubys saab kasutada protseduurilist süntaksit, on kõik Rubys objekt Smalltalki tähenduses, mitte Perli või Pythoni programmeerimine mannekeenide jaoks.
Keele lõi Yukihiro Matsumoto (teise nimega "Matz") 24. veebruaril 1993. aastal. Praegune stabiilne versioon on 1.8.0. Pange tähele, et nimi ei ole akronüüm – see on tegelikult sõnade mäng nagu Perl. Autori sõnul on Ruby loodud vähima üllatuse printsiibi (POLS) jaoks, mis tähendab, et keel peaks olema vaba lõkse ja ebakõladest, mis teisi keeli vaevavad.
Ruby KKK-st: kui teile meeldib Perl, tunnete end Ruby kasutamisel selle süntaksi tõttu suurepäraselt. Kui teile meeldib Smalltalk, meeldib teile Ruby ja selle semantika. Kui teile meeldib Python, siis võite, kuid ei pruugi tajuda Pythoni ja Ruby/Perli disainifilosoofias tohutut erinevust.
Ruby on tasuta ja avatud lähtekoodiga GPL-i või kunstilise litsentsi all, nagu Perl.

Näited
Siin on mõned Ruby koodi näited:

>> -199.abs # number -199 on objekt; selleks kutsutakse ABS-meetodit. => 199 >> "Ruby on lahe".Kutsutakse String objekti pikkus # meetodit - stringi pikkus => 13 >> "Rick".index("c") => 2 >> "John". swapcase => "jOHN" >> #Arrays ?> .sort => >> .sort.reverse => # järgmine koodiplokk käivitatakse 10 korda 10.times ( # Asenda " " tähega ", " ja salvesta string1 string1 = "Tere maailm"

Kuidas saada veebisaidi arenduse professionaaliks ja hakata raha teenima? Odavad videokursused koos sissejuhatava sissejuhatusega.

  • Tõlge

ma kohtasin Rubiin suhteliselt hiljuti, tänu suurepärasele raamistikule Ruby on Rails. Ma ei pea end Ruby eksperdiks, kuid olen lugenud PickAxe'i, kirjutanud isiklikuks kasutamiseks mitmeid utiliite Ruby keeles ja ka vabal ajal arendanud Railsis.

Ruby on praegu mu põhikeel. Alustasin sellega TurboPascal koolis, õppis C Ja C++ülikoolis, kirjutas väitekirja teemal Java, ja õppisin ka PHP nullist, sest tahtsin õppida, kuidas veebisaite kiiresti ja lihtsalt teha. Arvan, et koodi kirjutamine on minu jaoks meelelahutus ja siis kõik muu. Alguses mõtlesin, mis keelt õppida, Python või Ruby. Valisin teise, kuna ei tahtnud, et vale taane mu koodis probleeme tekitaks.

Seal on terve hulk tutvustusi, õpetusi, artikleid ja esseesid, mille on kirjutanud gurud selle kohta, kuidas Rubyst maksimumi võtta. See artikkel pole midagi sellist.

See on tagasihoidlikum, mittetäielik loetelu põhjustest, mis võivad (või ei pruugi) motiveerida teid Rubyt kasutama või vähemalt sellega mängima. Ettevaatust: kui kasutate mõnda muud programmeerimiskeelt tööl või muudel eesmärkidel, siis ärge kurdage mulle, kui te seda enam kasutada ei soovi. Minuga juhtus täpselt nii, aga minu jaoks pole see nii oluline. Rubiin on imeline ja elegantne keel ning nagu paljud sellised asjad, võib see haarata teie meelt ja murda teie hinge.

Ühesõnaga, teid on hoiatatud.

Miks õppida Rubyt?

1. Saate kõik mugavused (naudingud) ilma trikkideta.

Rubiin laenatud kõik parem teistest programmeerimiskeeltest, alates väike jutt enne Java, alates Perl enne Python. Siin on põhifunktsioonid, mida saate põhimõtteliselt teistes keeltes näha:
  • Erandid. Uskuge või mitte, aga erandid on mis tahes programmide väljatöötamisel üks olulisemaid asju. Programmeerijad kl PHP4, ei tea neist midagi ja ütlen teile, et saate (vead) lihtsalt ekraanile printida või kasutada vigade käsitlemiseks nende oma "super-duper" klassi. Meie kõigi õnneks Rubiin tuleb koos proovi/püüa(või veel parem alustada / päästa) plokid ja eelnevalt määratletud, laiendatavate erandite komplekt veateabe korrektseks käsitlemiseks.
  • Nimeruumid: moodulid Rubiin muutke nimeruumi kasutamine lihtsaks, peaks see huvilistele meeldima C++ Ja Java.
  • Sisseehitatud tavalised uskumused: kõigile asjatundjatele Perl, võite midagi lisada // ja sellest saab regulaaravaldis, mis on võrdluseks valmis (selleks kasutame operaatorit =~ ).
  • Operaatori ülekoormus: Rubiin võimaldab defineerida selliseid operaatoreid nagu +, -, > , jne. mis tahes teie klassi jaoks.
  • Paketid: nimega " kalliskivid"(kivikesed), nad tõesti vastavad oma nimele, pealegi - nad töötavad. Paketid toetavad sõltuvusi ja võivad olla ka platvormidevahelised või platvormidest sõltuvad.
  • Interaktiivne konsool: saab kasutada koodi interaktiivseks testimiseks, nagu konsool Python

2. Sulle meeldivad pisiasjad.

Rubiin graatsiline Miks? Sest ta ei püüa koodi teha nii kokkuvõtlikuks, et see segaks loetavust ja arusaamist. Mõned näpunäited võivad teid aidata:
  • Võite kasutada mõlemat operaatorit, kui Ja kui ei tingimuslausetes. Muidugi võite kasutada kui väljendi vastupidise tähendusega, kuid kasutades kui ei põhjustab tavaliselt vähem vigu. Lisaks saate mõlemat operaatorit kasutada tingimuslike modifikaatoritena, asetades need avaldise järel, mitte enne: order.new välja arvatud juhul, kui order.exists
  • Meetodi nime lõpus saate kasutada küsi- ja hüüumärke. See kokkulepe ei ole peale surutud, vaid märk " ? " kasutatakse meetodi naasmisel tõsi või vale, samas kui märk " ! " kasutatakse meetodite jaoks, mis teevad midagi pöördumatut, nagu kirje kustutamine andmebaasist, viimase märgi eemaldamine stringist jne.
  • Võite kasutada varjunimesid ( teise nimega) juba loodud meetodite jaoks. Nii saate meetodid kätte olemas Ja on olemas, ei mingeid üldkulusid ega kordamist.
  • Saate kasutada juhiseid attr_reader, attr_writer või attr_accessor automaatseks loomiseks getter/setter klassi liikmetele.
  • Ja veel mõned nimetamisreeglid: konstandid, klassid ja moodulid kirjutatakse suure algustähega, meetodid ja klassiliikmed peavad algama väiketähega, globaalsete muutujate nimed algavad tähega " $ ", objektimuutujate nimed algavad tähega " @ " ja klassi muutujate nimed koos " @@ ", noh jne.
  • Meetodite kutsumisel ei pea sulgusid kirjutama. Kirjutada võib File.open("/home/h3rald/test.txt") või lihtsalt File.open "/home/h3rald/test.txt" , mis on eriti mugav argumentideta meetodite puhul.

3. Enam pole vaja semikooloneid kasutada.

Kas soovite kirjutada järgmise juhise? Lihtsalt minge uuele reale. Klõpsake " Sisenema"ja oletegi valmis. IN Rubiin Nagu Python, eraldab uus rida juhised, nii et te ei pea pidevalt semikooloneid kasutama. Kahjuks tähendab see seda nagu fännid C++, me ei saa kirjutada programmi ühe reaga. Aga see pole nii hull, eks?

4.Kõik on objekt, nagu peabki.

Kui ma õppisin Java, mulle öeldi, et kõik on objekt.
- "Mis, 14 ja 374346.678 on objektid?"
- "Ei, rumal, need on numbrid!"

IN Rubiin numbrid, märgid, tõeväärtused ja kõik muu on objekt. Tõsiselt. See tähendab, et saate kirjutada selliseid asju:
"TE EI TOHI ALATI SUURTEID KASUTADA". Väiketähtedega # tagastab "te ei tohiks alati kasutada suurtähti", mitte millegi sellise:
#PHP kood
strtolower("TE EI TOHI" ALATI SUURTÄHTE KASUTADA")
See säästab aega, säästab sulgusid ja on loogilisem.

5. Kõik loeb.

Või "pole vaja seda enam kasutada tagasi väärtuste tagastamiseks." Kiirelt öeldes: kõik Ruby avaldused tagastavad väärtuse, isegi muutujate määramised, nii et te ei pea kasutama märksõna " tagasi" meetodite lõpus. Alati tagastatakse viimase ülesande väärtus.

6. Saate keskkonda muuta igal võimalikul viisil.

Kui ma seda esimest korda nägin, avaldas see mulle muljet. Kujutage ette tüüpilist olukorda: hakkasite kasutama süsteemiklassi või kellegi teise kirjutatud klassi ja mõistsite, et vajate sellesse lisameetodit. Selle probleemi lahendamiseks tavalistes programmeerimiskeeltes on mitu võimalust:
  • Saate muuta klassi lähtekoodi, kui teil on sellele juurdepääs. Kuid tavaliselt on see halb mõte, ära tee seda.
  • Pärite oma klassi sellest ja lisate sellele uue meetodi. Tavaliselt on see hea mõte. Kuid üks meetod võib muuta selle pisut monrolaadseks. Lisaks peate veidi oma teist koodi vastavalt kohandama.
  • Saate lihtsalt luua meetodi väljaspool klassi. See toimib, kuid see pole eriti elegantne ja läheb ka vastuollu OOP.
IN Rubiin saate lisada meetodi algsele klassile ilma lähtekoodi muutmata. Seda saab teha isegi süsteemiklassi jaoks.
Kas tahame lisada meetodi väärtuste teisendamiseks meetritest jalgadeks? Pikendame lihtsalt klassi Numbriline, nagu näidatud:
klass Numbriline
def jalad
ise*3,2808399
lõpp
lõpp

Nüüdsest on kõigil meie numbritel uus meetod, mida saab kasutada nagu kõiki teisigi:
5.jalga # tagastab 16.4041995
Klassid sisse Rubiin kunagi sulgeda ja seda saab igal ajal ja kõikjal laiendada. Seda võimalust tuleb loomulikult kasutada ettevaatlikult!

7.Lindudelt ükssarvikuid ei saa, aga eesleid saab soovi korral.

Mäletan selgelt, kuidas mu õpetaja C++, kasutas loomi, et illustreerida objektorienteeritud programmeerimise põhimõisteid – klassid ja pärimine. Midagi salapärast oli, kui ta selgitas meile mitmekordset pärandit, moodustades "lindudest" ja "hobustest" "Pegasuse". Hullud asjad Rubiin ei võimalda mitmikpärimist. Tundub trendina ja lõpuks on see maitse asi. Ma ei ole mitmekordse pärimise fänn, kuna see võib viia ettearvamatuteni. Vaatamata sellele on moodulite abil võimalik midagi sarnast luua Rubiin, nii et ühe mooduli muutujad ja meetodid lisatakse teatud klassi, kui moodul on selles.

8. XML on tõesti ebavajalik.

XML- ilus, sageli kasutatav märgistuskeel, mida saavad töödelda kõik programmeerimiskeeled ja mida kasutatakse kõikjal. Kahjuks on see kirjutamiseks liiga tülikas, raskesti sõelutav ja, olgem ausad, enamikul juhtudel raskesti loetav. Kuid vaadake järgmist fragmenti:
regexp: !ruby/regexp /a-zA-Z/
number: 4.
string: string

See on kindlasti lihtsam ja lihtsam XML, Tõde? Tere tulemast YAML, lemmik (kuid mitte ainus) märgistuskeel Rubiin, mille abil saab mis tahes objekti esitada lihtsal, ülevaatlikul, kuid terviklikul kujul.
Ruby on võimeline töötama XML, aga lihtsus YAML altkäemaksu paljudele arendajatele, kes seda nüüd hoopis kasutavad XML, näiteks konfiguratsioonifailide jaoks (seda me tegime Rööpad). Ülaltoodud fragment saadi järgmise koodifragmendi käivitamisega:
("string" => "string", "number" => 4.7, "regexp" => /a-zA-Z/).to_yaml
meetod to_yaml, määratletud klassi jaoks Objekt, mis on kõigi teiste objektide vanem ja on seetõttu juurdepääsetav kõikidele objektidele Rubiin. See võimaldab teil objekte teisendada YAML ja vastupidi, arendajale täiesti läbipaistev. Lahe, jah?

9.Lambda on midagi enamat kui lihtsalt kreeka täht.

Rubiin laenanud maagiat Lisp Ja Perl objektideks ja plokkideks Proc. Proc on "koodiplokk, mis on seotud kohalike muutujate komplektiga. Pärast sidumist saab neid kutsuda erinevates kontekstides ja neile muutujatele ikkagi juurde pääseda. Vaatame järgmist.
def gen_times(faktor)
tagasi Proc.uus (|n| n*tegur )
lõpp

Times3 = gen_times(3)
korda5 = gen_times(5)

Times3.call(12) #=> 36
korda5.kõne(5) #=> 25
korda3.kõne(korda5.kõne(4)) #=> 60

Oleks võinud kasutada märksõna lambda selle asemel Proc.new, see ei mõjuta tulemust. See võib tunduda tuttav inimestele, kes teavad Perl Ja Python(või Lisp). Seda saab teha isegi peal PHP, kuid seda võimalust ei kasuta paljud inimesed.
Pealegi sisse Rubiin laialdaselt kasutatakse "loomata" tüüpi plokke Proc", näiteks objekti sisu kordamiseks ja mõne koodi (nt meetodi) käivitamiseks iga klassi jaoks saadaval Massiiv:
.each (|c| paneb c*2) #=> tagastab iga elemendi korrutatuna 2-ga
Kui kood ühele reale ei mahu, on soovitatav kasutada konstruktsiooni tee... lõpp, selle asemel, et kasutada sulgusid. Fännid Rubiin ei meeldi sulgud.

10. Võite kasutada rööpaid.

Last but not least... Võite alati kasutada Rööpad veebirakenduste arendamiseks. Areng ei ole nii lihtne kui selle puhul PHP, Aga Rööpad olid sisse kirjutatud Rubiin, kuna sellel on funktsioone, mida teistes keeltes ei leidu.

Järeldus

Aeg on läbi. Võib-olla mõtlete juba vaatamise peale Rubiin, võib-olla olete seda juba proovinud või olete seda lihtsalt ignoreerinud. Olenemata sellest, järgmine kord, kui vaatate oma koodi ja see tundub hirmutav ja selle suurus on hirmutav, ärge mind süüdistage.

Kallid lugejad – ärge unustage, et Habrauser tõlkis teksti lihtsalt ära (jah, jah). Tal pole vaja ideoloogilisi väiteid väljendada.

Igal juhul tasub oma sõnu põhjendada. Püüan meile näidata keele ilu, miks me seda nii väga tükeldame ja hellitame.


Ruby on kõrgetasemeline programmeerimiskeel (LP). Ruby võimaldab teil koodi kirjutamisel nihutada rõhku rohkem "mida teha" poole ja eemalduda rumalale arvutile "kuidas seda teha" selgitamisest. Nagu ta ütleb Matz inimene peab kontrollima ja masin kuuletuma.
Tõlk - rubiini keele tõlk - selgitab, kuidas teie soov täita. Jaapanlased on väga uhke rahvas, samuraide järeltulijate rahvas, kus feodaalsed harjumused hõõguvad endiselt.

Ruby on tõlgendatud programmeerimiskeel. Ma juba ütlesin, et kui sa räägid sellele lollile riistvarale 5.x (paneb “tere!”), siis ta ei saa sellest ilma tõlgita aru. Programmeerimiskeeli, mis nõuavad tõlki, mis loeb neis kirjutatud skripte, nimetatakse tõlgendatud keelteks. Selliste keelte näited on (php, python, perl, bash ja meie enda suurepärane!)
Keeli, mille kood on programmiks teisendatud, nimetatakse kompileeritud. Selliste keelte näited on (C/C++, C#, GO)

Erinevus seisneb selles, et kompileeritud programmid kompileeritakse üks kord mitmeks kasutamiseks, samas kui tõlgitud keeltes kirjutatud programme tõlgendatakse iga kord, kui neid käivitatakse, mistõttu on need aeglasemad, kuid alati avatud lähtekoodiga :D

Kiirus on oluline, kuid see pole kõige olulisem. Ruby on palju aeglasem kui C ja isegi aeglasem kui Asembler, kuid see ei takista Rubyl kogumast üha uusi fänne, kes põletavad oma vanade jumalate pilte, lõhuvad nende teemante ja pöörduvad Ruby programmeerimise uue särava religiooni poole.
Ruby võimaldab teil kirjutada rakendusi nii kiiresti, et lähete pankrotti, palkades spetsiaalse C-programmeerijate meeskonna, kes kirjutab programmi, mis teeb samu toiminguid. Lisaks, kui sul on vaja enne homset mingi finantsarvestus välja arvutada, siis kas sul on vahet, kas see arvutatakse 10 sekundiga või 0,1 sekundiga?
Isegi kui jõudlus on teie jaoks väga oluline, on Rubyl tohutul hulgal C-keeles kirjutatud teekide, erinevate andmebaaside ja muu tarkvara draivereid, nii et saate Rubysse koodi kirjutades C kiiruse.
Ruby võimaldab kirjutada ka C-keeles laiendusi koodi kriitiliste osade jaoks, st nende jaoks, kus jõudlus on äärmiselt oluline (seda kõike seetõttu, et Ruby ise on kirjutatud C-keeles mitte täielikult, vaid üsna suur osa sellest). Peaksite harjuma sellega, et pole olemas universaalset programmeerimiskeelt, mida teades ei pea te midagi muud teadma.

Rubyl on palju nägusid aga iga näoga on ta ilus. Seal on standardne Ruby rakendus, mida nimetatakse Matz Ruby Interpreteriks (MRI). Alates harust 1.9 ja jätkates praeguseni, kasutatakse teistsugust YARV-i tõlgendajat.
Java virtuaalmasina (JRuby) jaoks on olemas ka Ruby, mis võimaldab teil kasutada kõiki paljusid Java- ja muudes JVM-is töötavates keeltes kirjutatud teeke, nagu Scala või Clojure.
Seal on MacRuby - versioon Mac OS X jaoks.
Ruby Enterprise Edition (Ruby EE või REE) on veidi ümber kujundatud MRI, mis võimaldab Ruby programmidel vähem RAM-i tarbida.
Samuti on olemas erinevad patenteeritud arendused, mis võimaldavad teil asendada originaalsed Ruby komponendid funktsionaalselt rikkalikumate ja kiiremate vastu, kuid kuna selliseid arendusi on lahingutingimustes tavaliselt halvasti testitud ja neid ei kasutata laialdaselt, ei soovita ma teil seda teha. neid kasutada. Kasutage Ruby ametlikke versioone.
Lisaks kirjeldatud Ruby teostustele on neid veel palju, näiteks Rubinius ja Ruby MagLev ja nii edasi. Ma ei tea, mis on nende eripära, kuid ma mõtlen selle kindlasti välja ja avaldan selle õpiku ühes järgmistest versioonidest.

Ruby on dünaamiline programmeerimiskeel. See tähendab, et Ruby programmid on dünaamilised. Loomisel pole vaja piirangut seada. Ja te ei ületa kunagi numbrilisi andmetüüpe.
Rubyl on väga laialdased metaprogrammeerimisvõimalused, nii et iga keel kadestaks neid. Peaasi, et see on abstraktsioon ja see on tõesti tõhus lähenemine programmeerimisele, mis võimaldab teil kirjutada tõeliselt võimsaid, rikkalikke ja funktsionaalseid rakendusi.

Ruby on sisutihe. Ruby keeles kirjutatud programmid on väga sisutihedad ja arusaadavad. Selle põhjuseks on selle kõrgetasemeline ja dünaamiline olemus ning nõrk trükkimine.
Ma ei tea ühtegi keelt, mis ületaks Rubyt teatud funktsioonide rakendamiseks kõige vähemate koodiridade poolest. Kahtlustades, et praegu selliseid inimesi pole) 2015. aasta ajal või on nad nii segaduses ja hirmutavad, et kardavad end näidata.

Ruby on nõrgalt tipitud programmeerimiskeel. Mõnes teises programmeerimiskeeles peaksite deklareerima muutujas salvestatud andmete tüübi, kuid muutuja ei saa salvestada teist tüüpi andmeid. Programmeerimise adeptid eesotsas Yakihiro Matsumotoga on teinud kõvasti tööd selle nimel, et saaksite muutujaid kasutada absoluutselt mis tahes väärtuste salvestamiseks ilma neid eelnevalt deklareerimata.

Ruby on objektorienteeritud programmeerimiskeel. Objektorienteeritud lähenemine programmeerimisele pole sugugi uus ja on tõestanud mitte ainult oma õigust elule, vaid ka tõhusust! Objektorienteeritud programmeerimist (OOP) on pikka aega peetud koodi kvaliteedi ja skaleeritavuse sünonüümiks.
OOP on üsna populaarne lähenemine tarkvaraarendusele, mis lihtsustab ja kiirendab arendust, muudab koodi arusaadavamaks, struktureeritumaks ja laiendatavamaks. Kõik on loodud abstraktsioone kasutades, justkui oleksid meie mudelites olevad objektid reaalsed. Rubys on OOP rakendatud eriti elegantselt, baasklassi tasemel on maagiat, kuid see ei ole nii oluline, arvestades keele rakendamist üldiselt.

Ruby on lihtne programmeerimiskeel. Ruby on kergesti arusaadav programmeerimiskeel, mida on lihtne arendada, kuid mitte lihtsalt õppida :). Muidugi võite kirjutada rakenduse, mis kuvab teie tutvuse esimesel sekundil klassikalist fraasi "tere maailm", muide, siin see on: paneb "tere sõna!", Tõelise meisterlikkuse saavutamiseks peaksite aga kulutama. aastat!
Rubyt PHP-ga võrrelda ei saa, see on nagu elegantse kinoa võrdlemine mingi hanega, aga ma toon selle ohverduse ja teen ära. Ruby keelt iseenesest pole palju keerulisem õppida kui PHP-d, kuid see on palju mugavam ja loogilisem. Ruby ökosüsteem ise on keerulisem, kuna Ruby programmeerijad on harjunud kõike automatiseerima ja ma ei räägi tõenäoliselt mitte ainult tõtt, vaid tõtt, kui ütlen teile, et rubiinid on selles valdkonnas palju kaugemale jõudnud kui ükski teine ​​programmeerijate kogukond. See automatiseerimine sunnib arendajat uurima paljusid kolmandate osapoolte tehnoloogiaid, kuid see lihtsustab ja vähendab kõrvalprotsessidele kuluvat aega (testimine, rakenduse juurutamine serveris jne). PHP-l pole seda kõike või see kõik on täiesti primitiivne! Kõige huvitavam on see, et umbes 25% PHP programmeerijatest ei kasuta raamistikke ja toodavad nõmedat koodi, proovige leida Ruby programmeerija, kes pole Rails raamistikuga tuttav!
Peamine asi, mida meeles pidada, on see, et enamik Ruby programmeerijaid on eksperdid, arendusprofessionaalid. Ja selle poole peaksite alati püüdlema. Ainult ühel viisil ja mitte teisiti, vaid radikaalne lähenemine sellele küsimusele. Sa ei saa olla halb Ruby programmeerija, kas sa oled professionaal või sa ei ole Ruby arendaja!

Ruby and Rails on natuke tainas! Rails ehk Ruby on Rails on raamistik Ruby keeles kirjutatud veebirakenduste loomiseks. Rails on tõeline revolutsioon veebiarenduse maailmas. Rails on väga võimas raamistik, mis kasutab maksimaalselt kõiki Ruby funktsioone, millel on tohutu professionaalsete programmeerijate kogukond, kes toodavad niigi rikkalike funktsionaalsuste jaoks kvaliteetseid laiendusi.

Ruby on ju tavatehnoloogia! Paljud inimesed ütlevad, et Ruby on vähe populaarne programmeerimiskeel, kuid see on üks 10 populaarseimast keelest, sellel on tohutu kogukond ja tohutu hulk raamatukogusid - rubygeme.
Muide, Ruby kalliskivide olemasolu on PHP ees veel üks eelis! PHP-s on tuim Pear, mille kirjutavad ahvid, kes teesklevad astronauti, seda saab hinnata selle järgi, et Pear koodides leiti palju inimesele sarnast allapanu, kuid me teame, et inimesed pole võimelised sellest.
Ja üldiselt ma lihtsalt patustasin RubyGemsi ja Peari võrdlemisega. Ruby's on ellu viidud tohutult palju suuri edukaid projekte, mis tõestab Ruby edukat valikut veebiprojektil põhineva ettevõtte ülesehitamise lahutamatuks osaks. Rubyl, nagu ka Pythonil, mis kuulub ka 10 populaarseima programmeerimiskeele hulka, puudub üks väga suur peavoolutehnoloogiate viga – Ruby ei ole programmeerijatest üleküllastunud, Ruby programmeerijaid on endiselt vähe, mis tähendab sinu tulevast palka Ruby programmeerijana. on palju kõrgem võrreldes nendega, kes programmeerivad PHP või Java keeles. Isegi kui nõudlus Ruby programmeerijate järele on täielikult rahuldatud, teenib Ruby programmeerija rohkem, kuna on kaks väga olulist tegurit: kõrgem koodi kvaliteet ja suurem tootlikkus.

Rubyistid on kõige tainast armastav rahvahulk. Ma ei tea, kas see on tõsi, kuid see on tõsiasi, et Ruby programmeerijad on oma koodi testimisel selgelt jõudnud väga kaugele! Iga rohkem või vähem kogenud Ruby programmeerija kirjutab oma koodile spetsifikatsioonid ja/või testid. See muudab Ruby koodi usaldusväärsemaks ja kvaliteetsemaks.

Rubiini kogukond on rohkem kvalifitseeritud kui paljud teised kogukonnad. Esiteks räägime PHP-st – kogukonnast, mis on friikide kasvatamisel väga viljakas.
Iga koolilaps, kes nädalaga PHP põhitõed selgeks sai ja oma vildaka veebilehe kirjutas, karjub juba igast nurgast, et ta on PHP programmeerija. Ei, ma ei vihka lapsi, see, mida te uurite ja loote, on imeline. Kuid on üks nüanss: igale teile adresseeritud sõnale peate mingil viisil reageerima. Üldiselt ära ole üleolev, vaid täienda ennast, tee seda, mis sulle meeldib. Ja see on meie elus peamine!

Kõik, kes programmeerivad Ruby keeles, ei ole programmeerija tiitlit väärt, näiteks mina pole seda väärt, sest mul on äärmiselt vähe kogemusi ja täiesti ebapiisav teadmistepagas, aga kui võtta haiglas keskmist temperatuuri, siis Ruby kogukond. on PHP kogukonnast oluliselt parem. Ma ei räägi teistest programmeerimiskeeltest, kuna Python, Java ja Perl on Ruby kogukonna peamised uute liikmete eksportijad, see tähendab, et paljud Ruby programmeerijad saavutasid oma meisterlikkuse teiste programmeerimiskeeltega töötades ja omandasid piisavalt teadmised ja kogemused, muudetud rubiini usundiks. Lisaks programmeerivad paljud inimesed, kes programmeerivad Ruby keeles, ka Pythonis ja Perlis ning Javas, C-s, Objective-C-s, javascriptis ja, uskuge või mitte, PHP-s.

Sissejuhatus

Tänapäeval on otsingumootor küberruumis üks enim kasutatavaid navigeerimismeetodeid, mis kasvab ja täieneb iga päevaga. On selge, et infootsingu algoritmid peavad oma keerukust ja tõhusust pidevalt suurendama. Käesoleva töö eesmärk ei ole kirjeldada infootsingu algoritme, vaid lihtsalt anda neile sissejuhatav kirjeldus. Samuti on antud töö eesmärgiks kirjutada otsingu veebirakendus Ruby programmeerimiskeeles.

Eelnevat arvesse võttes saab püstitada järgmised eesmärgid:

Infootsingu algoritmide tutvustus

Otsingu veebirakenduse kirjutamine

Seatud eesmärgid saavutatakse ülesannete abil:

Otsinguteooria uurimine

Ruby programmeerimiskeele õppimine

Sissejuhatus Hamli märgistuskeelde

Sassi metakeele tutvustamine

Kodeerige veebirakendus Ruby, Hamli ja Sassi abil

Siluge saadud rakendus

Teoreetiline osa

Infootsingu teooria

Esiteks peate määratlema otsingumootori.

Otsingusüsteem - veebiliidesega tarkvara- ja riistvarakompleks, mis annab võimaluse otsida teavet Internetist.

Otsingumootorid liigitatakse nende täidetavate funktsioonide ja lahendatavate ülesannete põhjal järgmisteks osadeks:

viiteteave on kõige levinum infosüsteemide funktsiooni tüüp ja see seisneb süsteemi abonentidele võimaluse hankida teatud objektiklasside kohta installiandmeid;

Otsingumootorid on kõige levinum infosüsteemide klass. Üldiselt võib seda käsitleda teatud inforuumina, mis on määratletud ainevaldkonna infoloogilise kirjelduse kaudu);

arvutatud Süsteemi ülesanne on töödelda süsteemis asuvat teavet vastavalt teatud arvutusalgoritmidele erinevatel eesmärkidel.

Salvestatud teabe loogilise korralduse pakkumise olemuse järgi jagunevad otsingusüsteemid faktiliseks, dokumentaalseks ja geoinformatsiooniks.

Seega koguvad ja salvestavad faktilised otsingumootorid andmeid üht või mitut tüüpi struktuurielementide mitme eksemplari kujul. Kõik need struktuurielementide juhtumid või nende kombinatsioon peegeldavad teavet mõne fakti või sündmuse kohta. Igat tüüpi teabeobjekti struktuur koosneb lõplikust detailide hulgast, mis kajastavad antud teemavaldkonna objektide teabe põhiaspekte ja omadusi.

Dokumendiotsingu süsteemides on üksik teabeelement dokument, mis ei ole jagatud väiksemateks elementideks ja teave sisestamisel on reeglina struktureerimata või struktureeritud piiratud kujul. Sisestatud dokumendile saab määrata mõned vormistatud ametikohad - valmistamise kuupäev, kunstnik, teema. Teatud tüüpi dokumentaalsed infosüsteemid tagavad sisestatud dokumentide vahel loogilise seose loomise - semantilise sisu alluvuse.

Geoinfoandmetes on andmed korrastatud eraldi teabeobjektidena, mis on seotud ühise elektroonilise topograafilise alusega. Geograafilisi infosüsteeme kasutatakse teabe toetamiseks nendes ainevaldkondades, teabeobjektide struktuuris ja protsessides, milles on geograafiline komponent.

Samuti on olemas järgmine otsingumootorite klassifikatsioon (joonis 1.)

Joonis 1. Otsingumootorite klassifikatsioon

Otsingumootoritest rääkides tasub mainida otsingupäringute teooriat ja nende klassifikatsiooni. Nii kirjeldas 1949. aastal Harvardi filoloogiaprofessor mõningaid teabeotsingu tunnuseid.

Professor Zipf märkas, et pikki sõnu leidub mis tahes keele tekstides harvemini kui lühikesi. Selle tähelepaneku põhjal tuletas Zipf kaks seadust:

Esimene seadus seob sõna esinemissageduse (esinemissageduse) selle sageduse astmega. Kõige sagedamini esinevatele sõnadele määratakse auaste ühega. Need sõnad, mis on vähem levinud - auaste võrdub kahega jne. Zipf avastas, et sõna sageduse ja selle järgu korrutis on konstant.

Seda sõltuvust esindab tavaliselt hüperbool. Zipf-konstandi väärtus on erinevate keelte puhul erinev, kuid ühe keelerühma piires jääb see muutumatuks. Vene keele puhul on konstant ligikaudu 0,06-0,07.

Zipf tegi kindlaks, et ka sõnade esinemissagedus ja etteantud sagedusega tekstis sisalduvate sõnade arv on omavahel seotud.

Ühest küljest säilitab saadud kõver oma parameetrid kõigi sama keele tekstide jaoks. Teisest küljest, olenemata sellest, mis keeles tekst on kirjutatud, jääb Zipfi kõvera kuju muutumatuks. Ainult koefitsiendid erinevad.

Zipfi seadused on universaalsed. Need ei kehti ainult tekstide kohta. Näiteks linnade ja neis elavate elanike arvu seos võtab sarnase kuju. Internetiressursside populaarsuse omadused vastavad Zipfi seadustele. Zipfi seadused peegeldavad objektide "inimlikku" päritolu.

Igal juhul saab iga otsingupäringu liigitada kolme tunnuse järgi: päringu pikkus, päringu selgus, otsinguetapp.

Seega on pikkuse järgi kõik taotlused jagatud

Ühesõnaline ("reklaam")

Kahesõnaline ("otsingumootori reklaamimine"

Kolmesõnaline ("professionaalne otsingumootori reklaamimine")

Paljusõnaline ("professionaalne otsingumootori reklaamimine odav"

Selguse huvides on kõik taotlused jagatud järgmisteks osadeks:

Selge päring ("ipad 2 hind")

Hägupäring ("Osoon", mis võib olla gaas ja kaupluse nimi ja direktori nimi)

Vastavalt otsinguetapile jagunevad kõik päringud järgmisteks osadeks:

Probleemi teadvustamine ("sait ei tööta")

Lahenduse leidmine (“veebisaidi hostimine”)

Lahenduse valimine ("millist hostimist valida")

Tehingu asukoha leidmine (“masterhosti hostimise tariifid”)

RUBY programmeerimiskeel

Ruby on dünaamiline, peegeldav, tõlgendatav kõrgetasemeline programmeerimiskeel kiireks ja lihtsaks objektorienteeritud programmeerimiseks. Keeles on operatsioonisüsteemist sõltumatu multithreading, tugev dünaamiline tippimine, prügikoguja ja palju muid funktsioone. Ruby on süntaksiomaduste poolest lähedane Perli ja Eiffeli keeltele ning oma objektorienteeritud lähenemise poolest Smalltalkile. Ka mõned keele funktsioonid on võetud Pythonist, Lispist, Dylanist ja Clu-st. Tänapäeval on Ruby interpretaator rakendatud peaaegu kõikidele platvormidele (Unix, Win32, OS X). Keele looja on Yukihiro Matsumoto.

Ruby on täielikult objektorienteeritud programmeerimiskeel. Kõik on objektid ja funktsioonid on nende objektide meetodid.

Rubiini peamised omadused:

Tõlgendatud keel:

Süsteemi otsekõnede võimalus.

Võimas tugi stringide ja reeglitega tehtetele (regulaaravaldised).

Arengu käigus toimunud muutuste kohene ilming.

Koostamisetappi pole.

Lihtne ja kiire programmeerimine:

Muutujaid pole vaja deklareerida.

Muutujad trükitakse dünaamiliselt.

Lihtne ja ühtlane süntaks.

Automaatne RAM-i haldus.

Objektorienteeritud programmeerimine:

Kõik on objekt. Isegi klassi nimi on klassi klassi eksemplar.

Klassid, meetodid, pärilikkus, polümorfism, kapseldamine ja nii edasi.

Üksikud meetodid.

Mixins kasutades mooduleid (võimalus laiendada klassi ilma pärandita);

Iteraatorid ja sulgemised.

Laialdased metaprogrammeerimise võimalused.

Teenused:

Piiramatu täisarvu väärtuste vahemik.

Erandjuhtimise mudel.

Kõik operaatorid tagastavad väärtused, isegi juhtstruktuurid.

Erandi püüdmise mehhanism.

Voo tugi; nii native kui UNIX-i perekonna süsteemid.

Puudused:

Mõnede protsesside kontrollimatus (näiteks mälu eraldamine), võimetus määratleda madala taseme andmestruktuure või alamprogramme;

Programmi koostamise ja sellega kaasneva optimeerimise võimatus;

Avatud lähtekood isegi valmisprogrammis

Kahe esimese puuduse tagajärjeks on programmide käivitamise ja täitmise väga madal kiirus.

Samuti väärib märkimist, et Ruby jaoks on palju mooduleid (lisandmooduleid) peaaegu igat tüüpi ülesannete jaoks (liidese programmeerimine, keerulised matemaatilised arvutused, heli, video, 3D jne töö). Seetõttu valiti see programmeerimiskeel praktilise osa kirjutamisel peamiseks.

1.3. Lihtsustatud märgistuskeel HAML

Haml on märgistuskeel lihtsustatud XHTML-i genereerimiseks. HAML kompileerib HTML-i. Haml on palju lihtsam kui HTML, kuna võimaldab veebirakenduste kirjutamist lihtsustada ja kiirendada.

Näiteks see koodijupp on Hamlis

%html( html_attrs("ru") )

%title Minu blogi

%meta(http-equiv="Content-Type" content="text/html; charset=utf-8")

Stylesheet_link_tag "peamine"

%h1 Minu blogi

%h2 kirjet

- @entries.each teevad |entry|

%h3.title= entry.title

%p.date= entry.posted.strftime("%A, %B %d, %Y")

%p.body= entry.body

Kõik õigused kaitstud © Ivan

HTML-kood muudetakse

Minu blogi