RUBY-programmeertaal. Ruby voor beginners: waarom deze taal interessant is en hoe je deze effectief kunt leren

Taal Ruby-programmering is een puur objectgeoriënteerde programmeertaal die oorspronkelijk is ontworpen voor scripting. Het combineert een syntaxis die is geïnspireerd door de objectgeoriënteerde functies van Ada en Perl en Smalltalk, en heeft dat ook gedaan gemeenschappelijke kenmerken met Python, Lisp en opdrachtregelhulpprogramma is een pluspunt bij het leren van de basisprincipes van programmeren.
De programmeertaal Ruby heeft momenteel slechts één implementatie van de Ruby-interpreter, hoewel er pogingen worden gedaan om een ​​Ruby-interface (genaamd "Cardinal") te implementeren voor virtuele machine Papegaai.
De programmeertaal Ruby heeft er veel nuttige functies. Ruby ondersteunt ook overbelasting van operators en afhandeling van uitzonderingen. Momenteel ontbeert de programmeertaal Ruby Unicode-ondersteuning. Ruby heeft iterators (die doen denken aan CLU en Sather). Ruby ondersteunt abstracte functierepresentaties (net als Smalltalk en vele functionele talen programmeren voor beginners). Ruby heeft ingebouwde, syntactische ondersteuning voor regulier Perl-expressies op taalniveau (en niet alleen in bibliotheken, zoals in Python en vele andere talen). Ruby ondersteunt automatische incasso afval en dynamische bibliotheek laden/aansluiten van modules (afhankelijk van architectuur) naar Microsoft Windows. Ruby is geschikt gemaakt voor vele platforms, waaronder Unix, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga en meer.
Ruby is puur objectgeoriënteerd: elk stukje objectgegevens, inclusief typen die in andere talen als "primitief" worden gedefinieerd. Elke functie is een methode. Het is vergelijkbaar met Smalltalk, maar fundamenteel anders dan Java en Python. Elke waardenaam (variabelenaam) in een Ruby-programma specificeert een verwijzing naar een object, niet naar het object zelf. Ruby ondersteunt overerving met dynamische verzending, Mixins en Singleton-methoden. Ruby ondersteunt geen meervoudige overerving, maar klassen kunnen modules importeren. Hoewel je in Ruby procedurele syntaxis kunt gebruiken, is alles in Ruby een object in de zin van Smalltalk, en niet Perl of Python-programmering voor dummies.
De taal werd op 24 februari 1993 gemaakt door Yukihiro Matsumoto (ook bekend als "Matz"). Huidig stabiele versie 1.8.0. Merk op dat de naam geen acroniem is; het is eigenlijk een woordspeling met woorden als Perl. Volgens de auteur is Ruby ontworpen volgens het Principle of Least Surprise (POLS), wat betekent dat de taal vrij moet zijn van de valkuilen en inconsistenties waar andere talen last van hebben.
Uit de Ruby FAQ: Als je Perl leuk vindt, dan zul je Ruby met veel plezier gebruiken vanwege de syntaxis ervan. Als je van Smalltalk houdt, zul je Ruby en zijn semantiek ook leuk vinden. Als je van Python houdt, merk je misschien wel of niet een enorm verschil in ontwerpfilosofie tussen Python en Ruby/Perl.
Ruby is gratis en open source. GPL-licenties of artistieke licentie, zoals Perl.

Voorbeelden
Hier zijn enkele voorbeelden van Ruby-code:

>> -199.abs # nummer -199 is een object; daarvoor is de ABS-methode nodig. => 199 >> "Ruby is cool".length # methode aangeroepen String-object– tekenreekslengte => 13 >> "Rick".index("c") => 2 >> "John".swapcase => "jOHN" >> #Arrays ?> .sort => >> .sort.reverse = > # het volgende codeblok wordt 10 keer uitgevoerd 10.times (# Vervang " " door ", " en sla het op in string1 string1 = "Hallo wereld".gsub(" ", ",") # voeg "!" toe aan variabele "string1" string1 += "!" # print variabele "string1", gevolgd door een nieuwe regel zet string1 )

Hoe word je een website-ontwikkelingsprofessional en begin je geld te verdienen? Voordelige videocursussen met een inleidende introductie.

  • Vertaling

Ik ontmoette Robijn relatief recentelijk, dankzij een prachtig raamwerk Robijn op rails. Ik beschouw mezelf niet als een Ruby-expert, maar ik heb PickAxe gelezen, verschillende hulpprogramma's in Ruby geschreven voor persoonlijk gebruik, en in mijn vrije tijd ook in Rails ontwikkeld.

Robijn aan op dit moment, mijn hoofdtaal. Ik begon met TurboPascal op school, gestudeerd C En C++ aan de universiteit, schreef een proefschrift over Java, en ik heb ook gestudeerd PHP helemaal opnieuw, omdat ik wilde leren hoe ik snel en gemakkelijk websites kon maken. Ik denk dat het schrijven van code voor mij een vorm van entertainment is, en dan al het andere. In het begin had ik gedachten over welke taal ik moest studeren, Python of Robijn. Ik koos voor de tweede omdat ik niet wilde dat onjuiste inspringingen problemen in mijn code zouden veroorzaken.

