Ruby

Матеріал з Вікіпідручника


Ruby — це інтерпретована, повністю об'єктно-орієнтована мова програмування зі строгою динамічною типізацією. Ruby поєднує в собі Perl-подібний синтаксис із об'єктно-орієнтованим підходом мови програмування Smalltalk. Також деякі риси запозичено із мов програмування Python, Lisp, Dylan та CLU.

Встановлення[ред.]

  1. Виконуємо інструкції на офіційній сторінці
  2. Читаємо далі, як перевірити чи все працює.

Привіт світе![ред.]

Створюємо файл hello.rb, в якому пишемо:

print "Привіт, світе!\n"

І виконуємо його:

ruby hello.rb

Як інший варіант - запускаємо інтерпретатор irb,

Частини мови[ред.]

Мова в сенсі Мова[ред.]

Язик не повернеться назвати Ruby мовою програмування. Це означатиме що мова створена для ком'ютера. Що ми, кодери, є чужинцями, які шукають громадянства в комп'ютерному краю. Що це комп'ютерна мова, а ми перекладачі для світу.

Але як ви називаєте мову, коли починаєте на ній думати?

Це матиме на увазі, що мова працює перш за все в термінах комп'ютера. Коли починаєш використовувати слова та звороти мови щоб виразити себе. Комп'ютери не можуть виражати себе. Тому як це може бути комп'ютерна мова? Вона наша, ми можемо спілкуватись нею як рідною. Ми не можемо більше чесно називати її мовою програмування. Це кодерська мова. Це мова наших думок.

Прочитайте наступне речення вголос:

5.times { print "Odelay!" } 

В реченнях англійською пунктуація (крапки, дужки, лапки) не читається. Пунктуація додає значення до слів, допомагає краще зрозуміти що хотів сказати автор. Тому речення вище можна прочитати як Five times print "Odelay!". Що означає "П'ять разів надрукуй "Odelay!"", що й робить ця програма.

Прочитайте наступне речення вголос:

exit unless "restaurant".include? "aura" 

Тут відбуваються деякі перевірки. Наша програма зробить exit (вихід (тобто завершиться)), unless (якщо тільки) "restaurant" (слово) include? (не включає) "aura" (інше слово). Тобто англійською "Exit unless the word restaurant includes the word aura.". Ви коли небудь бачили мову, яка б так ефективно використовувала знак запитання? Ruby використовує деяку пунктуацію таку як знаки оклику та запитання, щоб покращити читабельність коду. Ми задаємо питання в реченні вище, то чому б не зробити це очевидним?

Прочитайте наступне речення вголос:

['toast', 'cheese', 'wine'].each { |food| print food.capitalize } 

І хоча ця частина коду вже не така читабельна і не так схожа на речення, як попередні, все одно прочитайте в голос. Хоча іноді Рубі читається як англійська, часом вона читається як скорочена англійська. Якщо повністю перекласти на англійську попереднє речення, вийде "With the words ‘toast’, ‘cheese’, and ‘wine’: take each food and print it capitalized." Комп'ютер чемно відповість: "Toast, Cheese та Wine".

Вас вже напевне цікавить, що означають крапки та дужки. Тому переходимо до вивчення частин мови.

Коментарі[ред.]

Коментарі, як це і прийнято призначені лише для людей, і комп'ютером ігноруються. І як прийнято в скриптових мовах, в Рубі коментарі йдуть від символа #, до кінця рядка:

# це коментар

Змінні[ред.]

Змінною може бути будь-яка послідовність букв, цифр та символу підкреслювання що починається з маленької букви. Наприклад:

x, y, banana2 чи phone_a_quail

Числа[ред.]

Найпростішим видом числа є ціле - послідовність цифр, яка може починатись знаком плюс чи мінус. Наприклад:

 1, 23, чи -10000

Всередині чисел не дозволені коми, зате дозволені символи підкреслювання. Тому якщо ви хочете виділити тисячі, щоб зробити числа більш читабельними, можете написати так:

population = 12_000_000_000 

Десяткові дроби в програмуванні називаються числами з плаваючою крапкою. Вони складаються з чисел з крапкою щоб відділити цілу частину від дробової, чи чисел в експоненційному форматі. Наприклад:

3.14, -808.08 чи 12.043e-04

Рядки[ред.]

