Тема: мова програмування Ruby і середовище програмування.
Мета: ознайомити з основами мови Ruby та її можливостями.
По завершенню вивчення учень:
Обладнання: комп’ютери зі встановленими ОС та інтепретатором Ruby чи доступом до інтернету, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.
2. Актуалізація опорних знань
Дати означення понять, виділені жирним шрифтом. Порівняти з очікуваними відповідями.
Алгоритм — це запис скінченої послідовності вказівок, виконання яких призводить до розв'язання певної задачі.
Вказівка (алгоритму) — це спонукальне речення, що вказує, яку дію має виконати виконавець алгоритму.
Виконавець (алгоритму) — це жива істота (людина або тварина) або автоматичний пристрій (робот, електронна обчислювальна машина тощо), спроможна діяти відповідно з алгоритмом.
Система вказівок виконавця — це множина (сукупність) всіх вказівок, які може виконувати даний виконавець.
Середовище виконання алгоритму — об'єкти, з якими працює виконавець у процесі виконання алгоритму.
Властивості алгоритму: дискретність, визначеність, виконуваність, скінченність, результативність, масовість, ефективність.
Дискретність (латинською discretus — розділений, розривний) алгоритму означає, що виконання алгоритму зводиться до виконання окремих дій (кроків) у певній послідовності. Причому, кожну вказівку алгоритму виконують за скінченний проміжок часу.
Визначеність (однозначність) означає, що алгоритм однозначно визначає порядок дій виконавця, результат цих дій і не потребує додаткового тлумачення..
Виконуваність означає, що алгоритм, призначений для певного виконавця, може містити лише вказівки, які входять до системи вказівок цього виконавця.
Скінченність означає, що виконання алгоритму закінчиться після скінченної (можливо, досить великої) кількості кроків і за скінченний час для довільних вхідних даних.
Результативність алгоритму означає, що після закінчення виконання алгоритму обов’язково:
Масовість алгоритму означає, що алгоритм можна застосувати до цілого класу однотипних задач, для яких спільними є умова та хід розв’язування та які відрізняються лише початковими (вхідними) даними. Наприклад, алгоритмом дій, складеним для одного касира, можуть успішно скористатися всі касири супермаркету. А програмою пошуку коду і підрахунку суми вартостей товарів, придбаних покупцем, — усі комп'ютери супермаркету
Ефективність алгоритму описує час виконання і об'єм ресурсів, необхідних для виконання алгоритму: чим менше часу (часова ефективність) і ресурсів (просторова ефективність), тим ефективність вища.
3. Вивчення нового матеріалу
У театрі хід подій на сцені попередньо визначено у найдрібніших деталях:
Відхід від цього у театрі — імпровізація акторів — інколи сприяє
успіху вистави. Але імпровізації у технологічних процесах, до яких
належить і обчислювальні, призводить до збоїв і аварій.
Робота комп'ютера полягає у виконанні програми — опису набору певних дій у певному порядку. Програма є алгоритмом дій комп’ютера, записаним зрозумілою для нього мовою.
Щоб задати комп'ютеру послідовність дій, потрібно задати послідовність двійкових кодів відповідних вказівок. Писати такі програми — дуже складна й марудна справа.
Простіше писати програму деякою мовою, наближеною до природної людської мови, а переклад у машинні коди доручити комп'ютеру. Так з'явилися мови, призначені спеціально для написання програм — мови програмування, що на відміну від розмовної мови не допускають двозначностей чи вільного тлумачення.
Мова програмування (англійською programming language) — це система позначень для опису алгоритмів та структур даних.
Програмний код, код програми, текст програми — запис опису змінних і сталих, приєдниних бібліотек, вказівок до виконання мовою програмування.
Інтерпретована мова програмування — мова програмування, в якій початковий (сирцевий) код програми не перетворюють попередньо повністю у машинний код для виконання, на відміну від компільованих мов, а виконують рядок за рядком з допомогою спеціальної програми-інтерпретатора.
Ruby — це інтерпретована мова високого рівня для швидкого і зручного об’єктно-орієнтованого програмування.
Мова Ruby має незалежну від операційної системи реалізацію багатопоточності, сувору динамічну типізацію, «збирач сміття» і багато інших можливостей. Ruby близький за особливостями синтаксису до мов Перл і Ейфель, за об’єктно-орієнтованим підходом до Smalltalk. Також деякі риси мови взяті з Python, Lisp, Dylan і CLU.
Будь-яка мова програмування має такі 3 основні складові: алфавіт, синтаксис (правила написання) і семантику (правила тлумачення й виконання).
Алфавіт мови Ruby включає:
Синтаксис мови програмування — правила, що визначають, як має виглядати програма цією мовою. Зокрема, як писати вказівки (оператори), опис типів даних, сталих
і змінних та інші мовні конструкції. Наприклад, мовою Ruby назви сталих записують великими літерами.
Коментар — це частина тексту програми для пояснення програми чи окремих вказівок, що не впливає на виконання програми.
Коментар мовою Ruby у рядку починають символом # (дієз):
# текст коментаря
Багаторядковий коментар:
Лексема — неподільний елемент мови: слово, число, символи операцій.
Основним елементом синтаксису мови Ruby є вираз. Інтерпретатор Ruby обчислює вираз і повертає його значення. Найпростішим виразом є початковий вираз, що є записом значення.
Тип даних — це деякий клас об`єктів даних разом з набором операцій для створення і роботи з ними і діапазоном допустимих значень.
В кожній мові програмування є певний набір вбудованих типів даних. Зазвичай передбачено засоби визначення інших (невбудованих) типів даних. В мові Ruby розрізнять прості та складні типи даних. До простих відносять числові, логічні та символьні типи даних.
Ієрархія класів Ruby:
Проілюструємо кодом з результатом виконання цю ієрархію:
str = "Рядок" # => "Рядок" str.class # => String str.class.superclass # => Object
Класи можно визначати (створювати) й створювати за ними об'єкти. Зауважимо: опис класу в Ruby не просто описова конструкція без типу (як, наприклад, у C++), а це об'єкт (!) класу Class, доповнений користувацькими методами.
Крім звичного десяткового запису чисел з використанням десяткової крапки для дробів інтепретатор Ruby сприймає і такі записи:
076 — запис у вісімковій системі числення, що розпочинають нулем;
0b010 — запис у двійковій системі числення, що розпочинають нулем і літерою латиниці b;
0x89 — запис у шістнадцятковій системі числення, що розпочинають нулем і літерою латиниці x.
Семантика мови Ruby — це семантика повністю об'єктно-орієнтованої мови. Інакше кажучи:
Покажемо дію останнього правила на такі послідовності виразів та результатів обчислення відповідно ліворуч і праворуч від вертикальної риски:
a = "abcdefg" | "abcdefg" b = a | "abcdefg" b | "abcdefg" a[3] = 'R' | "R" b | "abcRefg"
Тут при зміні значення змінної а неявно змінили значення b, бо вони містять посилання на один об'єкт.
Надати значення змінним можна «гуртом» — див. приклад:
a, b, c, d = 5333, 0xFE, 45, "Текст" e, f = a+b, c a = b = c = 22
Збільшення значення: a = a + 23 можна записати скорочено: a+=23
Ruby не підтримує множинне наслідування. Але замість нього має потужний механізм домішок. Усі класи (напряму або через інші класи) виведено (отримано) з класу Object. Тому будь-який об`єкт може використовувати наявні для Object методи (class, to_s, nil? тощо). Є підтримка процедурного стилю запису, але усі глобальні процедури неявно є закритими методами класу Object.
Мова Ruby є мовою багатьох парадигм — систем понять і уявлень:
підтримано процедурний стиль — є визначення функцій та змінних поза класами;
об`єктна-орієнтована — усе є об`єктом;
функціональна (анонімні функції, замикання, повернення значення усім інструкціям, повернення функцією останнього обчисленого значення).
Мова Ruby підтримує відображення, метапрограмування, інформацію про типи змінних на стадії виконання.
Мова Ruby має лаконічний та простий синтаксис, частково розроблений під впливом Ада, Ейфель і Python. Дозволяє обробляти виключення у стилі Java чи Python. Дозволяє перевизначати оператори, які насправді є методами. Усі дані в Ruby є об`єктами у понятті Smalltalk. Єдиний виняток — конструкції керування. Також підтримано додавання методів у клас і навіть у конкретний екземпляр під час виконання програми. Містить автоматичний збирач сміття. Він працює для всіх об`єктів Ruby, в тому числі для зовнішніх бібліотек. Створювати розширення для Ruby на С дуже просто частково через збирача сміття, частково через нескладний і зручний API (англійською Application Programming Interface — набір визначень взаємодії різнотипного програмного забезпечення).
Підтримує замикання з повною прив'язкою до змінних. Підтримує блоки коду {...} або do ... end. Блоки можна використовувати у методах або перетворювати у замикання.
Цілі змінні в Ruby автоматично конвертуються між типами Fixnum (32-розрядні) і Bignum (більше 32 розрядів) залежно від їхнього значення. Це дозволяє здійснювати цілочисельні математичні розрахунки з довільною точністю.
Інтерпретатор не вимагає попереднього оголошення змінних. Але бажано змінним спочатку надавати порожнє значення nil. Тоді інтерпретатор знає, що ідентифікатор позначає змінну, а не метод.
Безпосередньо в Ruby реалізовано багато шаблонів проектування. Може динамічно завантажувати розширення, якщо це дозволяє операційна система. Має незалежну від ОС підтримку невитискної багатопотоковості. Перенесена на багато платформ. Ruby розробляли на GNU / Linux, але працює на багатьох версіях Unix, DOS, Microsoft Windows, Mac OS, BeOS, OS / 2 і т.д. Можна додавати методи не лише у будь-які класи, але й у будь-які об'єкти.
Домовленості для позначення області видимості
(замість x можна записати довільну послідовність, прийнятну для назви змінної):
x — локальна змінна;
@x — змінна екземпляра (член або поле об'єкта класу);
@@x — змінна класу;
$x — глобальна змінна.
Приклади вказівок мовою Ruby з поясненнями
def str.bye "Бувай!" end
За назвою методу (для поданого прикладу bye) може слідувати (необов`язковий) список параметрів функції, записаних через кому у круглих дужках.
Приклади методів
Останній метод ігнорує все, починаючи з першої конструкції, не розпізнаної як частина запису числа, і далі до кінця рядка.
Рядок (string) — послідовністю символів, обмежених з обох боків або подвійними лапками, або апострофами. В Ruby для опису рядків і роботи з ними використовують напрацювання мови Perl. Це дає такі можливості:
необмежена довжина рядка;
можливість змінювати довжину протягом виконання програми;
довільний об'єкт можна перетворити на рядок (методами .inspect и .to_s);
є велика библиотека методів (.gsub, .match, .scan, .split) для роботи з правилами;
у рядки, обмежені подвійними лапками, можна вставляти довільні змінні, обмежені #{ і }. Після виконання код буде заміщено результатом.
Асоціативний масив можна уявити як масив упорядкованих пар. Його запис розпочинають фігурною дужкою {, завершують фігурною дужкою }, а між ними через кому записують дві сутності, розділені символами =>, що вказують на встановлення зв'язку між цими сутностями. Наприклад, таким чином:
array={0=>"нуль","1"=>1}
з такими результатами виведення:
puts array[0] # нуль puts array[1] # nil puts array["1"] # 1
Запис діапазону містить 3 складові (вказано у порядку запису):
де початок і кінець — дані одного злічуваного типу даних одного класу. Злічимість означає наявність методу .succ (переходу до наступного елемента). Приклади діпазонів:
"a".."z" # всі малі літери латиниці "a"..."z" # те саме, що "a".."y" 1..100 # всі натуральні числа від 1 до 100 включно 1...100 # всі натуральні числа від 1 до 99 включно
Три крапки ... вказують на те, що останній елемент запису до діапазону не належить.
Масиви в Ruby можуть змінювати розмір протягом виконання програми й містити різнотипні елементи. Подамо приклади їхнього використання з останнім обчисленим результатом у коментарі після # =>.
a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]
# => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]
— створено масив з 6 елементів.
a[2] # => 3.14
— звернення до елемента масиву зі значенням індексу 2.
a.flatten.uniq # => [1, 'hi', 3.14, 2, 4, 5]
— «розгортання усіх внутрішніх масивів із вилученням копій однакових об`єктів.
a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]
— «розгортання усіх внутрішніх масивів без вилучення копій однакових об`єктів.
a.index(4) # => 5
— пошук найменшого індекса елемента зі значенням 4.
Стандартна бібліотека Ruby надає можливість працювати з різними мережевими протоколами на сторонах сервера і клієнта, засоби для роботи з різними форматами представлення даних: XML, XSLT, YAML, PDF, RSS, CSV, WSDL. Також є бібліотеки для роботи з архівами, датами, кодуваннями, матрицями, засоби для системного адміністрування, розподілених обчислень, підтримки багатопоточності і т. д.
Реалізації:
Офіційний інтерпретатор портовано під більшість платформ: включаючи Unix, Microsoft Windows, DOS, Mac OS X, OS / 2, Amiga, BeOS, Syllable, Acorn RISC OS та інші.
При написаннні ідентифікатора враховують регістр: MAX, Max і max — три різні ідентифікатори.
Ключові слова — це зарезервовані ідентифікатори, які використовують для написання вказівок:
_LINE_, _ENCODING_, _FILE_, BEGIN, END, alias, and, begin, break, case, class, def, defined?, do, else, elsif, 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, break
В одному рядку програми мовою Ruby може бути довільна кількість:
Один вираз можна записати у кількох рядках, розташувавши наприкінці кожного з них, крім останнього, позначки для інтерпретатора, що вираз ще не закінчено. Таким знаком може, наприклад, бути кома в кінці рядка.
Головної програми як такої (функції main) не існує; виконання відбувається згори донизу. У складних програмах на початку тексту зазвичай розташовують численні визначення, за якими слідує головна частина програми.
Зазвичай програми мають дані (змінні та сталі), функції (стандартні та створені користувачем) тощо. Всі дані, які використовують у програмі, необхідно заздалегідь описати для розподілу оперативної пам'яті згідно з описами.
Cлушне запитання: «Як виконати написану програму?» Бо текст програми, написаний на аркуші паперу, не буде виконано.
Код програми можна створити у середовищі довільного текстового редактора. Для зручності роботи користувача створюють інтерактивне інтегроване середовище програмування, у якому об'єднано можливості:
текстового редактора — для набирання текстів програм;
інтепретатора — для виконання програми і виявлення помилок (при наявності таких у програмі);
налагоджувача — для виконання програм і виявлення алгоритмічних помилок
Інтерактивним середовище називають тому, що воно працює в режимі постійного спілкування з користувачем, а інтегрованим тому, що об'єднує в собі одночасно всі згадані вище можливості.
Наразі є навіть безкоштовні online середовища програмування, що не вимагають встановлення програмного забезпечення безпосередньо на комп'ютер користувача. Наприклад, Coding Ground, яке надає можливість працювати з файлами.
Поняття величини є одним з найважливіших понять математики та фізики.
Більшість з них є числовими. У програмуванні користуються таким
визначенням.
Величина — одиниця даних, якими оперує програма. Вона має такі властивості:
назва (ідентифікатор) — послідовність літер латиниці, цифр і нижнього підкреслювання «_», на початку — обов'язково літера;
тип — визначає обсяг відведеної пам'яті, можливі дії, правила тлумачення бітів пам'яті та множину допустимих значень;
розмірність — проста або складена (структурована);
значення — елемент множини допустимих значень величини.
З кожною величиною (або її складовою для структурованої величини) пов'язана ділянка оперативної пам’яті, куди її під час роботи програми заносять та у якій зберегають. Цю ділянку визначено її адресою. Тут під адресою розуміють адресу першого байту з послідовновних щодо адресації байтів, відведених для збереження величини. Назва змінної слугує назвою цієї послідовності байтів під час виконання програми.
Змінні в Ruby не вимагають попереднього оголошення. Вірніше, оголошення змінної відбувається у момент першого надання їй значення. Тип змінної в ході виконання програми можна змінити довільним чином. Тому кажуть, що змінні в Ruby мають динамічно змінюваний тип — див. приклад частини програми мовою Ruby:
a = 5 a = "Тепер це рядок тексту" a = ["А зараз"," це "," взагалі"," список"]
Арифметичні дії у Ruby для усіх числових типів в Ruby позначають такими символами:
Особливість ділення цілих чисел: якщо одне (але не обидва) число є від`ємним, Ruby виконує операцію ділення інакше, ніж Java, C чи С++, але так само, як Python: із заокругленням результату з недостачею. Наприклад, при діленні –7 на 3 Ruby повертає –3 на відміну від С та С++, що повертають –2.
Особливість обчислення лишку від ділення цілих чисел: якщо одне (але не обидва) число є від`ємним, Ruby виконує операцію обчислення лишку від ділення інакше, ніж Java, C чи С++, але так само, як Python і узгоджено із знаходженням частки (див. вище). Наприклад, лишок від ділення –7 на 3 дорівнює 2, як і належить згідно з означенням чистої математики (лишок має бути невід'ємним):
Це суперечить правилам обчислення в С чи Java, згідно з якими цей лишок буде обчислено як –1.
Властивості піднесення до степеня ** (на прикладах):
Логічний тип bool. Змінні цього типу займають 1 байт пам'яті й можуть набувати лише два значення:
Це найпростіший тип даних з найменшим набором операцій:
! — заперечення — справджується (значення true) тоді й лише тоді, коли хибний (значення false) операнд (аргумент);
?? — логічне «і» (кон'юнкція) — справджується тоді й лише тоді, коли справджуються обидва операнди (аргументи);
|| — логічне «або» (диз'юнкція) — справджується тоді й лише тоді, коли справджується хоча б один операнд (аргумент);
^ — заперечення еквівалентності (виключна диз'юнкція) — справджується тоді й лише тоді, значення операндів (аргументів) різняться.
Ці словесні означення можна подати такою таблицею істинності.
Значення операндів (аргументів) | Результат операції | |||||
---|---|---|---|---|---|---|
X | Y | ! X | X && Y | X || Y | X ^ Y | |
0 | 0 | 1 | 0 | 0 | 0 | |
0 | 1 | 1 | 0 | 1 | 1 | |
1 | 0 | 0 | 0 | 1 | 1 | |
1 | 1 | 0 | 1 | 1 | 0 |
Цих операцій достатньо, щоб записати довільну залежність однієї булевої змінної від довільної скінченої кількості булевих змінних.
Традиційно назви логічних методів закінчують знаком запитання «?». За false може виступати символ порожнечі nil, за true — довільний об'єкт, відмінний від nill.
Операції порівняння
Позначення | Тлумачення |
---|---|
== | дорівнює |
!= | не дорівнює |
< | менше |
> | більше |
<= | не перевищує |
>= | не більше |
Розгалуження — це простий, але потужний інструмент створення нелінійних алгоритмів. Для його запису використовують оператор такого вигляду:
if умова [then] код… [elsif умова [then] код…]… [else код…] end
Тут квадратними дужками вказано на необов'язковість відповідної складової. За умову може слугувати довільний арифметичний чи логічний, вираз (логічним виразом називають такий вираз, у результаті обчислення якого одержують логічне значення true/так, або false/ні).
Вираз if використовують для перевірки справдження умови. Значения умови false и nil вважають хибними (false), а всі решта — будуть істинними (true).
Умову в операторі if можна закрити:
Модифікований запис:
код if умова
позначає: код буде виконано при справдженні умови (true).
Є аналог оператора if з точністю до навпаки — запис:
unless умова [then] код [else код] end
вказує на те, що код буде виконано за умови, що умова буде хибною (false).
Модифікований запис:
код unless умова
позначає: код буде виконано при хибності умови (false).
Оператор галуження за багатьма напрямками має такий вигляд:
case вираз0 when вираз1 [, вираз2 …] [then] код1 ] when вираз3 [, вираз4 …] [then] код2 ] … [else код3 ] end
Він позначає порівняння значень виразу, записаного після case, і виразів, записаним після when, з допомогою оператора ===. При збігу хоча б із одним із значень код буде виконано. Якщо такого не відбудеться для жодного запису when, буде виконано код, записаний після else. Інакше кажучи, записаний вище оператор еквівалентний такому:
if вираз0 === вираз1 [|| вираз0 === вираз2 …] код1 elseif вираз0 === вираз3 [|| вираз0 === вираз4 …] … код2 … [else код3 ] end
Замість виразу після when можна записати діапазон. У цьому випадку буде перевірено належність до цього діапазону виразу, записаного після case.
Цикли
Оператор while виконує код (тіло циклу), поки справджується умова. Тіло циклу від умови відділяють з допомогою службового слова do, ознаки кінця рядка, зворотньої косої риски\ або крапки з комою. Оператор має такий вигляд:
while умова [do] код (тіло циклу) end
Модифікований запис:
код (тіло циклу) while умова
позначає виконання коду, перевірку умови і продовження виконання циклу при її справдженні.
Оператор until
until умова [do] код (тіло циклу) end
виконує тіло циклу, пока умова хибна (false), яку відділяють від тіло циклу з допомогою службового слова do, ознаки кінця рядка чи крапкою з комою. У цьому випадку хибність умови перевіряють до виконання тіла циклу.
Модифікований запис:
код (тіло циклу) until умова
виконує тіло циклу до справдження умови, тобто поки вона хибна. Цей код виконують до перевірки хибності умови.
Оператор for:
for змінна in діапазон [do] код (тіло циклу) end
використовують для виконання тіла циклу для кожного елемента з діапазону значень.
Інша форма запису:
діапазон.each do |змінна| код (тіло циклу) end
Оператори керування циклом:
break — перериває виконання циклу;
next — перериває виконання поточного кроку (ітерації) циклу з переходом до наступного кроку;
redo — запускає цикл заново.
Наприклад, такий код:
for j in 0..5 if j < 2 then puts "Value of variable j is #{j}" redo end end
дає зациклення з таким виведенням:
Value of local j is 0 Value of local j is 0 Value of local j is 0 …
Файли дозволяють зберігати дані навіть тоді, коли програма завершила свою роботу чи коп'ютер вимкнено. Саме тому їх можна використати для передавання даних між різними програмами або різними запусками однієї і тієї самої програми.
Створення нового файлу здійснюють за допомогою методу new класу File:
f = File.new(path; mode)
Тут (рядок тексту) path — це шлях до файлу (абсолютний чи відносний), включаючи назву файлу, mode — режим роботи з файлом (див. далі).
Відкриття наявного файлу здійснюють за допомогою методу open класу File:
f = File.open(path; mode)
(зміст параметрів — той самий).
Параметри роботи з файлами:
При використанні того чи іншого режиму потрібно, щоб програма мала право виконувати відповідні операції з файлом. Інакше буде згенеровано помилку.
Закриття файлу здійснюють за допомогою методу close з класу File:
f.close
Якщо файл не закрито програмним засобом, його однаково буде закрито по завершенню програми. Але хорошим тоном вважають закриття файлу, описане у коді програми.
Робота з файлами подібна роботі зі стандартними потоками введення-виведення. Або скажемо так: стандартні потоки введення і виведення (з клавіатури й на екран) є псевдофайлами, з яких зчитують і в які записують дані. Це означає, що працювати з файлами можна за допомогою одних і тих самих методів. Наприклад, gets і puts.
Метод введення gets має два необов'язкових аргументи:
print 1, 2, 3 # => 123 $, = ", " print 1, 2, 3 # => 1, 2, 3
Видалення файлу здійснюють за допомогою методу delete класу File:
File.delete("example.txt")
Довантаження програм здійснюють за допомогою вказівки require, якій передають назву програми, яка підключають, або шлях до неї. Якщо це назва програми, розширення .rb можна не вказувати. При цьому пошук програми буде здійснено у тих теках, де розташовано стандартні бібліотеки інтерпретатора. Розширити цей список можна за допомогою зміни ключа -I під час завантаження середовища інтерпретатора у командному рядку. Так само можна перевизначити значення змінної $: у самій програмі до того, як буде використано require. Якщо вказівці require передають відносний або абсолютний шлях, буде підключено безпосередньо ту програма, шлях до якої вказано. Пошуку не буде здійснено.
Вбудовані бібліотеки, які можна підключати за допомогою вказівки require (перелік неповний):
Примусове завершення виконання програми здійснюють за допомогою таких вказівок:
Опрацювання винятків — випадків неможливості виконання програми — можна здійснити частиною програми такого вигляду:
begin # код, що може спричинити виняток rescue => # опрацювання винятку else # виконують за відсутності помилок ensure # виконують завжди end
Дві останні складові необов'язкові. Наприклад, виконання коду:
a=1 b=0 begin c=a/b rescue => e # надання змінній e значення винятку print e.message end
завершується виведенням у консоль такого повідомлення:
divided by 0
Щодо веб-програмування мовою Ruby є опис українською мовою. Щодо програмування мовою Ruby взагалі є опис англійською мовою.
Встановлення Ruby полягає не лише у встановленні інтерпретатора, але й у встановленні бібліотек різними способами з різними параметрами та їхніми значеннями для різних операційних систем. Актуальні рецепти встановлення потрібно шукати в Інтернеті безпосередньо перед встановленням.
Як показав досвід роботи в Київському університеті імені Бориса Грінченка у 2016-2020 роках, ці вказівки встановлення можуть змінювати з плином часу. Те, що було прийнятним у 2016 році для Linux Mint 15, може виявитися неприйнятним у 2018 році для Linux Mint 18. А прийнятне у 2018 році може виявитися неприйнятним у 2020 році для Linux Mint 20.
При операційній системі Ubuntu / Linux Mint для забезпечення умов виконання Державної навчальної програми щодо програмування (станом 1 червня 2023 року) потрібно виконати такі вказівки Терміналу:
sudo apt install git git clone https://github.com/rbenv/rbenv.git ~/.rbenv git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" source ~/.bashrc # or `~/.bash_profile` sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev rbenv install 3.2.2 rbenv global 3.2.2 sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev sudo apt-get install tcl-dev tk-dev ruby-dev sudo ln -s /usr/lib/x86_64-linux-gnu/tcl8.6/tclConfig.sh /usr/lib/tclConfig.sh sudo ln -s /usr/lib/x86_64-linux-gnu/tk8.6/tkConfig.sh /usr/lib/tkConfig.sh sudo ln -s /usr/lib/x86_64-linux-gnu/libtcl8.6.so.0 /usr/lib/libtcl8.6.so.0 sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so.0 /usr/lib/libtk8.6.so.0 gem install tk -- --with-tcltkversion=8.6 \ --with-tcl-lib=/usr/lib/x86_64-linux-gnu \ --with-tk-lib=/usr/lib/x86_64-linux-gnu \ --with-tcl-include=/usr/include/tcl8.6 \ --with-tk-include=/usr/include/tcl8.6 \ --enable-pthread sudo gem install ruby2d sudo gem install rails sudo gem install pony sudo apt-get install libgtk-3-dev sudo apt-get install -y ruby-gtk3
Встановлення пакунків Ruby-gtk3, Ruby-mysql2, Ruby-rmagic й оболонки Glade можна виконати за допомогою менеджера програм після виконання вказівок Терміналу.
На початку ознайомлення з мовою програмування зручно використовувати online середовища програмування, які не вимагають встановлення програмного забезпечення.
4. Закріплення вивченного матеріалу
Завдання 1. Створити програму, яка зчитає з клавіатури 2 цілих числа і виведе на екран їхню суму (без коментарів). Порівняти з очікуваним результатом.
Завдання 2. Змінити подану вище програму таким чином, щоб обчислювати:
Завдання 3. Розглянути й проаналізувати програму переведення кількості градусів шкали Цельсія у кількість градусів шкали Фаренгейта.
celsius = nil while celsius == nil puts "Здійсніть вибір:" puts "1 - ввести дані з клавіатури" puts "2 - зчитати дані з файлу" value = gets.to_i if value == 1 puts "Задайте кількість градусів Цельсія: " celsius = gets.to_i elsif value == 2 celsius = File.read("input.txt").to_i end end fahrenheit = (celsius*9/5)+32 print "Результат: " print fahrenheit puts "." f = File.new("output.txt","w") f.puts(celsius.to_s+" градусів Цельсія складають "+fahrenheit.to_s+" градусів Фаренгейта.") f.close
Завдання 4. Дати відповіді на такі запитання:
5. Домашнє завдання
Дано натуральне число n. Скласти логічний вираз, який справджується тоді й лише тоді, коли це двозначне число.
Дано порядковий номер року. Скласти логічний вираз, який справджується тоді й лише тоді, коли цей рік високосний. Врахувати, що серед років, які кратні 4 не всі роки високосні. Високосними не є роки кратні 100 крім тих, що кратні 400.
Дано вік людини. Скласти логічний вираз, який справджується тоді й лише тоді, коли ця людина не шкільного віку.
Текст упорядкував Будчаний Олег Володимирович, вчитель Олімпійського коледжу імені Івана Піддубного Деснянського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 16.01.2017 по 20.01.2017.