Er zijn een hele reeks introducties, tutorials, artikelen en essays geschreven door goeroes over hoe je het meeste uit Ruby kunt halen. Dit artikel is daar niets van.

Dit is een meer bescheiden, niet-uitputtende lijst van redenen die u wel (of niet) kunnen motiveren om Ruby te gebruiken, of in als laatste redmiddel speel met hem. Een waarschuwing: als u een andere programmeertaal gebruikt voor werk of andere doeleinden, klaag dan niet bij mij als u deze niet meer wilt gebruiken.

Dit is precies wat mij overkwam, maar voor mij is het niet zo belangrijk. Robijn is een prachtige en elegante taal en zoals veel van dit soort dingen kan het je geest veroveren en je ziel breken.

Kortom: u bent gewaarschuwd.

Waarom Ruby leren?

Robijn 1.Je krijgt alle gemakken (plezier) zonder de gimmicks. het beste van andere programmeertalen geleend, van praatje Java naar , van praatje Python Perl . Hier basismogelijkheden
  • , die je in principe ook in andere talen zou kunnen zien: Uitzonderingen. Geloof het of niet, uitzonderingen zijn een van de belangrijkste dingen bij het ontwikkelen van programma's van welke aard dan ook. Programmeurs bij PHP4 Robijn, weet er niets van en zal je vertellen dat je gewoon (fouten) naar het scherm kunt afdrukken of hun eigen "super-duper" -klasse kunt gebruiken om fouten af ​​te handelen. Gelukkig voor ons allemaal, komt met proberen/vangen (of beter nog beginnen/redding
  • )-blokken en een reeks vooraf gedefinieerde, uitbreidbare uitzonderingen, voor correcte foutafhandeling. Robijn Naamruimten: Modules C++ En Java.
  • maak het gebruik van naamruimte eenvoudig, dit zou liefhebbers moeten aanspreken , van Ingebouwde reguliere overtuigingen: voor alle experts // , je kunt er iets in omsluiten en het wordt reguliere expressie =~ ).
  • , klaar voor vergelijking (hiervoor gebruiken we de operator Robijn Overbelasting van de machinist: +, -, > Hiermee kunt u operatoren definiëren zoals
  • enz. voor al je lessen. Pakketten: genaamd " edelstenen
  • "(kiezels), ze doen hun naam echt eer aan, bovendien werken ze. Pakketten ondersteunen afhankelijkheden en kunnen ook platformonafhankelijk of platformafhankelijk zijn. Python

Interactieve console: Kan worden gebruikt om code interactief te testen, zoals een console

Robijn 2.Je zult genieten van de kleine dingen.
  • bevallig Waarom? Omdat hij niet probeert de code zo beknopt te maken dat dit de leesbaarheid en het begrip in de weg staat. Er zijn enkele tips die u kunnen helpen: U kunt beide operatoren gebruiken, En als tenzij U kunt beide operatoren gebruiken, in voorwaardelijke uitdrukkingen. Natuurlijk kun je gebruiken als met de tegenovergestelde betekenis van de uitdrukking, maar met behulp van
  • resulteert meestal in minder fouten. Bovendien kunt u beide operators gebruiken als voorwaardelijke modifiers door ze na de expressie te plaatsen in plaats van ervoor: order.new tenzij order.exists ? U kunt vraagtekens en uitroeptekens gebruiken aan het einde van de methodenaam. Deze overeenkomst wordt niet opgelegd, maar het teken " " wordt gebruikt wanneer de methode terugkeert WAAR of, terwijl het bord " ! » wordt gebruikt voor methoden die iets onomkeerbaars doen, zoals het verwijderen van een record uit een database, het splitsen ervan laatste teken uit een touwtje, enz.
  • U kunt aliassen gebruiken ( alias) voor reeds gemaakte methoden. Op deze manier kun je de methoden verkrijgen bestaan En bestaat, geen overhead en geen herhaling.
  • Je kunt gebruik maken van richtlijnen attr_lezer, attr_schrijver WAAR attr_accessor Voor automatische creatie getter/setter voor klasgenoten.
  • En nog wat naamgevingsconventie: constanten, klassen en modules worden geschreven met hoofdletter, methoden en klasseleden moeten beginnen met een kleine letter, globale variabelen krijgen een naam die begint met " $ ", de namen van objectvariabelen beginnen met " @ ", en namen van klassenvariabelen met " @@ ", nou ja, enz.
  • Bij het aanroepen van methoden hoeft u geen haakjes te schrijven. U kunt schrijven File.open("/home/h3rald/test.txt") of gewoon File.open "/home/h3rald/test.txt", wat vooral handig is bij methoden zonder argumenten.

3. U hoeft geen puntkomma's meer te gebruiken.

Wilt u de volgende instructie schrijven? Ga gewoon naar een nieuwe regel. Klik op " Binnenkomen"En je bent klaar. IN Robijn zoals in Python scheidt de nieuwe regel de instructies, zodat u niet altijd puntkomma's hoeft te gebruiken. Helaas betekent dit dat net als de fans C++, kunnen we geen programma op één regel schrijven. Maar dat is toch niet zo erg?

4.Alles is een object, zoals het zou moeten zijn.

Toen ik studeerde Java, Er werd mij verteld dat alles een object is.
- “Wat, 14 en 374346.678 zijn objecten?”
- “Nee, gek, dit zijn cijfers!”

IN Robijn cijfers, tekens, booleans en al het andere is een object. Ernstig. Dit betekent dat je dingen als deze kunt schrijven:
"JE MOET"NIET ALTIJD HOOFDLETTERS GEBRUIKEN".lowcase # retourneert "je moet niet altijd hoofdletters gebruiken" in plaats van zoiets als dit:
#PHP-code
strtolower("JE MOET"NIET ALTIJD HOOFDLETTERS GEBRUIKEN")
Dit bespaart tijd, bespaart haakjes en is logischer.

5.Alles is belangrijk.

Of “je hoeft het niet meer te gebruiken opbrengst om waarden terug te geven." Om het snel zo te zeggen: alle instructies in Ruby retourneren een waarde, zelfs variabele toewijzingen, dus je hoeft ze niet echt te gebruiken trefwoord « opbrengst" aan het einde van de methoden. De waarde van de laatste opdracht wordt altijd geretourneerd.

6. Je kunt de omgeving op elke beschikbare manier veranderen.

De eerste keer dat ik dit zag, was ik onder de indruk. Voorstellen typische situatie: je begon een systeemklasse te gebruiken of een klasse die door iemand anders was geschreven en besefte dat je er een paar nodig had aanvullende methode daarin. Er zijn verschillende manieren om dit probleem op te lossen in typische programmeertalen:
  • Je wijzigt de broncode van de klasse als je er toegang toe hebt. Maar meestal is dit een slecht idee, doe het niet.
  • Je erft je klasse daarvan en voegt er iets aan toe nieuwe methode. Meestal is dit - goed idee. Maar één methode kan het een beetje monro-achtig maken. Bovendien zult u uw andere code dienovereenkomstig enigszins moeten aanpassen.
  • U kunt eenvoudig een methode buiten de klasse maken. Dit zal werken, maar het zal niet erg elegant zijn, en het gaat ook tegen OOP.
IN Robijn je kunt een methode aan de originele klasse toevoegen zonder de broncode te bewerken. Dit kan zelfs voor een systeemklasse worden gedaan.
Willen we een methode toevoegen om waarden van meters naar voeten om te rekenen? Laten we de klas gewoon uitbreiden Numeriek zoals afgebeeld:
klasse Numeriek
zeker voeten
zelf*3,2808399
einde
einde

Vanaf nu hebben al onze nummers een nieuwe methode die net als alle andere kan worden gebruikt:
5.feet # retourneert 16,4041995
Klassen binnen Robijn nooit dichtbij en kan altijd en overal worden uitgebreid. Vanzelfsprekend moet deze mogelijkheid met voorzichtigheid worden benut!

7. Je kunt geen eenhoorns van vogels krijgen, maar je kunt wel ezels krijgen als je wilt.

Ik herinner me duidelijk hoe mijn leraar C++, gebruikte dieren om de basisconcepten van objectgeoriënteerd programmeren te illustreren: klassen en overerving. Er was iets mysterieus toen ze ons de meervoudige erfenis uitlegde, waarbij ze een ‘Pegasus’ vormde uit ‘vogels’ en ‘paarden’. Gekke dingen Robijn staat niet toe meerdere erfenissen. Het lijkt een trend en uiteindelijk is het een kwestie van smaak. Ik ben geen fan van meervoudige erfenis, omdat dit tot onvoorspelbare dingen kan leiden. Desondanks is het mogelijk om met modules iets soortgelijks te creëren Robijn, zodat variabelen en methoden van één module aan een bepaalde klasse worden toegevoegd als de module daarin is opgenomen.

8. XML is echt niet nodig.

XML- een prachtige, veelgebruikte opmaaktaal die door alle programmeertalen kan worden verwerkt en overal wordt gebruikt. Helaas is het te omslachtig om te schrijven, moeilijk te ontleden en, laten we eerlijk zijn, in de meeste gevallen moeilijk te lezen. Maar kijk eens naar het volgende fragment:
regexp: !ruby/regexp /a-zA-Z/
aantal: 4.
touwtje: een touwtje

Het is absoluut gemakkelijker en eenvoudiger XML, Waarheid? Welkom bij YAML, een favoriete (maar niet de enige) opmaaktaal Robijn, met behulp waarvan elk object in een eenvoudige, beknopte maar volledige vorm kan worden gepresenteerd.
Ruby kan ermee werken XML, maar eenvoud YAML heeft veel ontwikkelaars omgekocht die het nu in plaats daarvan gebruiken XML, bijvoorbeeld voor configuratiebestanden (dit is wat we deden in Sporen). Het hierboven gepresenteerde fragment werd verkregen door het volgende codefragment uit te voeren:
("string" => "een string", "nummer" => 4.7, "regexp" => /a-zA-Z/).to_yaml
Methode naar_yaml, gedefinieerd voor klasse Voorwerp, dat de ouder is van alle andere objecten en daarom toegankelijk is voor alle objecten Robijn. Hiermee kunt u objecten converteren naar YAML en omgekeerd, absoluut transparant voor de ontwikkelaar. Cool, toch?

9.Lambda is meer dan alleen een Griekse letter.

Robijn heb wat magie geleend van Lisp En , van in objecten en blokken Proc. Proc is “een codeblok dat is gekoppeld aan een reeks lokale variabelen. Eenmaal gebonden, kunnen ze in verschillende contexten worden opgeroepen en hebben ze nog steeds toegang tot die variabelen." Laten we eens kijken naar het volgende:
def gen_times(factor)
return Proc.nieuw (|n| n*factor )
einde

Times3 = gen_times(3)
keer5 = gen_tijden(5)

Times3.call(12) #=> 36
times5.call(5) #=> 25
tijden3.oproep(tijden5.oproep(4)) #=> 60

Had een trefwoord kunnen gebruiken lambda in plaats van Proc.nieuw, dit heeft geen invloed op het resultaat. Dit komt misschien bekend voor voor mensen die het weten , van En Python(of Lisp). Dit kan zelfs op PHP, maar niet veel mensen maken gebruik van deze mogelijkheid.
Bovendien, binnen Robijn blokken van het "ongecreëerde" type worden veel gebruikt Proc", bijvoorbeeld om de inhoud van een object te herhalen en code uit te voeren, zoals een methode elk beschikbaar voor de klas Array:
.each (|c| plaatst c*2) #=> retourneert elk element vermenigvuldigd met 2
Als de code niet op één regel past, is het aan te raden om de constructie te gebruiken doe... einde, in plaats van haakjes te gebruiken. Fans Robijn hou niet van haakjes.

10. U kunt rails gebruiken.

Last but not least... Je kunt altijd gebruik maken van Sporen voor het ontwikkelen van webapplicaties. Ontwikkeling zal niet zo eenvoudig zijn als bij PHP, Maar Sporen werden erin geschreven Robijn, omdat het functies heeft die niet in andere talen voorkomen.

Conclusie

De tijd is om. Misschien denkt u er al over na om te kijken Robijn, misschien heb je het al geprobeerd, of misschien heb je het gewoon genegeerd. Hoe dan ook, de volgende keer dat je naar je code kijkt en deze ziet er eng uit en de omvang ervan is intimiderend, geef mij dan niet de schuld.

Beste lezers, vergeet niet dat Habrauser de tekst eenvoudigweg (slecht, ja) heeft vertaald. Het is voor hem niet nodig om ideologische claims te uiten.

In ieder geval is het de moeite waard om redenen voor je woorden te geven. Ik zal proberen ons de schoonheid van taal te laten zien, waarom we taal zo hakken en koesteren.


Robijn taal op hoog niveau programmeren (taal). Met Ruby kun je bij het schrijven van code de nadruk meer verleggen naar ‘wat je moet doen’, en niet langer aan een domme computer uitleggen ‘hoe je het moet doen’. Zoals hij zegt Matz de mens moet controleren en de machine moet gehoorzamen.
Een vertaler - een tolk van de Ruby-taal - zal uitleggen hoe u uw wens kunt vervullen. De Japanners zijn een zeer trots volk, een volk van afstammelingen van samoerai, waarin feodale gewoonten nog steeds smeulen.

Ruby is een geïnterpreteerde programmeertaal. Ik heb al gezegd dat als je dit stomme stuk hardware 5 keer vertelt (zegt "hallo!"), het dit niet zal begrijpen zonder een tolk. Programmeertalen waarvoor een tolk nodig is die de daarin geschreven scripts leest, worden geïnterpreteerde talen genoemd. Voorbeelden van dergelijke talen zijn (php, python, perl, bash en onze eigen geweldige!)
Talen waarvan de code wordt omgezet in een programma, worden gecompileerd genoemd. Voorbeelden van dergelijke talen zijn (C/C++, C#, GO)

Het verschil is dat gecompileerde programma's één keer worden gecompileerd voor meerdere doeleinden, terwijl programma's die in geïnterpreteerde talen zijn geschreven elke keer dat ze worden uitgevoerd, worden geïnterpreteerd. Daarom zijn ze langzamer, maar altijd open source:D

Snelheid is belangrijk, maar niet het allerbelangrijkste. Ruby is veel langzamer dan C en zelfs langzamer dan Asembler, maar dit weerhoudt Ruby er niet van om steeds meer nieuwe fans te krijgen die afbeeldingen van hun oude goden verbranden, diamanten breken en zich wenden tot de nieuwe slimme religie van Ruby-programmering.
Met Ruby kun je zo snel applicaties schrijven dat je failliet gaat door een speciaal team van C-programmeurs in te huren die een programma schrijven dat dezelfde acties uitvoert. Als u voor morgen een financiële berekening moet maken, maakt het dan voor u uit of deze in 10 seconden of in 0,1 seconde wordt berekend?
Zelfs als prestaties erg belangrijk voor je zijn, heeft Ruby een groot aantal stuurprogramma's voor bibliotheken geschreven in C, voor verschillende databases en andere software, zodat je de snelheid van C krijgt terwijl je code in Ruby schrijft.
Met Ruby kun je ook extensies in C schrijven voor kritieke delen van de code, dat wil zeggen die waar prestaties extreem belangrijk zijn (dit alles omdat Ruby zelf niet helemaal in C is geschreven, maar een behoorlijk groot deel ervan). Je moet eraan wennen dat nee universele taal programmeren, wetende welke, u hoeft verder niets te weten.

Ruby heeft vele gezichten maar in elk gezicht is hij mooi. Er is een standaard Ruby-implementatie genaamd Matz Ruby Interpreter (MRI). Vanaf tak 1.9 en doorlopend tot de huidige, wordt een andere YARV-interpreter gebruikt.
Er is ook Ruby voor de Java virtual machine (JRuby), waarmee je alle vele bibliotheken kunt gebruiken die zijn geschreven in Java en andere talen die op de JVM draaien, zoals Scala of Clojure.
Er is MacRuby - een versie voor Mac OS X.
Er is Ruby Enterprise Edition (Ruby EE of REE) - dit is een enigszins opnieuw ontworpen MRI waarmee Ruby-programma's minder verbruiken RAM.
Er zijn ook verschillende eigen ontwikkelingen waarmee je de originele Ruby-componenten kunt vervangen door functioneel rijkere en snellere componenten, maar vanwege het feit dat dergelijke ontwikkelingen meestal slecht zijn getest in gevechtsomstandigheden en niet op grote schaal worden gebruikt, zou ik je niet aanraden om ze te gebruiken. Gebruik officiële versies Robijn.
Naast de beschreven Ruby-implementaties zijn er ook groot aantal, bijvoorbeeld Rubinius en Ruby MagLev enzovoort. Ik weet niet wat hun eigenaardigheid is, maar ik zal het zeker uitzoeken en in een van hen publiceren. volgende versies leerboek.

Ruby is een dynamische programmeertaal. Dit betekent dat Ruby-programma's dynamisch zijn; ze kunnen direct veranderen op het moment van uitvoering. Het is niet nodig om een ​​beperking in te stellen bij het maken. En je zult nooit overstromen numeriek type gegevens.
Ruby heeft zeer brede metaprogrammeermogelijkheden, zodat elke taal er jaloers op zou zijn. Het belangrijkste is dat dit een abstractie is, en dit is een echt effectieve benadering van programmeren waarmee je echt krachtige, rijke en functionele applicaties kunt schrijven.

Ruby is beknopt. Programma's geschreven in Ruby zijn zeer beknopt en begrijpelijk. Dit komt door het hoge en dynamische karakter en het zwakke typen.
Ik ken geen enkele taal die Ruby zou verslaan als het gaat om de minste regels code om een ​​bepaalde functionaliteit te implementeren. Vermoeden dat zulke mensen er nu niet zijn) anno 2015, of ze zijn zo verward en eng dat ze bang zijn om zichzelf te laten zien.

Ruby is een zwak getypeerde programmeertaal. In sommige andere programmeertalen zou je het type gegevens moeten declareren dat in een variabele is opgeslagen, maar de variabele kan geen gegevens van een ander type opslaan. Programmeeradepten onder leiding van Yakihiro Matsumoto hebben hard gewerkt om ervoor te zorgen dat je variabelen kunt gebruiken om absoluut alle waarden op te slaan zonder ze eerst te declareren.

Ruby is een objectgeoriënteerde programmeertaal. De objectgeoriënteerde benadering van programmeren is helemaal niet nieuw en heeft niet alleen zijn recht op leven bewezen, maar ook zijn effectiviteit! Object-Oriented Programming (OOP) wordt lange tijd beschouwd als synoniem voor codekwaliteit en schaalbaarheid.
OOP is een redelijk populaire benadering van ontwikkeling. software, wat de ontwikkeling vereenvoudigt en versnelt, maakt de code begrijpelijker, gestructureerder en uitbreidbaar. Alles wordt gecreëerd met behulp van abstracties, alsof de objecten in onze modellen echt zijn. In Ruby is OOP bijzonder elegant geïmplementeerd, er is wat magie op het niveau van de basisklasse, maar dit is niet zo belangrijk gezien de implementatie van de taal in het algemeen.

Ruby is een eenvoudige programmeertaal. Ruby is een gemakkelijk te begrijpen programmeertaal, gemakkelijk te ontwikkelen, maar niet gemakkelijk te leren :). Natuurlijk kun je een applicatie schrijven die de klassieke uitdrukking 'Hallo wereld' weergeeft in de eerste seconde van de kennismaking, trouwens, hier is het: zet 'Helo-woord!'. Om echt meesterschap te bereiken, moet je echter jaren besteden !
Je kunt Ruby niet vergelijken met PHP, het is alsof je een elegante quinoa vergelijkt met een soort gans, maar ik zal dat offer brengen en het doen. De Ruby-taal zelf stelt niet veel voor moeilijker dan PHP bij het studeren is het echter veel handiger en logischer. Het Ruby-ecosysteem zelf is complexer, aangezien Ruby-programmeurs gewend zijn alles te automatiseren, en ik zal waarschijnlijk niet alleen de waarheid vertellen, maar de waarheid als ik je vertel dat Rubyisten hierin veel verder zijn gevorderd dan welke andere gemeenschap van programmeurs dan ook. Deze automatisering dwingt de ontwikkelaar om veel technologieën van derden te bestuderen, maar het vereenvoudigt en vermindert de tijd die wordt besteed aan nevenontwikkelingsprocessen (testen, implementeren van de applicatie op de server, enzovoort). PHP heeft dit allemaal niet, of het is allemaal volkomen primitief! Het meest interessante is dat ongeveer 25% van de PHP-programmeurs geen frameworks gebruiken en waardeloze code produceren. Probeer een Ruby-programmeur te vinden die niet bekend is met het Rails-framework!
Het belangrijkste om te onthouden is dat de meeste Ruby-programmeurs experts zijn, professionals in ontwikkeling. En hier moet je altijd naar streven. Slechts één manier en geen andere manier, alleen een radicale benadering van deze kwestie. Je kunt geen slechte Ruby-programmeur zijn, je bent een professional of je bent geen Ruby-ontwikkelaar!

Ruby and Rails is een beetje een deeg! Rails, of Ruby on Rails, is een raamwerk voor het maken van webapplicaties geschreven in Ruby. Rails is echt een revolutie in de wereld van webontwikkeling. Rails is een zeer krachtig raamwerk dat alle functies van Ruby optimaal benut, dat een enorme gemeenschap van professionele programmeurs heeft die hoogwaardige extensies produceren vanwege de toch al rijke functionaliteit.

Ruby is nog steeds een mainstream-technologie! Veel mensen zeggen dat Ruby een beetje populaire programmeertaal is, maar het is een van de 10 populairste talen, heeft een enorme community en een groot aantal bibliotheken - rubygems.
Trouwens, de aanwezigheid van Ruby-edelstenen is een ander voordeel ten opzichte van PHP! In PHP is er een saaie Peer, die is geschreven door apen die zich voordoen als astronauten. Dit kan worden beoordeeld aan de hand van het feit dat er in de Peer-codes veel afval is gevonden dat op mensen lijkt, maar we weten dat mensen niet in staat zijn hiervan.
En over het algemeen heb ik gewoon gezondigd door RubyGems en Pear te vergelijken. Er zijn een groot aantal grote succesvolle projecten in Ruby geïmplementeerd, wat de succesvolle keuze voor Ruby bewijst als integraal onderdeel van het opbouwen van een bedrijf op basis van een webproject. Ruby behoort, net als Python, ook tot de top 10 populaire talen programmeren mist één heel groot minpunt van de reguliere technologieën - Ruby is niet oververzadigd met programmeurs, er is nog steeds een tekort aan Ruby-programmeurs, wat betekent dat je toekomstige salaris als Ruby-programmeur veel hoger zal zijn vergeleken met degenen die programmeren in PHP of Java. Zelfs als de vraag naar Ruby-programmeurs volledig wordt bevredigd, zal een Ruby-programmeur meer verdienen omdat er twee heel zijn belangrijke factoren: meer hoge kwaliteit code en hogere productiviteit.

Rubyisten zijn de meest deegminnende menigte. Ik weet niet of dit waar is, maar feit is dat Ruby-programmeurs duidelijk heel ver zijn gevorderd in het testen eigen code- dit is een feit! Iedere min of meer ervaren Ruby-programmeur schrijft specificaties en/of tests voor zijn code. Dit maakt Ruby-code betrouwbaarder en van hogere kwaliteit.

De Ruby-gemeenschap is beter gekwalificeerd dan veel andere gemeenschappen. Allereerst waar we het over hebben over PHP - een community die behoorlijk productief is in groeiende freaks.
Iedere leerling die het begrijpt php-basisprincipes over een week en degene die zijn scheve website schreef, schreeuwt al op alle hoeken dat hij php-programmeur. Nee, ik heb geen hekel aan kinderen, wat jij studeert en maakt is prachtig. Maar er is één nuance: voor elk woord dat tot jou gericht is, moet je op de een of andere manier reageren. Wees in het algemeen niet arrogant, maar verbeter jezelf, doe wat je leuk vindt. En dit is het belangrijkste in ons leven!

Niet iedereen die in Ruby programmeert, is de titel van programmeur waardig. Ik ben dat bijvoorbeeld niet waard, omdat ik extreem weinig ervaring heb en totaal onvoldoende kennis heb. Als we echter de gemiddelde temperatuur in een ziekenhuis nemen, is de Ruby-gemeenschap is aanzienlijk superieur aan de PHP-gemeenschap. Ik zal het niet hebben over andere programmeertalen, aangezien Python, Java en Perl de belangrijkste exporteurs zijn van nieuwe leden van de Ruby-gemeenschap, dat wil zeggen dat veel Ruby-programmeurs hun meesterschap hebben bereikt door met andere programmeertalen te werken en, nadat ze voldoende hebben verworven kennis en ervaring, wendde zich tot de Ruby-religie. Daarnaast programmeren veel mensen die in Ruby programmeren ook in Python en Perl en Java, C, Objective-C, javascript en, geloof het of niet, PHP.

Invoering

Tegenwoordig is de zoekmachine een van de meest gebruikte navigatiemethoden in cyberspace, die elke dag van zijn bestaan ​​steeds groter wordt. Het is duidelijk dat algoritmen voor het zoeken naar informatie voortdurend hun complexiteit en efficiëntie moeten vergroten. Het doel van dit werk is niet om algoritmen voor het ophalen van informatie te beschrijven, maar eenvoudigweg om er een inleidende beschrijving van te geven. Het doel van dit werk is ook om een ​​zoekwebapplicatie te schrijven in de programmeertaal Ruby.

Rekening houdend met het bovenstaande kunnen de volgende doelen worden gevormd:

Inleiding tot algoritmen voor het zoeken naar informatie

Een zoekwebapplicatie schrijven

De gestelde doelen worden bereikt door middel van taken:

Onderzoek naar de zoektheorie

Het leren van de programmeertaal Ruby

Inleiding tot de Haml-opmaaktaal

Introductie van de Sass-metataal

Gebruik Ruby, Haml en Sass om een ​​webapplicatie te coderen

Debug de resulterende toepassing

Theoretisch gedeelte

Theorie over het ophalen van informatie

Eerst moet u een zoekmachine definiëren.

Zoekmachine – een software- en hardwarecomplex met een webinterface die de mogelijkheid biedt om informatie op internet te zoeken.

Op basis van de functies die ze uitvoeren en de taken die ze oplossen, worden zoekmachines ingedeeld in:

hulp zijn het meest voorkomende type functie informatiesystemen, en bestaat erin systeemabonnees de mogelijkheid te bieden installatiegegevens voor bepaalde klassen van objecten te verkrijgen;

Zoekmachines zijn de meest voorkomende klasse van informatiesystemen. Over het algemeen kan het formulier als een aantal worden beschouwd informatie ruimte, gespecificeerd in termen van informatielogische beschrijving van het vakgebied);

