Перейти до вмісту

Ruby

Матеріал з K2 ERP Wiki

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)

!; істотно: exceptions потрібно використовувати для помилкових ситуацій, а не для звичайного flow control.;

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
Ruby має обмеження.;
 "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
puts "Error: #{e.message}" Правило: секрети не повинні зберігатися в коді, Git-репозиторії або відкритих логах.;</syntaxhighlight> Суть прикладу: Ruby надає можливість писати простий код із мінімумом boilerplate.; end
  • Convention over Configuration;
  • Don’t Repeat Yourself;
  • швидка розробка програмного забезпечення;
  • інтеграційні функціональні можливості з базами даних;
  • генератори коду;
  • Active Record;
  • MVC-архітектура.; class AddTest < Minitest::Test
def test_add assert_equal 5, add(2, 3) end end </syntaxhighlight>

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-застосунки часто працюють із користувацькими й бізнес-даними.; }
== Класи ==
Block — це фрагмент коду, який можна передати методу.;

Практична роль: 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_accessor

Ruby має зручний 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-екосистема й хороша культура тестування.; * Програмування

Умови