RUBY-programmeertaal. Wat is "Rubijn"? Ruby-programmeertaal

Vraagt ​​​​u zich af waarom Ruby zo populair is? Zijn fans noemen hem een ​​mooie, bekwame tong. En tegelijkertijd zeggen ze dat het comfortabel en praktisch is. Wat weegt zwaarder?

De idealen van Ruby's Schepper

Ruby is een zorgvuldig uitgebalanceerde taal. De schepper ervan, Yukihiro Matsumoto (ook bekend als “Matz”), combineerde delen van zijn favoriete talen (Perl, Smalltalk, Eiffel, Ada en Lisp) om een ​​nieuwe taal te vormen waarin het paradigma functionele programmering in evenwicht gehouden door de principes van imperatief programmeren.

Hij zei vaak dat hij ‘probeerde van Ruby een natuurlijke, maar niet eenvoudige’ taal te maken die het leven weerspiegelt.

Op basis hiervan voegt hij toe:

Ruby is eenvoudig van buiten, maar zeer complex van binnen, net als het menselijk lichaam.

De opkomst van Ruby

Sinds de release openbare versie in 1995 trok Ruby de aandacht van programmeurs over de hele wereld. In 2006 kreeg Ruby brede acceptatie. Er zijn actieve Ruby-gebruikersgroepen in grote steden over de hele wereld, en Ruby-conferenties zijn tot de nok toe gevuld.

Bij Ruby is alles een object. Voor elk stukje informatie of code kunnen eigen eigenschappen en acties worden gedefinieerd. Bij objectgeoriënteerd programmeren worden eigenschappen aangeroepen objectvariabelen en acties - methoden. De puurste objectgeoriënteerde aanpak van Ruby kan worden gedemonstreerd door een paar regels code die een bewerking uitvoeren op een getal.

5. keer (afdrukken "Wij houden van Ruby! Ruby is geweldig!" }

In vele talen, cijfers en andere primitieve soorten gegevens zijn geen objecten. Met Ruby, beïnvloed door de Smalltalk-taal, kunt u methoden en objectvariabelen aan alle gegevenstypen toewijzen. Dit maakt Ruby gemakkelijker te gebruiken, omdat de regels die voor objecten gelden, voor heel Ruby gelden.

Flexibiliteit van Ruby

Ruby is een zeer flexibele taal omdat gebruikers er vrijelijk delen van kunnen wijzigen. Kernonderdelen van Ruby kunnen naar believen worden verwijderd of opnieuw worden gedefinieerd. En bestaande onderdelen kunnen worden aangepast. Ruby probeert de gebruiker nergens in te beperken.

Optellen wordt bijvoorbeeld uitgevoerd met behulp van de plus (+) bewerking. Maar als u hiervoor het beter leesbare woord plus wilt gebruiken, kunt u een dergelijke methode rechtstreeks aan Numeriek toevoegen, innerlijke klasse Ruby-taal.

klasse Numeriek def plus (x) self . + (x) eindeinde y = 5. plus 6 #y is nu 11

Operators in Ruby zijn syntactische suiker voor methoden. Je kunt ze ook overschrijven.

Blokken, een echt expressief ontwerp

Blokken in Ruby zijn dat ook geweldige bron flexibiliteit. Een programmeur kan aan elke methode een afsluiting toevoegen, waarin wordt beschreven hoe de methode zou moeten werken. De sluiting wordt genoemd blok en is een van de meest populaire constructies voor nieuwkomers in de wereld van Ruby uit de wereld van imperatieve programmeertalen zoals PHP of Visual Basic.

Het maken van blokken is geïnspireerd door functionele programmeertalen. Matz zei: “Met de sluitingen in Ruby wilde ik hulde brengen aan de cultuur van de Lisp-taal.”

zoekmachines = %w . kaart doen | motor |

"http://www."

+motor. kleine letter + ".com" einde

