Ruby
RuboCop сприяє:
rake hello
end gem "puma"
</syntaxhighlight>
if user.nil?; Приклад:
Ruby і Python
Exception handling
Приклад Proc:
Коли варто використовувати Ruby
Тестування
it "has a name" do
=== Rake task ===
'''Суть Ruby OOP:''' Ruby послідовно застосовує об’єктну модель майже до всіх значень.; Критерій
File.read(path)
істотно: у застосунках `Gemfile.lock` зазвичай потрібно зберігати в системі контролю версій.;
Приклад Minitest: source "https://rubygems.org"
end
module MathUtils
Sinatra
Порада: Symbol добре підходить для імен і ключів, які не потрібно змінювати як текст.;</syntaxhighlight>
user = {
- відтворюваних builds;
- однакових версій у команді;
- стабільного deployment;
- зменшення ризику несподіваних оновлень;
- security audit.; Підказка: Ruby-код часто стає кращим, коли використовує колекції, blocks і маленькі методи замість довгих процедур.; Ruby добре підходить для:
end
Symbol — це легкий ідентифікатор, який часто застосовують, коли потрібно як ключ у Hash або як назва.; }
- підтримувати стиль коду;
- знаходити типові помилки;
- автономно виправляти частину проблем;
- контролювати complexity;
- перевіряти Rails-specific правила;
- стандартизувати код у команді.; end
RSpec.describe User do </syntaxhighlight> Приклади DSL у Ruby-екосистемі:
Iterators
Приклад: Приклад:
require "sinatra"
- `begin`;
- `rescue`;
- `ensure`;
- `raise`.;
Необхідно контролювати: puts doubled.inspect
age: 25,
!; attr_accessor :email
'''Proc''' і '''lambda''' дозволяють зберігати блок коду як об’єкт.; Пакет у Ruby називається '''gem'''.; * Ruby Documentation.; end
def initialize(name)
<syntaxhighlight lang="ruby">
puts read_file("missing.txt")
Приклад:
!; user = User.new("Alice")
{| class="wikitable"
puts message
</div>
'''Висновок:''' Ruby часто обирають за швидкість і виразність, Java — за масштабну enterprise-екосистему, типізацію й JVM-інфраструктуру.;=== Клас сервісу ===
end
def initialize(name, email)
У `irb` можна:
'''Головна думка:''' Ruby — це мова для швидкої, виразної й зручної розробки, особливо у вебі, але її гнучкість потребує дисципліни, тестів і хорошої архітектури.;== Nil ==
task :report do
Приклад:
puts user [:name]
<syntaxhighlight lang="ruby">
Приклад:
<syntaxhighlight lang="ruby">
Запуск:
!; * `Integer`;
* `Float`;
* `String`;
* `Symbol`;
* `Array`;
* `Hash`;
* `Boolean`;
* `NilClass`;
* `Range`;
* `Regexp`;
* `Time`;
* `Class`;
* `Module`.; '''Практична роль:''' irb зручний для швидких експериментів і навчання Ruby.; Приклад:
Основні переважні аспекти Ruby:
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
'''Практична роль:''' Active Record зменшує кількість ручного SQL у типових вебзастосунках.; '''Висновок:''' Ruby часто обирають для Rails і виразного backend-коду, Python — для ширшого спектра задач, особливо data science, AI й automation.; * персональні інформаційні дані;
* паролі;
* токени;
* API keys;
* cookie secrets;
* session data;
* email;
* файли користувачів;
* logs;
* backups;
* third-party gems;
* background job payloads.;<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
'''RuboCop''' — linter і formatter для Ruby.; Ruby
Ruby повертає останній вираз методу автономно, якщо немає явного `return`.; }`;
* усе є собою об’єктом;
* методи можна викликати без дужок;
* рядки підтримують interpolation;
* код часто читається майже як англійський текст.; додатково є собою коротка форма:
<syntaxhighlight lang="ruby">
count -= 1
Це потрібно для:
== Hash ==
Ruby у веброзробці застосовується для:
'''Bundler''' керує залежностями Ruby-проєкту.; '''Перевага:''' Ruby надає можливість оперативно писати зрозумілий код і часто скорочує шлях від ідеї до робочого застосунку.; @value += 1
'''Metaprogramming''' — це можливість програми створювати або змінювати код під час виконання.; end
* Rails routes;
* RSpec tests;
* Rake tasks;
* Sinatra routes;
* configuration files;
* deployment scripts.; 3.times do |i|
[1, 2, 3].each { |number| puts number }
count = 3
== Див.; додатково ==
== Active Record ==
`nil` означає відсутність значення.; Приклад:
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
'''String''' — це рядок тексту.; begin
end
puts user.greet
sum = numbers.reduce(0) { |acc, n| acc + n }
Ruby має звичні умовні конструкції.;== Хороші практики Ruby ==
Висновок
Залежності описуються у файлі `Gemfile`.; end
age = 20
* Chef;
* Puppet;
* deployment scripts;
* Rake tasks;
* automation tools;
* log processing;
* internal scripts;
* CI utilities.; '''Module''' у Ruby застосовується для групування методів, namespace або mixins.; Основні частини:
</div>
printer = Proc.new { |message| puts message }
rubocop
@name = name
Приклад:
Ruby добре підходить для веброзробки, MVP, SaaS, API, автоматизації, скриптів, тестування й внутрішніх бізнес-систем.;
== Ruby і JavaScript ==
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
== Ruby і Java ==
</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Тип змінної визначається під час виконання.; * Bundler Documentation.; * веброзробки;
- backend-застосунків;
- Ruby on Rails;
- API;
- скриптів;
- автоматизації;
- CLI-інструментів;
- тестування;
- DevOps-задач;
- data processing у невеликих сценаріях;
- прототипування;
- внутрішніх адміністративних систем.;
[:name, :email].each do |field|
text = "Ruby"
історичний розвиток Ruby
price = 19.99
irb
Ruby і DevOps
gem "rspec" name = "Alice"
Можливі проблеми:
puts sum end Active Record застосовується для: Rake застосовується для:
puts "Tracked"
end
end
puts "Generating report..."
rbenv і RVM — інструменти для керування версіями Ruby.; end
expect(user.name).to eq("Alice")
rescue ZeroDivisionError => e
def add(a, b)
Ruby on Rails
Популярні інструменти: </syntaxhighlight> Ruby — це динамічна об’єктно-орієнтована мова програмування, яка робить акцент на читабельності, виразності й продуктивності розробника.; * RSpec Documentation.; Приклад lambda:
Blocks є собою однією з ключових особливостей Ruby.; Ruby підтримує роботу metaprogramming через:
Приклад:
- `define_method`;
- `method_missing`;
- `send`;
- `class_eval`;
- `instance_eval`;
- dynamic dispatch;
- modules;
- hooks.; Суть ітераторів: Ruby заохочує описувати, що зробити з колекцією, а не вручну керувати індексами.;
</syntaxhighlight>
Active Record — це ORM, який став популярним завдяки наявності Ruby on Rails.; Hash часто застосовується для:
- email-розсилок;
- імпорту даних;
- генерації звітів;
- обробки файлів;
- webhook processing;
- scheduled tasks;
- інтеграцій;
- довгих операцій.; get "/" do
puts "Hello, world!"
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
end
Порада: mixins корисні для спільної поведінки, але надмірне використання має змогу зробити походження методів неочевидним.; items = [1, 2, 3]
Sinatra підходить для:
end
!; Небезпека: Ruby надає можливість писати дуже гнучкий код, але без дисципліни ця гнучкість має змогу перетворитися на складну для підтримки “магію”.; * RSpec;
- Minitest;
- Capybara;
- FactoryBot;
- SimpleCov;
- Shoulda Matchers;
- VCR;
- WebMock.; * web frameworks;
- database adapters;
- authentication;
- testing;
- background jobs;
- API clients;
- parsing;
- automation;
- deployment;
- logging;
- security.; Перевага: pry часто зручніший за стандартний irb для debugging і дослідження коду.; |-
| ключовий стиль | Виразний, об’єктно-орієнтований, DSL-friendly | Простий, явний, універсальний |- | Веброзробка | Дуже сильний Rails | Django, Flask, FastAPI |- | Data science / AI | Обмежена програмний пакет | Дуже сильна програмний пакет |- | Скрипти | Зручний | Дуже популярний |- | Культура | Developer happiness, convention over configuration | Readability, explicitness, broad ecosystem |}
user.email = "alice@example.com"
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
puts count
{| class="wikitable"
'''irb''' або '''Interactive Ruby''' — це інтерактивна консоль Ruby.; '''RubyGems''' — це платформа пакетів для Ruby.; Запуск:
end
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Web development
Ruby on Rails або Rails — це популярний web framework для Ruby.; end
- моделей;
- міграцій;
- асоціацій;
- validations;
- database queries;
- persistence;
- callbacks.; * встановлювати різні Ruby versions;
- перемикатися між версіями;
- мати окремі версії для проєктів;
- відтворювати середовище;
- тестувати сумісність.; Водночас для системного програмування, embedded, AI/ML або дуже високопродуктивних CPU-bound задач зазвичай краще підходять інші мови.; @value = 0
Проста обробка помилки
include Loggable
Приклад namespace:
== Типові помилки початківців ==
* `attr_reader` створює getter;
* `attr_writer` створює setter;
* `attr_accessor` створює getter і setter.;
user = nil </syntaxhighlight>
Mixins
def log(message) def track
"File not found"
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
</div>
Потрібно контролювати:
class User
'''істотно:''' Ruby сильний у своїй ніші, але не є собою універсальним вибором для всіх видів програмного забезпечення.; puts "Adult" if age >= 18
active: true
Order.new.track
<syntaxhighlight lang="ruby">
class Order
'''Порада:''' для командних проєктів варто явно фіксувати версію Ruby, як ілюстрація у `.ruby-version`.;
end a + b
</div>
Ruby часто використовують для вебзастосунків, автоматизації, скриптів, CLI-інструментів, прототипування, тестування, DevOps-задач і внутрішніх бізнес-систем.; active_users = users.select { |user| user [:active] }
== Symbol ==
</div>
</div>
== Синтаксис ==
У Ruby/Rails часто використовують background jobs.; Їх краще переносити в background jobs.; module Trackable
<syntaxhighlight lang="ruby">
require "minitest/autorun"
ensure
Ruby увібрав ідеї з різних мов:
Ruby і Rails-застосунки потребують звичайних практик безпеки.;
ruby hello.rb
Приклади:
end
'''Практична роль:''' RubyGems дає доступ до великої екосистеми бібліотек Ruby.; '''істотно:''' довгі або нестабільні задачі не варто виконувати прямо в web request.; '''Суть module:''' модулі дозволяють організовувати код і повторно використовувати поведінку без класичного множинного наслідування.; def increment
У Ruby mixins часто використовуються замість множинного наслідування.;
</syntaxhighlight>
end
Pry застосовується для:
Bundler
Instance variables зберігають стан конкретного об’єкта й починаються з `@`.;
У Ruby майже все є собою об’єктом.; Python
Приклад:
* задач збірки;
* міграцій;
* тестів;
* імпорту даних;
* автоматизації;
* скриптів підтримки;
* deployment tasks.; '''істотно:''' Ruby-код часто виглядає ідіоматичніше з `each`, `map`, `select` і `times`, ніж із класичними циклами.; Symbols часто використовуються в Rails, конфігураціях, DSL і API.; Приклад:
<syntaxhighlight lang="ruby">
numbers.each do |number|
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>
* high-performance CPU-bound систем;
* embedded;
* системного програмування;
* realtime low-latency задач;
* mobile native development;
* великих AI/ML pipeline;
* проєктів, де вся команда функціонує в іншому стеку;
* задач, де потрібна сильна статична типізація з першого дня.;<syntaxhighlight lang="ruby">
'''Висновок:''' Rails підходить для повноцінних вебзастосунків, а Sinatra — для легших і простіших сервісів.;<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
</syntaxhighlight>
Суть методу: метод у Ruby має змогу бути коротким і виразним, без зайвої службової конструкції.; message = "Hello, #{name}!" |- | Основна роль | Backend, Rails, scripts | Frontend, Node.js, full-stack |- | Виконання | Server-side runtime | Browser і Node.js |- | Веб | Rails backend | React, Vue, Angular, Node.js |- | Синтаксис | Виразний і DSL-friendly | Event-driven і browser-native |}
RSpec відомий DSL-стилем, який читається майже як характеристика поведінки.; puts number
Ruby має динамічну типізацію.; * RubyGems Documentation.;</div>
end
a + b
age = 25
even = numbers.select { |n| n.even?; gem "rails" puts nil.class end
</syntaxhighlight>
Ruby часто використовують для створення DSL — domain-specific language.; class User
Приклад:
!;</div>
puts i
* оперативно перевіряти код;
* тестувати методи;
* експериментувати з синтаксисом;
* перевіряти об’єкти;
* навчатися Ruby.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
- конфігурацій;
- параметрів;
- JSON-подібних структур;
- API-відповідей;
- об’єктів без окремого класу;
- options у методах.;== Коли Ruby має змогу бути невдалим вибором ==
def total
=== Фільтрація даних ===
{ name: "Alice", active: true },
== Змінні ==
{ name: "Carol", active: true }
'''Суть умов:''' Ruby надає можливість писати як класичні, так і дуже компактні перевірки.;
bundle install
</syntaxhighlight>
Ruby і PHP
Критично: Rails має багато захисних механізмів, але неправильний код, небезпечні gems або помилки доступів все одно можуть створювати вразливості.; Популярні інструменти: </syntaxhighlight>
name: "Alice",
Об’єкти
Ruby має виразний і компактний синтаксис.; Приклад:
== Джерела ==
Ruby був створений Юкіхіро Мацумото, додатково відомим як Matz, у 1990-х роках.; def initialize(name, email)
== Background jobs ==
Приклади:
'''Перевага:''' Ruby має зручні методи для роботи з рядками, що робить мову корисною для скриптів і текстової обробки.; Ruby часто порівнюють із Python.; end` або `{ ...;</div>
</div>
* нижча продуктивність порівняно з C, Rust, Go або Java в CPU-bound задачах;
* динамічна типізація має змогу приховувати помилки до runtime;
* великі Rails-проєкти можуть ставати складними;
* metaprogramming має змогу ускладнювати debugging;
* залежність від gems потребує security control;
* менша популярність у AI/Data Science;
* concurrency має свої особливості;
* startup time має змогу бути важливим для деяких сценаріїв.; Ruby має змогу бути не найкращим вибором для:
Ruby має зручні помічники для доступу до полів.; !; end
</div>
</div>
gem install rails
* немає обов’язкових крапок із комою;
* блоки можуть писатися через `do ...; '''Практичний висновок:''' Ruby часто відповідає за backend, а JavaScript — за frontend, хоча обидві мови можуть використовуватися ширше.; puts "Done"
puts [1, 2, 3].class
'''Gemfile.lock''' фіксує точні версії встановлених gems.; Критерій
</div>
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
'''Mixin''' — це спосіб додати методи модуля до класу.; Вони дозволяють:
def add(a, b)
if age >= 18
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
</syntaxhighlight> end
Array — це впорядкований список елементів.; JavaScript
end
Rake
user.save
переважні аспекти Ruby
Поширені помилки:
Загальний характеристика
class Counter
puts "Adult"
* офіційно затверджений сайт Ruby.; user = User.new("Alice")
@price = price
== Instance variables ==
</div>
Ruby on Rails часто порівнюють із PHP-фреймворками.; Тип змінної не потрібно оголошувати явно.; Вона особливо відома завдяки наявності Ruby on Rails, який став одним із найвпливовіших web frameworks для швидкого створення бізнес-застосунків.; Приклад:
</div>
!; Мова проєктувалася з фокусом на зручність і продуктивність програміста.; Java
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
Методи Array:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== irb ==
Але в Ruby частіше використовують ітератори:
Приклад DSL-подібного синтаксису:
'''Практична роль:''' Array у Ruby має багато зручних методів для обробки колекцій.; Код у файлі виконується зверху вниз.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Metaprogramming ==
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
Встановлення gem: Ruby підтримує роботу string interpolation через `#{...}`.; Ruby
Ruby підтримує роботу різні способи повторення.;
</div>
== Обмеження Ruby ==
end
puts MathUtils.add(2, 3)
<syntaxhighlight lang="ruby">
puts "No user"
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
puts number
puts active_users.inspect
* `each`;
* `map`;
* `select`;
* `reject`;
* `find`;
* `reduce`;
* `sort`;
* `uniq`;
* `compact`.; '''Основна ідея:''' Ruby створений як мова, у якій код має бути зрозумілим, виразним і приємним для програміста.; puts even.inspect
puts "Name: #{name}, age: #{age}"
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
class Service
У Ruby не потрібно явно оголошувати функцію `main`.; '''Практична роль:''' RSpec зручний для behavior-driven testing і добре інтегрується з Rails-проєктами.;== rbenv і RVM ==
</div>
end
puts squares.inspect
'''Практична користь:''' RuboCop сприяє підтримувати єдиний стиль Ruby-коду в команді.; [1, 2, 3].each do |number|
@name = name
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
'''Практична роль:''' класи в Ruby використовуються для моделювання об’єктів, бізнес-логіки, сервісів і доменних сутностей.; * RuboCop Documentation.; Ruby / Rails
'''RSpec''' — популярний testing framework для Ruby.;== Цикли ==
* невеликих вебсервісів;
* API;
* прототипів;
* webhooks;
* internal tools;
* простих backend-застосунків.; * Sinatra Documentation.; Особливе поширення Ruby отримав після появи Ruby on Rails, який зробив мову популярною для швидкої веброзробки.;</div>
Приклад:
'''Помилка:''' вважати Ruby повільним або непридатним для бізнесу лише через стереотипи.; Приклад `while`:
Практична роль: синтаксис Ruby орієнтований на читабельність і швидке написання коду.; Ruby поєднує простий синтаксис із потужними можливостями об’єктно-орієнтованого програмування, блоків, ітераторів, модулів, metaprogramming і динамічної типізації.; number = 42
}
end
"Hello from Sinatra"
Практична роль: базові типи Ruby зручні для швидкої роботи з текстами, списками, словниками й об’єктами.; puts "Hello from Rake" Практична роль: Proc і lambda корисні для callbacks, functional-style коду й передачі поведінки як даних.; Для багатьох вебзастосунків продуктивність розробки важливіша за максимальну швидкість виконання.; name = "Alice"
<syntaxhighlight lang="ruby">
expect(user.name).to eq("Alice")
'''Висновок:''' Rails і Laravel мають схожий фокус на продуктивності веброзробника, але належать до різних мовних екосистем.;</div>
== pry ==
</div>
active = true
Ruby є собою об’єктно-орієнтованою мовою.; '''Sinatra''' — легкий Ruby-фреймворк для вебзастосунків.;
</syntaxhighlight>
- Ruby on Rails застосунків;
- SaaS;
- MVP;
- внутрішніх бізнес-систем;
- адміністративних панелей;
- API;
- e-commerce;
- маркетплейсів;
- automation scripts;
- DevOps-скриптів;
- тестових DSL;
- швидкого backend-прототипування.; Критерій
service.log("Started") Rails відомий принципами:
user&.name def self.add(a, b) Ruby найбільш відомий у web development завдяки наявності Rails.; * dependency vulnerabilities;- SQL injection;
- XSS;
- CSRF;
- mass assignment;
- unsafe deserialization;
- secrets;
- session security;
- authentication;
- authorization;
- background jobs;
- file uploads;
- logging sensitive data.; PHP / Laravel
- Convention over Configuration;
- Don’t Repeat Yourself;
- швидка розробка програмного забезпечення;
- інтеграційні функціональні можливості з базами даних;
- генератори коду;
- Active Record;
- MVC-архітектура.; class AddTest < Minitest::Test
DSL
@email = email
Практична роль: Rake надає можливість описувати повторювані задачі Ruby-синтаксисом.; attr_reader :name status = :active nothing = nil істотно: Ruby став відомим не лише через саму мову, а й через культуру розробки, де цінується простота, читабельність і convention over configuration.; include Trackable
Коротка форма:
end
def greet
- вебзастосунків;
- REST API;
- SaaS-продуктів;
- адміністративних панелей;
- маркетплейсів;
- CRM;
- e-commerce;
- внутрішніх бізнес-систем;
- MVP;
- стартап-продуктів.; це динамічна, інтерпретована, об’єктно-орієнтована мова програмування, відома простим і виразним синтаксисом, зручністю; додатково реалізовано активною екосистемою бібліотек і популярністю у веброзробці завдяки наявності фреймворку Ruby on Rails виступає ключовою рисою розробника забезпечується через Ruby.; else
Перевага: Ruby-екосистема має зрілі інструменти для unit, integration і acceptance testing.; * Документація rbenv і RVM.; a + b
end
== RSpec ==
</div>
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
== Приватність даних ==
Ruby-застосунки часто працюють із користувацькими й бізнес-даними.; }
== Класи ==
Практична роль: Ruby on Rails зробив Ruby одним із найпопулярніших інструментів для швидкого створення вебзастосунків.; * плутанина між String і Symbol;
- надмірне використання monkey patching;
- ігнорування `nil`;
- занадто великі класи;
- слабка обробка exceptions;
- залежність від глобального стану;
- відсутність тестів;
- неправильне використання blocks;
- непотрібне metaprogramming;
- незафіксовані версії gems;
- ігнорування performance проблем у запитах до бази;
- N+1 queries у Rails;
- логування секретів.; end
numbers = [1, 2, 3, 4, 5]
</div>
name = "Alice"
* писати прості методи;
* уникати надмірного metaprogramming;
* використовувати Bundler;
* фіксувати версії залежностей;
* писати тести;
* запускати RuboCop;
* перевіряти security advisories;
* не ігнорувати `nil`;
* не робити занадто великі класи;
* використовувати service objects там, де це доречно;
* логувати помилки;
* не зберігати secrets у коді;
* підтримувати зрозумілу структуру проєкту;
* регулярно оновлювати gems.; Ruby
@tax_rate = tax_rate
<syntaxhighlight lang="ruby">
Приклад `Rakefile`:
printer.call("Hello")
Ruby застосовується для:
<syntaxhighlight lang="ruby">
doubled = numbers.map { |n| n * 2 }
it "has a name" do
'''Практична роль:''' Ruby добре підходить для автоматизації, якщо потрібен читабельний скрипт із доступом до багатої екосистеми gems.;</div>
'''Головна перевага:''' Ruby надає можливість оперативно писати виразний і зрозумілий код, особливо для вебзастосунків і бізнес-логіки.;<syntaxhighlight lang="ruby">
instance_variable_get("@#{field}")
puts 10.class
Ruby використовує exceptions для обробки помилок.; * Minitest Documentation.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
{| class="wikitable"
</div>
</div>
<syntaxhighlight lang="bash">
* Perl;
* Smalltalk;
* Lisp;
* Eiffel;
* Ada;
* CLU;
* Python.; Основні типи в Ruby:
'''Суть динамічної типізації:''' програміст швидше пише код, але частина помилок типів має змогу проявитися лише під час виконання.; '''Практична користь:''' Hash зручний для роботи з даними, де істотно оперативно отримувати значення за ключем.; Метод у Ruby оголошується через `def`.; Класи створюються через `class`.;</div>
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
name: "Alice",
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
* інтерактивного debugging;
* inspecting об’єктів;
* перегляду методів;
* зупинки виконання;
* експериментів у runtime.;== Тематичні мітки ==
== Modules ==
=== Обробка списку ===
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
'''Практична роль:''' Ruby on Rails особливо сильний для швидкого створення бізнес-застосунків із базою даних, авторизацією, формами й адміністративною логікою.; end
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
'''Практична користь:''' ці методи зменшують boilerplate для доступу до даних об’єкта.; * читабельний синтаксис;
* висока продуктивність розробника;
* Ruby on Rails;
* потужні blocks;
* зручні collections;
* активна gem-екосистема;
* DSL-friendly стиль;
* metaprogramming;
* хороша культура тестування;
* швидке прототипування;
* зручність для MVP;
* developer happiness;
* гнучкість.; Background jobs потрібні для:
end
end
== Безпека Ruby-застосунків ==
* backend;
* REST API;
* monolith applications;
* SaaS;
* admin panels;
* e-commerce;
* marketplaces;
* startup MVP;
* internal business tools.; '''Критично:''' metaprogramming дуже потужний, але надмірне використання має змогу зробити код складним для читання, пошуку й debugging.;== RubyGems ==
== Методи ==
Встановлення залежностей:
users = [
Rails застосовується для створення:
Rake — це build automation tool для Ruby.;end ] Ruby застосовується в DevOps і infrastructure automation.; calculator = PriceCalculator.new(100, 0.2)
puts calculator.total
Практична роль: Ruby добре підходить для DSL, з цієї причини що має гнучкий синтаксис, blocks і metaprogramming.; Ruby і Java мають різну філософію.; Active Record надає можливість працювати з таблицями бази даних як з Ruby-об’єктами.; puts "Minor"
Типи даних
end Ruby і JavaScript часто зустрічаються разом у web development.; * Active Record Documentation.; * `User` — клас;
- `initialize` — конструктор;
- `@name` — instance variable;
- `greet` — метод об’єкта.;</syntaxhighlight>
end
numbers = [1, 2, 3, 4, 5] def read_file(path)
Головне правило: хороший Ruby-код має бути читабельним, простим, протестованим і без зайвої магії.; Приклад: </syntaxhighlight>
| ; Критерій
Приклади: define_method(field) do </syntaxhighlight> Ruby широко використовує ітератори.;module Loggable rescue Errno::ENOENT <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Приклади задач на Ruby ==
|-
| Основна роль
| Швидка веброзробка
| Швидка веброзробка
|-
| Культура
| Convention over configuration
| Developer-friendly web framework ecosystem
|-
| Deployment
| має змогу бути складнішим для початківців
| Часто простіший на shared hosting
|-
| програмний пакет
| Rails, gems
| Laravel, Composer, широка hosting-підтримка
|}
{{SEO
|title=Ruby — мова програмування для веброзробки, скриптів, автоматизації, Rails і продуктивної розробки
|description=Ruby — Wiki-стаття про динамічну об’єктно-орієнтовану мову програмування. Розглянуто історію Ruby, синтаксис, Ruby on Rails, gems, Bundler, irb, rbenv, RVM, змінні, методи, класи, модулі, блоки, ітератори, exception handling, metaprogramming, веброзробку, автоматизацію, тестування, переваги, обмеження і хороші практики.
|keywords=Ruby, мова програмування Ruby, Ruby programming language, Ruby on Rails, Rails, gem, RubyGems, Bundler, irb, rbenv, RVM, object-oriented programming, dynamic language, blocks, iterators, modules, mixins, metaprogramming, Active Record, Sinatra, RSpec, Minitest, веброзробка, програмування, скриптинг, автоматизація
|alternativeTo=складніші enterprise-фреймворки для швидкої веброзробки; ручне написання boilerplate-коду; довгі цикли створення MVP; статичні мови там, де важлива швидкість розробки; shell-скрипти для складнішої автоматизації; громіздкі backend-рішення для невеликих і середніх вебзастосунків
}}
task :hello do
== Array ==
Запуск:
== Gemfile.lock ==
gem "pg"
puts multiply.call(2, 3)
Типовий стек:
{ name: "Bob", active: false },
|-
| Типізація
| Динамічна
| Статична
|-
| Синтаксис
| Компактний
| Більш формальний
|-
| Швидкість розробки
| Дуже висока для вебзастосунків
| Висока в enterprise-екосистемі, але більше boilerplate
|-
| Runtime
| Ruby VM
| JVM
|-
| Enterprise
| є собою, але менше за Java
| Дуже сильна enterprise-екосистема
|}
</syntaxhighlight> Приклад:
завдяки наявності Практична користь: Bundler користувачі можуть фіксувати версії бібліотек і робити середовище проєкту відтворюваним.;
Практична роль: blocks роблять Ruby дуже зручним для роботи з колекціями, DSL, callbacks і ресурсами.; Запуск: Особливості синтаксису: while count > 0 count = 10 Класичний приклад: attr_reader, attr_writer і attr_accessorRuby має зручний safe navigation operator: Gems використовуються для: Рекомендовано: user = { puts "[LOG] #{message}"
У цьому прикладі: numbers = [1, 2, 3, 4, 5] Приклад: |
;== Перша програма на Ruby ==
Ruby має сильну культуру тестування.;</syntaxhighlight> Blocks</syntaxhighlight> class User "Hello, #{@name}!"
class PriceCalculator end Приклад: service = Service.new |
; result = 10 / 0
multiply = ->(a, b) { a * b } Proc і Lambda<syntaxhighlight lang="ruby">
@name = name
* Sidekiq;
* Resque;
* Delayed Job;
* GoodJob;
* Active Job.; '''Hash''' — це структура key-value.; def initialize(price, tax_rate)
<syntaxhighlight lang="ruby">
puts add(2, 3)
'''Практична роль:''' instance variables дозволяють об’єкту зберігати власний стан.; * Ruby on Rails Guides.; Навіть числа, рядки й `nil` мають методи.;== RuboCop ==
user = User.find(1)
'''Увага:''' `nil` є собою частим джерелом помилок, з цієї причини варто явно обробляти випадки відсутності значення.; squares = numbers.map { |number| number * number }
* Ruby;
* Ruby on Rails;
* PostgreSQL;
* Redis;
* Sidekiq;
* Puma;
* Nginx;
* Hotwire або React/Vue;
* RSpec;
* Docker.; describe User do
end
Приклад:
@email = email
</div>
== String ==
def initialize
Приклад mixin:
status: :active
</div>
@price + (@price * @tax_rate)
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
!;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
puts "hello".class user = { name: "Alice", age: 25 } pry — популярна альтернативна консоль і debugging tool для Ruby.; Практична порада: Ruby варто обирати, коли важливі швидкість розробки, зрозуміла бізнес-логіка, Rails-екосистема й хороша культура тестування.; * Програмування
Умови |
|---|