**რუბი** — მაღალი დონის დინამიკური, ობიექტზე ორიენტირებული ენა პროგრამირებაში. მან განსაკუთრებული პოპულარობა მოიპოვა ვებ-პროგრამირების კარკასის–„რეილზის"–შექმნის შემდეგ.

რუბის ძირითად პარადიგმას წარმოადგენს კლასებზე დაფუძნებული ობიექტ ორიენტირებული პროგრამირება შეტყობინებათა გადაცემის მექანიზმით (Class-based OOP via the message passing). ეს კი, შედეგად იძლევა, რომ:

* რუბიში ყველაფერი ობიექტია
* რუბიში არ არსებობენ მეთოდები და ფუნქციები, როგორც ასეთი; მათ როლს ასრულებს შეტყობინებები და პროცედურა-ობიექტები
* შესაძლებელია შეტყობინების კონვერტაცია პროცედურა-ობიექტად
* შესაძლებელია პროცედურა-ობიექტის კონვერტაცია შეტყობინებად
* შესაძლებელია ანონიმური პროცედურა-ობიექტების შექმნა

ცხადია, რუბი მოდულარულია და ამდენად, შესაძლებელია ფუნქციების ემულაცია. თუმცა გასათვალისწინებელია შემდეგი გარემოება: რუბის მოდული სავსებით ჩვეულებრივი კლასია, კონკრეტული მოდული — ამ კლასის ეგზემპლარი, ხოლო მოდულში მოცემული ფუნქციები კი რეალურად სხვა არაფერია, თუ არა მოდულის კლას-შეტყობინებები (ჯავას სტატიკური მეთოდების ანალოგები). ამდენად, შესაძლებელია ნებისმიერი კლასის გაფართოება მოდულით; მაგალითად:

```
class Someclass
 #მოდულში მოცემული ფუნქციები ემატება კლასის ყველა ეგზემპლარს
 include Somemodule
end

sm = Someclass.new
#მოდულში მოცემული ფუნქციები ემატება ამ კონკრეტულ ეგზემპლარს
sm.extend Somemodule

```

რუბის შეტყობინებები შეიძლება, იყვნენ იტერატორები. ამ უკანასკნელთ ყოველთვის მოყვება ანონიმური პროცედურა-ობიექტი, რომელსაც გადაეცემა იტერაციის შედეგი:

```
def dummy\_iter
 yield 1
 yield 2
end

```

```
dummy\_iter { |x| puts x\*x } #-> შედეგი:1 4

```

შეტყობინებების აქტივაციისას ფრჩხილების გამოყენება ფაკულტატურია, მაგ.

some\_mes 10 20 იგივეა, რაც some\_mes(10, 20)

რუბის უაღრესად მნიშვნელოვანი მახასიათებელია ის, რომ ნებისმიერ შეტყობინებას შეუძლია, ცხადი სახით ჰქონდეს არგუმენტად ანონიმური ბლოკი:

```
def block\_consumer( a, &b )
 #message body
end

```

აქ &b ანონიმური ბლოკია. მისი ყოფნის შემოწმება ხდება გლობალური ცვლადით „block\_given?". ეს საშუალებას გვაძლევს, ადვილად განვახორციელოთ ტრანზაქცია:

```
block\_consumer a do |inner\_var|
 #transaction code
end

```

ან შესრულდება transaction code-ის *ყველა* ინსტრუქცია, ან ერცერთი. ანონიმური ბლოკების გამოყენება საშუალებას გვაძლევს, აგრეთვე, შევქმნათ ამოცანის სპეციფიკური მიკრო-ენები, ეს რუბის გამოყენების ერთ-ერთი უმნიშვნელოვანესი სფეროა.

რუბი, ისევე როგორც პითონი, მეტა-პროგრამირების ფართო საშუალებებს იძლევა. ყოველივე ზემოხსენებილი, და ასევე, რუბის პროგრამების გავრცელებისა და მოპოვების ონლაინ-უტილიტა gem, უტილიტა rake დაარქივებული 2008-06-20 საიტზე Wayback Machine. , პროგრამების შესრულება-განთავსების კარკასი capistrino ვებ-პროგრამირების კარკასი rails დაარქივებული 2018-06-07 საიტზე Wayback Machine.  განაპირებობს რუბის მზარდ პოპულარობას.

რესურსები ინტერნეტში
--------------------

* რუბის მთავარი გვერდი
* რუბი პირდაპირ ბრაუზერში დაარქივებული 2007-02-17 საიტზე Wayback Machine.
* Full Ruby on Rails Tutorial დაარქივებული 2007-05-17 საიტზე Archive.isCategory:Webarchive template archiveis links

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| ხ • გ • რ
პროგრამირების ენები |
| --- |
|  |
|  ობიექტზე-ორიენტირებული | 
* გრუვი
* D
* ეიფელი
* პითონი
* რუბი
* Objective-C
* C++
* C#
* ჯავა
* ჯავასკრიპტი

 |
|  |
|  ბრძანებითი | 
* ასემბლერი
* კობოლი
* ლუა
* პერლი
* PHP
* C

 |
|  |
|  ფუნქციური | 
* ობიექტური კამლი
* Clojure
* F#
* Standard ML

 |
|  |
|  თანადროული | 
* ადა
* ერლანგი

 |

 |