In de bovenstaande code wordt het blok beschreven binnen de do ... end-constructie. De kaartmethode past een codeblok toe op de gepresenteerde lijst met woorden. Veel andere methoden in Ruby laten het pad open voor de programmeur om zijn eigen codeblok te schrijven dat de methode in detail vertelt wat deze moet doen. Ruby en mixen In tegenstelling tot veel objectgeoriënteerde talen is Ruby

opzettelijk

biedt slechts één erfenis. Maar Ruby biedt ook het concept van modules (in Objective-C Categorieën genoemd). Modules zijn verzamelingen van methoden.

Klassen kunnen vrijelijk interfereren met een module en alle bijbehorende methoden ontvangen. Elke klasse die de Each-methode implementeert, kan bijvoorbeeld een Enumerable-module toevoegen, die een aantal methoden zal toevoegen die elke methode gebruiken om lussen te maken.

klasse MyArray include Enumerable end

Over het algemeen vinden rubyisten dit transparanter dan meervoudige overerving, die behoorlijk complex kan zijn en enkele beperkingen kent.

  • Visuele weergave van Ruby
  • Omdat Ruby vaak spaarzame interpunctie gebruikt en doorgaans Engelse woorden als trefwoorden gebruikt, wordt er wat interpunctie gebruikt om Ruby te versieren. Ruby hoeft geen variabelen te declareren. Het maakt gebruik van eenvoudige naamgevingsconventies om de reikwijdte van variabelen te scheiden.
  • var kan een lokale variabele zijn.

@var-objectvariabele.

$var is een globale variabele.

Deze symbologie verbetert de leesbaarheid doordat de programmeur de rol van elke variabele gemakkelijk kan identificeren. Dit vermijdt ook het gebruik van het vervelende zelf. voor elk voorwerp.

    Ruby heeft constructies voor het afhandelen van uitzonderingen, zoals Java of Python, die het gemakkelijker maken om met fouten om te gaan.

    Ruby introduceert een echte 'mark-and-sweep garbage collector' voor alle Ruby-objecten. Het is niet nodig om handmatig het aantal links in bibliotheken van derden bij te houden. Zoals Matz zegt: “Het is beter voor je gezondheid.”

    Het schrijven van C-extensies in Ruby is eenvoudiger dan in Perl of Python, met een zeer elegante API voor het aanroepen van Ruby vanuit C. Het bevat oproepen voor het inbedden van Ruby in software om het als scripttaal te gebruiken. Er is ook een SWIG-interface beschikbaar.

    Ruby kan bibliotheken van derden dynamisch laden als het besturingssysteem dit toestaat.

    Ruby implementeert besturingssysteemonafhankelijke threads. Op deze manier heb je op alle platforms waarop je Ruby draait ook de mogelijkheid om multithreading te gebruiken, ongeacht of dit wordt ondersteund dit systeem stromen of niet. U kunt zelfs in MS-DOS multithreading-mogelijkheden gebruiken!

  • 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 en er verschillende Ruby-hulpprogramma's voor geschreven persoonlijk gebruik, en ontwikkel ik ook op Rails in mijn vrije tijd.

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 het beste van andere programmeertalen geleend, van praatje naar Java, van Perl naar Python. 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, 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, Robijn komt met proberen/vangen(of beter nog beginnen/redding)-blokken en een reeks vooraf gedefinieerde, uitbreidbare uitzonderingen, voor correcte foutafhandeling.
  • Naamruimten: Modules Robijn maak het gebruik van naamruimte eenvoudig, dit zou liefhebbers moeten aanspreken C++ En Java.
  • Ingebouwde reguliere overtuigingen: voor alle experts Perl, je kunt er iets in omsluiten // en het wordt reguliere expressie, klaar voor vergelijking (hiervoor gebruiken we de operator =~ ).
  • Overbelasting van de machinist: Robijn 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.
  • Interactieve console: Kan worden gebruikt om code interactief te testen, zoals een console Python