berekend De functie van het systeem is het verwerken van informatie die zich in het systeem bevindt volgens bepaalde berekeningsalgoritmen voor verschillende doeleinden.

Door de aard van het bieden van een logische organisatie van opgeslagen informatie, zijn zoeksystemen onderverdeeld in feitelijke, documentaire en geo-informatie.

Dit is de manier waarop feitelijke zoekmachines gegevens verzamelen en opslaan in de vorm van meerdere exemplaren van een of meer typen structurele elementen. Elk van deze voorbeelden van structurele elementen of een combinatie daarvan weerspiegelt informatie over een feit of gebeurtenis. Structuur van elk type informatie-object bestaat uit een laatste reeks details die de belangrijkste aspecten en kenmerken van informatie voor objecten in een bepaald onderwerpgebied weerspiegelen.

In documentaire zoeksystemen is één enkel informatie-element een document dat niet in kleinere elementen is opgedeeld, en de informatie die wordt ingevoerd is in de regel niet gestructureerd, of is op een bepaalde manier gestructureerd. beperkte vorm. Voor het ingevoerde document kunnen enkele geformaliseerde posities worden ingesteld: productiedatum, artiest, onderwerp. Sommige soorten documentaire informatiesystemen zorgen voor het tot stand brengen van een logische relatie tussen de ingevoerde documenten - ondergeschiktheid in semantische inhoud.

