Руби () је објектно оријентисани програмски језик. У себи комбинује синтаксу инспирисану језицима Перл и Ада, са објектно оријентисаним особинама налик језику Smalltalk (-{Smalltalk}-), а дели и неке особине са језицима Пајтон, Lisp, -{Dylan}- и -{CLU}-. Руби је једнопролазни интерпретирани језик. Његова главна имплементација је слободни софтвер под лиценцом отвореног кода.

Јукихиро „Мац“ Мацумото (-{Yukihiro Matsumoto}-) је са развојем овог језика почео у фебруару 1993. године. Први пут је објављен 1995. године, а тренутно је актуелна стабилна верзија 1.9.3-p0 која се може преузети са званичне стране језика. По многим програмерима, Руби слиједи принцип „најмањег изненађења“, чиме мисле да је тај језик ослобођен свих замки и контрадикторности познатих из других језика. Име „руби“ потиче од енглеске ријечи за „рубин“ () што је само алузија на „перл“ (енглески „бисер").

Руби је дуго времена био чисто јапанска појава, гдје је постигао велику популарност, отприлике једнаку као Перл или Пајтон. Документација је постојала само на јапанском. „Мац“ је тек крајем миленијума кренуо са активностима популаризације тог програмског језика и изван Јапана. Веома брзо је прихваћен и убрзо затим су објављени многобројни чланци у стручним часописима као и документација на другим језицима.

Рани концепти “Разговарао сам са колегом о могућностима објектно-оријентисаног скрипт језика. Знао сам Perl, али ми се није стварно свиђао, јер је био налик на toy језике. Објектно-оријенстисани језици су деловали врло обећавајуће. Тада сам научио Python. Али ми се није свиђао, јер нисам мислио да је прави објектно-оријентисани језик: имао је само неке карактеристике ОО као додатке. Као залуђеник програмским језицима и фан ОО већ 15 година, заиста сам желео истински објектно оријентисан, једноставан за употребу програмски језик. Тражио сам, али нисам могао пронаћи један. Зато сам одлучио да га направим.” Мацумото описује да је дизајн Рубија једноставан као језгро језика Lisp, са системом објеката налик на Smalltalk и практичне корисности као Perl.

Прво издање Прво јавно издање програмског језика Руби"Shugo Maeda(17 December 2002). The Ruby language FAQ" 0.95 објављено је на јапанске newsgroup 21. децембра 1995. године. Након тога, још три верзије програмског језика су објављење у два дана. Након објављивања Руби 0.95 , неколико стабилних верзија језика су објављење у наредним годинама: Руби 1.0 децембар 25, 1996 Руби 1.2: децембар 1998 Руби 1,4: август 1999 Руби 1.6: септембар 2000

Године 1997, објављен је први чланак о језику Руби на интернету. Исте године, Матсумото је ангажован од стране netlab.jp да ради као -{full-time developer}- у програмском језику Руби. Године 1998. године, покренута је апликација -{Ruby Application Archive}- , заједно са једноставном страницом на енглеском језику за Ruby. Године 1999, Мацумото и Кеију Исхитсука су написали прву књигу(-{The Object-Oriented Scripting Language Ruby}-, октобар 1999.) о овом програмском језику, за који је порасло интересовање и ван Јапана, То је праћено објављивањем још 20 књига о овом језику у Јапану, ране 2000. године. До 2000. године, Ruby је постао популарнији него Python у Јапану. У септембру 2000. године, прва књига на енглеском језику, -{Programming Ruby}-"Book: Programming Ruby, D. Thomas, A. Hunt" је штампана, док је несто касније пуштена у слободну продају, што је продубило усвајање овог програмског језика и у другим земљама.

Најновије верзије програмског језика Руби: Руби 2.5.0"Ruby 2.5.0", октобар 2017. Руби 2.4.2"Ruby 2.4.2", септембар 2017. Руби 2.3.5"Ruby 2.3.5", септембар 2017.

Филозофија програмског језика Ruby"Bill Venners, The Philosophy of Ruby" Мацумото је рекао да је Руби дизајниран за продуктивност програмера и забаву, на начелима доброг дизајна корисничког интерфејса. На -{Google Tech Talk-u}-, 2008. године Мацумото даље наводи: “Надам се да ће Ruby помоћи сваком програмеру у свету да би буде продуктивнији, и да ужива у програмирању, и да буде срећнији. То је примарна сврха језика Руби. “ Он наглашава да дизајн система треба да пре задовољи потребе човека, а не рачунара. “Често људи, посебно програмери, фокусирају се на машине. Они мисле: “Радећи ово машина ће радити брже, успешније...” Они се фокусирају на машине. Али, у ствари, морамо да се фокусирамо на људе, на начин програмирања или ради управљења апликацијама. Ми смо господари. Они су робови.” Језик Ruby треба да поштује принцип ПОЛА, што значи да треба да се понаша на такав начин да минимизира забуне за искусне кориснике. Мацумото је рекао да је његов примарни циљ дизајна је био да се направи језик који он сам ужива користи, смањујући рад програмера и могућу забуну. Он је рекао да није применио принцип ПОЛА у дизајну језика, али је без обзира на то фраза у блиској асоцијацији са језиком Ruby. Фраза је и сама била извор изненађења, посто су многи почетни корисници могли да помисле да језик Руби опонаша понашање других језика. У мају 2005. године дискусијом на -{newsgroup.comp.lang.ruby}-, Мацумото покушао да дистанцира Руби од ПОЛА принципа, објашњавајући да пошто је било који избор дизајна изненађујући за некога, он користи лични стандард у процени изненађења. Ако смо доследни у личном стандарду, биће мање изненађења за упознате са стандардом.

Мацумото је то објаснио на следећи наћин: "Сви имају сопствену позадину. Неки програмирају у Python-у, неки у Perl-y, И они могу бити изненађени различитим аспектима језика. Онда они дођу код мене И кажу: “Био сам изненађен овом карактеристиком језика, тако да Руби нарушава принцип најмањег изненађења”. Чекај. Чекај. Принцип најмањег изненађења није само за тебе. Односи се на принцип мог најмањег изненађења и односи се на принцип најмањег изненађења након што научиш Руби веома добро. На пример, ја сам био C++ програмер пре него сто сам започео дизајнирање језика Руби. Програмирао сам искључиво у C++ две или три године. И после две године C++ ме И даље изненађује."

Особине Једноставна и читљива синтакса „Чисто“ објектно оријентисани језик (слично Smalltalkу) „Све“ је објект Наслеђивање од модула, умјесто вишеструког наслеђивања Уникатне методе (-{Singleton}-) Динамична промјена имена и надоградња класа приликом извршења програма Итератори Преписивање оператора Интроспекција (-{Reflection}-) Нетипизоване варијабле Обрада изузетака аутоматско ослобађање непотребно заузете меморије (-{garbage collection}-) подршка Перлових регуларних израза (још непотпуна) подршка на више оперативних система јединствен интерфејс за приступ базама података аутоматска документација (слично -{javadoc}-) могућност и функционалног и процедуралног програмирања либерална лиценца (ГНУ или по жељи)

Руби је потпуно објектно оријентисан. Све променљиве су објекти, што важи, за разлику од Џаве (-{java}-), и за примитивне типове. Опште карактеристике програмског језика Руби Руби је интерпретирани програмски језик, што значи да се изворни кôд преводи у кôд разумљив рачунару приликом сваког извршавања програма. Очити је недостатак интерпретираних програмских језика то да су спорији него компајлирани програмски језици као што је на пример -{C}-. Предност је њихова већа флексибилност и краће време израде програма. Руби је потпуно објектно- оријентисан програмски језик, што значи да се програмски проблеми решавају дефинисањем класа, а из класа настају појединачни објекти. Једна је од предности објектно-оријентисаног приступа то да он олакшава рад на великим пројектима јер је задатак могуће поделити на више програмера, од којих сваки може засебно радити на једној класи или на више њих. На почетку рада се дефинишу поруке које се могу слати одређеном објекту, а након тога програмери имају слободу писати и мењати кôд унутар класе под условом да поруке остају непромењене. Објектно-оријентисана метода решавања проблема врло је ефикасна јер рашчлањује проблеме на природан начин сличан ономе који се употребљава у решавању проблема у свакодневном животу.

Руби припада отвореном коду будући да је објављен под лиценцом ГПЛ. Временом је објављено више алтернативних интерпретера програмског језика Руби. Најпознатији је JRuby који је написан у програмском језику Java. Предности и недостаци За Руби се каже да има природну синтаксу. Наиме, синтакса програмског језика Руби не садржи непотребне знакове и стога кôд написан у програмском језику Руби оставља утисак јасноће и једноставности.

Пример једноставности синтаксе:

Претпоставимо да желимо да пошаљемо поруку напуни_гориво објекту мој_ауто уколико резервоар није пун:

-{moj_auto.napuni_gorivo unless moj_auto.spremnik_pun? }-

Приметимо да је синтакса једноставна, без сувишних знакова у запису наредбе, за разлику од синтаксе других програмских језика. Руби-“програмеров најбољи пријатељ”"About Ruby" Руби је замишљен као програмски језик који олакшава рад програмеру лакоћом коришћења, једноставношћу и флексибилношћу. Усмереност на програмера очита је у свим деловима програмског језика. Најочитији пример за то је могућност писања кода на више различитих начина. Ево неколико примера:

-{ puts “Hello,world” или puts(“Hello,world”) {“jedan”, “dva”, “tri”} }-

Тестови Исправљање грешака у коду (енг. bug) врло је тежак посао, нарочито након што се заврши развој и крајњим корисницима програм преда на употребу. Најбоље је открити што већи број грешака приликом саме израде програма.

Руби омогућава писање тестова који тестирају изворни кôд. То је нова програмерска парадигма која омогућава бржи развој и самим тим мање трошкове развоја програма.Програмери који пишу програме у програмском језику Руби врло се често користе тестовима и они су интегрални дио сваког озбиљног проширења или програма.

Покретање програма Најједноставнији је начин покретања кода креирање датотеке с програмским кодом и покретање те датотеке наредбом ruby. Датотеке које садрже кôд написан у програмском језику Руби обично (по договору) имају екстензију .rb.

-{ruby мој_програм.rb }-

Основе програмског језика Руби Променљиве Променљива је симболичко име којем је придружена нека вредност. Променљива је својеврсно складиште (део меморије рачунара) у којем се налази неки податак.

-{>> moja_promenljiva = 7 }-

Том је наредбом променљивој која се зове моја_променљива придружена вредност 7. Ако се након тога у неком изразу употреби име моја_променљива, интерпретер ће из меморије рачунара узети вредност променљиве моја_променљива (која у том случају износи 7) и укључиће је у израз на месту на којем се спомиње. -{ >> puts moja_promenljiva * 2 14 }- Вредност променљиве се може мењати. Приступ променљивој којој није придружена вредност резултира поруком о грешци. Типови података

Сваки податак је одређеног типа. Основни типови података у програмском језику Руби јесу бројеви, низови знакова (енг. string) и поља (енг. аrrays). Низови знакова(стринг) Низови знакова (енг. string) могу се у програмском језику Руби написати на више начина. Најчешће се користе двоструки наводници: -{ >> "ovo je string" => "ovo je string" }- Двоструки наводници омогућавају уметање и извршавање израза унутар самог стринга: -{ >> "Ja imam #{100 + 100} dinara" => "Ja imam 200 dinara" }- Низови знакова могу се написати и користећи једноструке наводнике. У том случају није могуће у низове знакова уметати и извршавати изразе те уписивати посебне знакове: -{ >> puts 'Ja imam #{100 + 100} dinara\ndrugi red' Ja imam #{100 + 100} dinara\ndrugi red }- У програмском језику Руби nil представља непостојећу или недефинисану вредност.

Hash-таблице (поља) Тип података под називом поље (енг. hash) сличан је низу, али за кључеве можемо користити било коју вредност. Низ има свој редослед, па ако прескочимо индекс, стварају се вредности нил. Код поља то није случај будући да индекс може бити било који тип података па не може бити речи о очекиваном редоследу индекса.

Поље се дефинише употребом витичастих заграда: -{ >> a = {} => {} }- Вредности унутар поља додају се на исти начин као и код низова: -{ >> a["kljuc"] = "Vrednost"