2.Je zult genieten van de kleine dingen.

Robijn 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, als En tenzij in voorwaardelijke uitdrukkingen. Natuurlijk kun je gebruiken als met de tegenovergestelde betekenis van de uitdrukking, maar met behulp van tenzij leidt meestal tot 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 vals, 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 of 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 nieuwe lijn. 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, symbolen, Booleaanse waarden 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 speelt vals broncode 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 Perl 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 Perl 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.

Ruby is de eerste programmeertaal die vanuit het Land van de Rijzende Zon naar ons toe kwam. Het was enige tijd alleen in Japan algemeen bekend, omdat alle documentatie erover niet in het Engels was vertaald. Maar zodra het begon te worden vertaald en gepubliceerd, raakte Ruby over de hele wereld geïnteresseerd, en in 1998 werd het forum “. ruby-talk” begon zijn werk "

De maker van de taal, Yukihiro Matsumoto (of “Matz”) was ontevreden over de scripttalen die toen bestonden. In zijn woorden: “Perl 4 was niet krachtig genoeg en Python was niet objectgeoriënteerd genoeg.” Hij had de perfecte taal nodig voor zijn taken. Daarom haalde hij het beste uit andere talen, creëerde een nieuwe, waarin hij alles toevoegde wat hij nodig en correct achtte, en verwijderde wat niet nodig was. Bij het kiezen van de namen voor zijn creatie wilde Matsumoto dat het enigszins zou lijken op Perl, waarvan veel van de ideeën zouden worden overgenomen in Ruby. Hij had de keuze tussen Coral en Ruby, en sommige bronnen beweren dat de uiteindelijke naam werd gekozen vanwege de horoscoop.

Ruby bestaat al bijna 20 jaar en ontwikkelt zich actief, met de steun van de programmeergemeenschap en haar fans, maar ook van Matz zelf.

Ruby filosofie

Matsumoto studeerde programmeren toen hij nog studeerde, maar het idee om zijn eigen taal te creëren kwam pas enkele jaren later bij hem op. Hij wilde een ‘echte’ OOP-taal creëren die een eenvoudige en begrijpelijke syntaxis zou hebben, en we kunnen gerust zeggen dat hij daar in is geslaagd. In tegenstelling tot talen die zich richten op hoe snel een machine een programma kan uitvoeren, heeft Matz Ruby ontworpen om het werk voor mensen gemakkelijker te maken. Zelfs als dit betekent dat u wat computerbronnen moet opofferen.

Ruby maakt gebruik van het zogenaamde ‘minste verrassing’-principe. Dit betekent dat het programma zich zal gedragen volgens de verwachtingen van de encoder. Matz gebruikte dit concept alleen voor zijn eigen gemak, maar naarmate de taal steeds populairder werd, ontdekte hij dat andere programmeurs op dezelfde manier dachten als hij. Voor hem was dit ongetwijfeld een aangename verrassing.

Ruby houdt zich aan het concept van de Smalltalk-taal, waarbij alle gegevenstypen als objecten worden beschouwd, wat betekent dat er methoden en objectvariabelen voor kunnen worden ingesteld. Dit is van hem voordelig verschil uit talen zoals C++.

Het is ook vermeldenswaard de flexibiliteit van de taal. U kunt bijvoorbeeld de optelbewerking opnieuw definiëren en de notatie gebruiken die voor u handiger is. Geef bijvoorbeeld op dat het toevoegen van cijfers werkt als u het woord plus (1 plus 2) invoert in plaats van het symbool (1+2). Dat wil zeggen, je past je niet aan de taal aan, maar integendeel, het past zich aan jou aan. Dit geeft een enorme vrijheid op het gebied van zelfexpressie, omdat je operators, methoden, enz. kunt overschrijven. Bedenk echter dat grote vrijheid ook een grote verantwoordelijkheid met zich meebrengt (met andere woorden, raak niet in de war over wat, waar en hoe je de naam hebt gewijzigd).