Bij geo-informatiegegevens zijn de gegevens afzonderlijk georganiseerd informatie objecten gebonden aan een gemeenschappelijke elektronische topografische basis. Geografische informatiesystemen worden gebruikt informatie ondersteuning in die vakgebieden de structuur van informatieobjecten en -processen waarin sprake is van een geografische component.

Er is ook de volgende classificatie van zoekmachines (Fig. 1.)

Afb.1. Classificatie van zoekmachines

Over gesproken zoekmachines, is het de moeite waard om de theorie van zoekopdrachten en hun classificatie te vermelden. Daarom beschreef een professor in de filologie van Harvard in 1949 enkele kenmerken van het ophalen van informatie.

Professor Zipf merkte dat op lange woorden komen minder vaak voor in teksten van welke taal dan ook dan korte teksten. Op basis van deze observatie heeft Zipf twee wetten afgeleid:

De eerste wet verbindt de frequentie van voorkomen (voorkomen) van een woord met de rangorde van deze frequentie. De meest voorkomende woorden krijgen een rangorde gelijk aan één. De woorden die minder vaak voorkomen - rangschikken gelijk aan twee, enz. Zipf ontdekte dat het product van de frequentie en de rangschikking van een woord een constante is.

Deze afhankelijkheid wordt gewoonlijk weergegeven door een hyperbool. De waarde van de constante van Zipf is verschillend voor verschillende talen, maar binnen één taalgroep blijft deze ongewijzigd. Voor de Russische taal is de constante ongeveer 0,06-0,07.