Рядки - це будь-які символи (літери, цифри, розділові знаки) взяті в лапки. Можна використовувати як подвійні ("), так і одинарні (') лапки. Наприклад:

"sealab", '2021', чи "These cartoons are hilarious!" 

Символи[ред.]

Символи - це слова, які виглядають майже як змінні. Нагадаємо, що вони можуть містити букви, цифри, чи символи підкреслювання. Але вони починаються з двокрапки. Наприклад:

:a, :b, or :ponce_de_leon 

Символи - це полегшені рядки. Зазвичай вони використовуються в ситуаціях де ви використали б рядок не для друку на екран.

Константи[ред.]

Константи це такі ж слова як і змінні, але починаються з великої літери. Якщо вважати змінні іменниками Рубі, то константи - власні назви.

Методи[ред.]

Якщо змінні та константи є іменниками, то методи - дієслова. Методи зазвичай приєднуються до змінної чи константи символом крапки. Ви вже бачили як працюють методи:

front_door.open 

В прикладі вище, open - метод. Методи можна застосовувати цілими серіями:

front_door.open.close 

Вище ми наказали комп'ютеру відкрити передні двері, і одразу ж закрити їх. Наступний приклад - теж метод:

front_door.is_open? 

Він наказує комп'ютеру перевірити чи двері відкриті. В іменах методів можна використовувати як знак запитання, так і знак оклику.

Аргументи методів[ред.]

Методи можуть потребувати додаткової інформації для свого виконання. Якщо ми захочемо змусити комп'ютер зафарбувати двері, ми повинні сказати в який колір. Аргументи додаються в кінець методу, і зазвичай оточені дужками, і розділені комами.

front_door.paint( 3, :red ) 

Приклад вище зафарбовує двері трьома шарами червоної фарби.

Методи з аргументами теж можна застосовувати серіями

front_door.paint( 3, :red ).dry( 30 ).close() 

Хоча останній метод не має аргументів, ми все одно можемо написати дужки, якщо нам так більше подобається.

Ядерні методи[ред.]

Деякі методи (такі як print) є методами ядра Рубі. Їх всюди використовують. Через те що вони дуже поширені, не обов'язково ставити перед ними крапку:

print "Бачите, без крапки."

Методи класу[ред.]

Як і методи описані вище (їх називають методами екземплярів), методи класу зазвичай приєднуюються після змінних і констант. Замість крапки використовують дві двокрапки:

Door::new( :oak ) 

Метод класу new, який ми бачимо вище використовується для створення екземпляру класу. В прикладі вище, ми просимо Рубі створити нам нові дубові двері. Звісно Рубі до того повинні були пояснити як це робиться.


Глобальні змінні[ред.]

Змінні що починаються символом долара є глобальними. Наприклад:

$x, $1, $chunky чи $CHunKY_bACOn

Змінні екземплярів (атрибути)[ред.]

Змінні що починаються з символа "at" (@) є змінними екземплярів. Наприклад:

@x, @y, чи @cut_of_bacon

Ці змінні часто використовуються щоб описати атрибути чого-небудь. Наприклад можна описати ширину дверей, встановивши значення змінної @width, всередині об'єкта front_door. Можна вважати, що символ "at" означає "attribute".

Змінні класу[ред.]

Змінні класу починаються двома собаками (@). Наприклад:

@@x, @@y, чи @@chunky_bacon

Змінні класу також задають атрибути. Але не для окремого об'єкта, а для всіх об'єктів класу. Можна вважати що @@ означає "attribute all".

Блоки[ред.]

Будь-який код що оточений фігурними дужками - це блок:

2.times { print "Це блооок!" } 

Замість фігурних дужок можна використати слова do та end.


Аргументи блоку[ред.]

Аргументи блоку - це набір змінних оточених символами вертикальної риски і розділені комами. Наприклад:

|x|, |x,y|, та |up, down, all_around| 

Аргументи блоку використовуються на початку блоку. Наприклад:

{ |x,y| x + y } 

В цьому прикладі, аргументи - |x,y|. Після аргуменітв йде код.

Інтервали[ред.]

Інтервал - це два значення в круглих дужках, які розділені двома, чи трьома крапками. (1..9) - це інтервал що містить всі цифри від одного до 9. ('a'..'z') - це інтервал що містить всі маленькі латинські літери.

Зазвичай використовуються лише дві крапки. Якщо додають третю крапку, останнє значення інтервала не включається. (0...5) задає всі цифри від 0 до 4.

Масиви[ред.]

Масив - це розділений комами список елементів поміщений в квадратні дужки. Наприклад:

[1, 2, 3] 
['coat', 'mittens', 'snowboard']
[1,"two", [3,4]]


Хеші[ред.]

Хеш - це словник, оточений фігурними дужками. Словники співставляють слова з їх означеннями. Рубі робить це за допомогою стрілок:

{'a' => 'aardvark', 'b' => 'badger'}


Регулярні вирази[ред.]

Регулярний вираз - це послідовність символів оточених слешами. Наприклад:

/ruby/, /[0-9]+/ чи /^\d{3}-\d{3}-\d{4}/ 

Оператори[ред.]

Наступні оператори використовуються в Рубі для виконання математичних операцій та порівнянь.

** !  ~  *  /  %  +  -  &     
<< >> |  ^  >  >= <  <= <=>   
|| != =~ !~ && += -= == === 
 .. ... not and or          

Ключові слова[ред.]

Рубі також має набір ключових слів, які не можна використовувати як імена змінних. Як тільки ви спробуєте використати їх не за призначенням - отримаєте синтаксичну помилку. Деякі з них ми вже бачили, деякі ще ні:

alias   and     BEGIN   begin   break   case    class   def    
defined    do      else    elsif   END     end     ensure  
false   for     if    in      module  next    nil     not     
or      redo    rescue  retry    return  self    super   then
true    undef   unless  until   when    while   yield

Посилання[ред.]