Waar wordt Ruby gebruikt?

Het Redmine bugvolgsysteem en de vectoreditor zijn geschreven in Ruby. Inkscape-afbeeldingen. Ook de derde versie van Metasploit (een onderzoeksproject informatiebeveiliging) werd volledig herschreven in Ruby. Ruby wordt in veel toepassingen gebruikt grote organisaties, zoals NASA, Motorola, enz.

Ruby kreeg zijn grootste populariteit dankzij Ruby on Rails, uitgebracht in 2004. Rails werd gebruikt om reuzen als Twitter, GitHub, Kickstarter, Diaspora, enz. te creëren. Het is erg prettig en handig om er websites op te schrijven. Voor databases kunt u bijvoorbeeld de Active Record-queryinterface gebruiken, waarmee u gegevens kunt ophalen zonder gebruik te maken van SQL-query's(wat veel ontwikkelaars erg leuk vinden).

Nu heeft Ruby, of beter gezegd Ruby op Ralis, de reputatie verworven van een taal voor startups. Met behulp van Rails is het vrij eenvoudig om in korte tijd projecten te implementeren die origineel en effectief zijn en verder gaan dan sjabloonlandingspagina's en online winkels. Naarmate de belasting van de site toeneemt en de vereisten veranderen, worden sommige projecten natuurlijk herschreven in andere talen die rekening houden met bepaalde specifieke kenmerken en die voor sommige gevallen geschikter zijn (bijvoorbeeld Java of Scala). Ruby en Rails blijven echter evolueren, dus binnenkort is een overstap misschien niet nodig.

Moeilijkheid om Ruby te leren

Ruby is vrij eenvoudig te leren, maar er is veel meer documentatie over te vinden op Engels dan in het Russisch, dus voor een diepere studie zul je de teksten in het origineel moeten lezen.

Bovendien is het vermeldenswaard dat er zelden vacatures zijn voor programmeren in pure Ruby. 90 procent daarvan zal waarschijnlijk voor Ruby on Rails zijn. RoR-programmeurs zijn tegenwoordig een van de meest gewilde in de IT-industrie. Aan het hoge salaris is het de moeite waard om de hoge status van het behoren tot de elite en de afgunst van andere programmeurs toe te voegen, bijvoorbeeld PHP-specialisten die visitekaartjeswebsites schrijven voor 100 roebel.

Voor- en nadelen van Ruby

Ruby is geliefd om:

  • OOP in Smalltalk-stijl;
  • gemeenschapsondersteuning (gemeenschap van programmeurs);
  • eenvoudige en handige syntaxis;
  • groot salaris;
  • steun voor de nieuwste veelbelovende programmeringsbenaderingen;
  • groot aantal kant-en-klare oplossingen.

De nadelen van Ruby zijn onder meer:

  • slechte ondersteuning voor Windows. Omdat Ruby voornamelijk voor Linux is ontwikkeld, is dat niet het geval Unix-achtig systeem het zal moeilijker zijn om met de IDE te werken, extra bibliotheken te installeren, enz.
  • gebrek aan vacatures als het niet Ruby on Rails is;
  • weinig documentatie in het Russisch;
  • geheugenverbruik.

Gerelateerde technologieën

Robijn op rails- een raamwerk voor het werken op internet. Het werd in 2004 gemaakt door een team programmeurs onder leiding van David H. Hansson en werd later aanzienlijk verbeterd door de inspanningen van de ontwikkelaarsgemeenschap.

RubyGems - pakketbeheerder voor Ruby, waardoor de installatie eenvoudiger wordt extra bibliotheken(hemen).

MacRuby- een taalimplementatie die is ontworpen om mee te werken Mac-systeem OS X. Het maakt het gemakkelijker voor u om een ​​Mac-applicatie te schrijven.
mruby is een verbeterde implementatie waar Yukihiro Matsumoto momenteel zelf aan werkt.

  • 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.