Zipf stelde vast dat de frequentie waarmee woorden voorkomen en het aantal woorden dat met een bepaalde frequentie in de tekst voorkomt, ook met elkaar samenhangen.

Enerzijds behoudt de resulterende curve zijn parameters voor alle teksten in dezelfde taal. Aan de andere kant blijft de vorm van de Zipf-curve ongewijzigd, ongeacht in welke taal de tekst is geschreven. Alleen de coëfficiënten zullen verschillen.

De wetten van Zipf zijn universeel. Ze gelden niet alleen voor teksten. De relatie tussen het aantal steden en het aantal inwoners dat er woont, neemt bijvoorbeeld een vergelijkbare vorm aan. De kenmerken van de populariteit van internetbronnen komen overeen met de wetten van Zipf. De wetten van Zipf weerspiegelen de 'menselijke' oorsprong van objecten.

In ieder geval iedereen zoekopdracht kan worden geclassificeerd op basis van drie kenmerken: zoeklengte, zoekhelderheid, zoekfase.

Dus, afhankelijk van de lengte, zijn alle verzoeken onderverdeeld in

Eén woord (“promotie”)

Twee woorden(" zoekmachine promotie»

Drie woorden (“professionele zoekmachinepromotie”)

Uitgebreid (“professionele zoekmachinepromotie goedkoop”)

Voor de duidelijkheid zijn alle verzoeken onderverdeeld in:

Een duidelijk verzoek (“prijs voor iPad 2”)

Vage vraag (“Ozon”, wat gas kan zijn en de naam van de winkel en de naam van de directeur)

Volgens de zoekfase zijn alle verzoeken onderverdeeld in:

Bewustwording van het probleem (“de site werkt niet”)

Een oplossing vinden (“websitehosting”)

Een oplossing kiezen (“welke hosting u moet kiezen”)

Het vinden van de locatie van de transactie (“masterhost hosting tarieven”)

RUBY-programmeertaal

Ruby is een dynamische, reflecterende, geïnterpreteerde programmeertaal op hoog niveau voor snel en eenvoudig objectgeoriënteerd programmeren. De taal heeft een besturingssysteemonafhankelijke implementatie van multithreading, sterk dynamisch typen, een garbage collector en vele andere functies. Ruby ligt qua syntaxiskenmerken dicht bij de talen Perl en Eiffel, en qua objectgeoriënteerde benadering bij Smalltalk. Ook zijn enkele kenmerken van de taal overgenomen van Python, Lisp, Dylan en Clu. Tegenwoordig wordt de Ruby-interpreter geïmplementeerd voor bijna alle platforms (Unix, Win32, OS X). De schepper van de taal is Yukihiro Matsumoto.

Ruby is een volledig objectgeoriënteerde programmeertaal. Alles is objecten, en functies zijn methoden van deze objecten.

Basiseigenschappen van Ruby:

geïnterpreteerde taal:

Mogelijkheid tot directe systeemoproepen.

Krachtige ondersteuning voor bewerkingen met strings en regels (reguliere expressies).

Onmiddellijke manifestatie van veranderingen tijdens de ontwikkeling.

Geen compilatiefase.

Eenvoudig en snel programmeren:

Het is niet nodig om variabelen te declareren.

Variabelen worden dynamisch getypeerd.

Eenvoudige en consistente syntaxis.

Automatische controle RAM.

Objectgeoriënteerd programmeren:

Alles is een voorwerp. Zelfs de klassenaam is een exemplaar van de klasse Class.

Klassen, methoden, overerving, polymorfisme, inkapseling enzovoort.

Enkele methoden.

Mixins met behulp van modules (de mogelijkheid om een ​​klasse uit te breiden zonder overerving);

Iterators en sluitingen.

Uitgebreide metaprogrammeermogelijkheden.

Faciliteiten:

Onbeperkt bereik van gehele waarden.

Uitzonderingsmodel.

Alle operators retourneren waarden, zelfs besturingsstructuren.

Uitzonderingsmechanisme.

Stream-ondersteuning; zowel native als UNIX-familiesystemen.

Gebreken:

Onbeheersbaarheid van sommige processen (zoals geheugentoewijzing), onvermogen om datastructuren of subroutines op laag niveau te definiëren;

Onmogelijkheid tot compilatie en bijbehorende optimalisatie van het programma;

Openheid broncode zelfs binnen kant-en-klaar programma

Het gevolg van de eerste twee tekortkomingen is zeer lage snelheid programma's starten en uitvoeren.

Het is ook vermeldenswaard dat er voor Ruby veel modules (add-ons) zijn voor vrijwel elk type taak (interfaceprogrammering, complexe wiskundige berekeningen, werken met audio, video, 3D, enz.). Daarom werd deze programmeertaal gekozen als de belangrijkste taal voor het schrijven van het praktische gedeelte.

1.3. Vereenvoudigde opmaaktaal HAML

Haml is een opmaaktaal voor het vereenvoudigd genereren van XHTML. HAML compileert naar HTML. Haml is veel eenvoudiger dan HTML, omdat u hiermee het schrijven van webapplicaties kunt vereenvoudigen en versnellen.

Dit stukje code bevindt zich bijvoorbeeld in Haml

%html(html_attrs("ru") )

%titel Mijn blog

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

Stylesheet_link_tag "main"

%h1 Mijn blog

%h2 Inzendingen

- @entries.each doe |entry|

%h3.title= invoer.titel

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

%p.body=entry.body

Alle rechten voorbehouden © Ivan

HTML-code wordt getransformeerd

Mijn blog