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