Ruby is momenteel 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, onvolledige lijst met redenen die u wel (of niet) kunnen motiveren om Ruby te gebruiken, of er op zijn minst mee te spelen. 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 het beste van andere programmeertalen geleend, van praatje naar Java, van Perl naar Python 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.
  • 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, 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, Robijn komt met proberen/vangen(of beter nog beginnen/redding)-blokken en een reeks vooraf gedefinieerde, uitbreidbare uitzonderingen, voor correcte foutafhandeling.
  • Naamruimten: Modules Robijn maak het gebruik van naamruimte eenvoudig, dit zou liefhebbers moeten aanspreken C++ En Java.
  • Ingebouwde reguliere overtuigingen: voor alle experts Perl, je kunt er iets in omsluiten // . Dit zijn de basisfuncties die u in principe ook in andere talen kunt zien: =~ ).
  • Overbelasting van de machinist: Robijn 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.
  • Interactieve console: Kan worden gebruikt om code interactief te testen, zoals een console Python

2.Je zult genieten van de kleine dingen.

Robijn 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, als En tenzij in voorwaardelijke uitdrukkingen. Natuurlijk kun je gebruiken als met de tegenovergestelde betekenis van de uitdrukking, maar met behulp van tenzij en het wordt een reguliere expressie, klaar voor vergelijking (hiervoor gebruiken we de operator
  • 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 vals, terwijl het bord " ! 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 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 of attr_accessor" wordt gebruikt voor methoden die iets onomkeerbaars doen, zoals het verwijderen van een record uit een database, het verwijderen van het laatste teken uit een string, enz. getter/setter voor klasgenoten.
  • voor automatische creatie $ ", 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.

En nog wat naamgevingsconventies: constanten, klassen en modules worden geschreven met een hoofdletter, methoden en klasseleden moeten beginnen met een kleine letter, globale variabelen krijgen een naam die begint met “ 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 Wilt u de volgende instructie schrijven? Ga gewoon naar een nieuwe regel. Klik op "
"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 cijfers, tekens, booleans en al het andere is een object. Ernstig. Dit betekent dat je dingen als deze kunt schrijven: 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. Stel je een typische situatie voor: je begon een systeemklasse te gebruiken of een klasse die door iemand anders was geschreven en besefte dat je daarin een extra methode nodig hebt. 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 daar je klasse van en voegt er een nieuwe methode aan toe. Meestal is dit een 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 geen meervoudige overerving toe. 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 Perl 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 Perl 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.

Ruby is een van de jongste programmeertalen. Het dankt zijn naam aan de edelsteen robijn (naar analogie met een andere veelgebruikte Perl-programmeertaal: parels). Zo wordt Ruby beschreven door de maker ervan, de Japanse programmeur Yukihiro Matsumoto: "Het is een krachtige en dynamische open-source objectgeoriënteerde taal die ik in 1993 begon te ontwikkelen. Ruby draait op veel platforms, waaronder Linux en veel implementaties van Unix, MS -DOS, Windows 9x/2000/NT, BeOS en MacOS. Het belangrijkste doel van Ruby is efficiëntie bij het ontwikkelen van programma's, en gebruikers zullen het programmeren daarin efficiënt en zelfs leuk vinden.

In Japan heeft Ruby bekende talen als Python en Perl enorm verdrongen (en het boek "Ruby the Object-Oriented Scripting Language" werd een bestseller) en begon zich over de hele wereld te verspreiden. Voor vorig jaar Er zijn drie Engelstalige boeken verschenen gewijd aan Ruby (helaas hebben ze nog geen Russische vertaling). Deze taal heeft een zeer goede kans om echt populair te worden - het heeft tenslotte de voordelen van andere talen geabsorbeerd, rekening houdend met hun tekortkomingen.

Ruby is opgenomen in de standaarddistributie van het Linux-besturingssysteem (vanaf versie 7.2) en MS Windows-gebruikers zouden het moeten aanbevelen voor hun eerste kennismaking. verouderde versie, die naast de taaltolk en bibliotheken een gebruikershandleiding, FAQ (antwoorden op veelgestelde vragen) en vele voorbeelden bevat. Ruby is gratis verkrijgbaar, dus u hoeft zich geen zorgen te maken over de kosten of beperkingen op het gebruik ervan.

Deze taal is ongetwijfeld een van de beste als de eerste programmeertaal die door studenten en schoolkinderen wordt bestudeerd. Een snelle ontwikkelingscyclus (bewerken - uitvoeren - bewerken), het gebruik van een tolk, de oorspronkelijke objectgeoriënteerde aard van de taal, ongetypeerde variabelen die geen declaratie vereisen - dit alles stelt studenten in staat hun aandacht te concentreren op algemene principes programmeren. In de verdere presentatie zullen we ons concentreren op het werken in Linux OS. Ruby gebruiken in anderen besturingssystemen ah is praktisch niet anders, en de uitvoeringsresultaten zijn niet afhankelijk van het gebruikte besturingssysteem.

Laten we eerst controleren of de Ruby-interpreter op het systeem is geïnstalleerd of niet. Voer in een shell-venster het commando ruby ​​​​-v in (voor deze schakelaar moet de taalversie worden weergegeven). Als de volgende melding verschijnt, is Ruby geïnstalleerd (versie, datum en platform kunnen variëren):

robijn 1.6.4 (04-06-2001)

zet "Hallo, Wereld!"

Om dit programma uit te voeren opdrachtregel binnenkomen

Als resultaat van de uitvoering van het programma wordt de vereiste zin in het opdrachtvenster afgedrukt.

De tweede methode voor het uitvoeren van programma's is niet beschikbaar voor gebruikers van alle besturingssystemen waarop Ruby draait. Linux OS-gebruikers moeten het programma aan het begin van het bestand met de tekst van het programma plaatsen volgende regel:

#!/usr/bin/env ruby

Zij Noodzakelijkerwijs moet vanaf de eerste positie beginnen. Vervolgens moet u de toegangsrechten van het programmabestand wijzigen, zodat het uitvoerbaar wordt: chmod +x hello.rb Om het programma uit te voeren, hoeft u alleen maar de opdracht in te voeren

Om het programma begrijpelijker te maken voor de persoon die het leest, zijn er opmerkingen ingevoegd. Opmerkingen van één regel beginnen met het teken # en gaan door tot het einde van de regel. Opmerkingen met meerdere regels tussen speciale "haakjes" geplaatst - alles wat zich tussen de regels =begin en =end bevindt, wordt als commentaar beschouwd. Bijvoorbeeld,

#!/usr/bin/env ruby ​​​​=begin Dit is een commentaar =end zet "Hallo, wereld!" # Dit is ook een opmerking

Een Ruby-programma, vaak een script genoemd, is een reeks instructies (instructies, zinnen). Elke instructie eindigt standaard aan het einde van de regel. Als het om de een of andere reden nodig is om meerdere instructies op één regel te plaatsen, dan moeten ze worden gescheiden door een symbool; (puntkomma). Aan de andere kant past de instructie soms niet op één regel. In dit geval geeft het \-symbool aan dat het vervolg zich op de volgende regel bevindt.

Voorbeeld

#!/usr/bin/env ruby ​​​​# De instructie eindigt aan het einde van de regel "Hello, World!" # Meerdere instructies op één regel luiden: "Dit is een test",; zet "demonstreren hoe Ruby werkt." # Een onvoltooide verklaring, # vervolgd op de volgende regel luidt: "Programmeren in Ruby is " + "een plezierige ervaring." # Verklaring verdeeld in verschillende regels luidt \ "En dit zullen we zeker leren!"

Een instructie (statement) is meestal een reeks instructies die worden toegepast op verschillende expressies en (mogelijk) functieaanroepen.